BlogDocs

Use stricter serializer for unions of simple types(#1132)

Merged
Merging
alexdrydew:pick_correct_serializer_for_simple_unions
into
main
-19%
IMPROVEMENTS
0
REGRESSIONS
1
UNTOUCHED
139
NEW
0
DROPPED
0
IGNORED
0

Benchmarks

Failing

test_core_strRegression
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateTime::test_core_str
-19%
31.4 µs
38.7 µs

Passing

test_build_schema
tests/benchmarks/test_complete_benchmark.py::test_build_schema
-1%
3.5 ms
3.5 ms
test_complete_core_error
tests/benchmarks/test_complete_benchmark.py::test_complete_core_error
+1%
9 ms
8.9 ms
test_complete_core_isinstance
tests/benchmarks/test_complete_benchmark.py::test_complete_core_isinstance
+1%
8.7 ms
8.6 ms
test_complete_core_json
tests/benchmarks/test_complete_benchmark.py::test_complete_core_json
0%
2.6 ms
2.6 ms
test_complete_core_lax
tests/benchmarks/test_complete_benchmark.py::test_complete_core_lax
0%
992 µs
989.8 µs
test_complete_core_strict
tests/benchmarks/test_complete_benchmark.py::test_complete_core_strict
0%
946.9 µs
946.8 µs
test_core_future
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateTime::test_core_future
+1%
47.3 µs
46.9 µs
test_core_future_str
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateTime::test_core_future_str
+1%
31.8 µs
31.4 µs
test_core_python
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateTime::test_core_python
+3%
48.7 µs
47.3 µs
test_core_raw
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateTime::test_core_raw
0%
19.8 µs
19.8 µs
test_model_core_json
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateTime::test_model_core_json
0%
64.6 µs
64.8 µs
test_core_future
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateX::test_core_future
+2%
30 µs
29.4 µs
test_core_future_str
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateX::test_core_future_str
+1%
26.6 µs
26.4 µs
test_date_from_date
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateX::test_date_from_date
+1%
19.7 µs
19.6 µs
test_date_from_datetime
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateX::test_date_from_datetime
+1%
38.7 µs
38.5 µs
test_date_from_datetime_str
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateX::test_date_from_datetime_str
+1%
29.4 µs
29.3 µs
test_date_from_str
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateX::test_date_from_str
+1%
26.5 µs
26.2 µs
test_decimal_from_string_core
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDecimal::test_decimal_from_string_core
+2%
36.8 µs
36.3 µs
test_decimal_from_string_limit
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDecimal::test_decimal_from_string_limit
0%
25.6 µs
25.8 µs
test_decimal_from_string_pyd
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDecimal::test_decimal_from_string_pyd
0%
55.5 µs
55.5 µs
test_core_json_fs
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkSimpleModel::test_core_json_fs
0%
561.2 µs
561.2 µs
test_core_python_fs
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkSimpleModel::test_core_python_fs
-1%
243.9 µs
245.8 µs
test_core_python
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_core_python
+1%
48.1 µs
47.6 µs
test_core_raw
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_core_raw
0%
19.6 µs
19.6 µs
test_core_str
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_core_str
+1%
56.4 µs
55.9 µs
test_model_core_json
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_model_core_json
0%
87.1 µs
86.9 µs
test_uuid_from_string_core
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_uuid_from_string_core
+1%
57.9 µs
57.2 µs
test_uuid_from_string_pyd
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_uuid_from_string_pyd
0%
95.1 µs
95.1 µs
test_uuid_from_uuid_core
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_uuid_from_uuid_core
0%
19.6 µs
19.6 µs
test_uuid_from_uuid_pyd
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_uuid_from_uuid_pyd
0%
20.6 µs
20.6 µs
test_smart_union_coerce_core
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUnion::test_smart_union_coerce_core
+1%
24.7 µs
24.5 µs
test_smart_union_core
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUnion::test_smart_union_core
+1%
22.6 µs
22.4 µs
test_strict_union_core
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUnion::test_strict_union_core
0%
23.2 µs
23.1 µs
test_strict_union_error_core
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUnion::test_strict_union_error_core
0%
52.2 µs
52 µs
test_core_json_fs
tests/benchmarks/test_micro_benchmarks.py::TestModelLarge::test_core_json_fs
0%
766.3 µs
767.8 µs
test_core_python
tests/benchmarks/test_micro_benchmarks.py::TestModelLarge::test_core_python
0%
465.6 µs
466.9 µs
test_arguments
tests/benchmarks/test_micro_benchmarks.py::test_arguments
+2%
43.6 µs
42.7 µs
test_bool_core
tests/benchmarks/test_micro_benchmarks.py::test_bool_core
+1%
48.6 µs
48.3 µs
test_bytes_core
tests/benchmarks/test_micro_benchmarks.py::test_bytes_core
0%
19.3 µs
19.3 µs
test_chain_function
tests/benchmarks/test_micro_benchmarks.py::test_chain_function
0%
37.8 µs
37.7 µs
test_chain_list
tests/benchmarks/test_micro_benchmarks.py::test_chain_list
0%
41 µs
41.1 µs
test_chain_nested_functions
tests/benchmarks/test_micro_benchmarks.py::test_chain_nested_functions
-3%
45.2 µs
46.5 µs
test_chain_two_functions
tests/benchmarks/test_micro_benchmarks.py::test_chain_two_functions
+1%
49.6 µs
49.1 µs
test_core_root_model
tests/benchmarks/test_micro_benchmarks.py::test_core_root_model
0%
93.1 µs
92.9 µs
test_core_string_lax
tests/benchmarks/test_micro_benchmarks.py::test_core_string_lax
0%
19.3 µs
19.3 µs
test_core_string_lax_wrong
tests/benchmarks/test_micro_benchmarks.py::test_core_string_lax_wrong
0%
39.7 µs
39.6 µs
test_core_string_strict
tests/benchmarks/test_micro_benchmarks.py::test_core_string_strict
0%
19.3 µs
19.3 µs
test_core_string_strict_wrong
tests/benchmarks/test_micro_benchmarks.py::test_core_string_strict_wrong
0%
39.2 µs
39.1 µs
test_core_string_strict_wrong_str_e
tests/benchmarks/test_micro_benchmarks.py::test_core_string_strict_wrong_str_e
+1%
73.8 µs
73 µs
test_definition_in_tree
tests/benchmarks/test_micro_benchmarks.py::test_definition_in_tree
0%
4.4 ms
4.4 ms
test_definition_model_core
tests/benchmarks/test_micro_benchmarks.py::test_definition_model_core
0%
5.2 ms
5.2 ms
test_definition_out_of_tree
tests/benchmarks/test_micro_benchmarks.py::test_definition_out_of_tree
0%
7.3 ms
7.3 ms
test_dict_of_any_core
tests/benchmarks/test_micro_benchmarks.py::test_dict_of_any_core
0%
3.5 ms
3.5 ms
test_dict_of_ints_core
tests/benchmarks/test_micro_benchmarks.py::test_dict_of_ints_core
0%
5.2 ms
5.2 ms
test_dict_of_ints_core_json
tests/benchmarks/test_micro_benchmarks.py::test_dict_of_ints_core_json
0%
13.6 ms
13.6 ms
test_dont_raise_error
tests/benchmarks/test_micro_benchmarks.py::test_dont_raise_error
0%
30.3 µs
30.3 µs
test_dont_raise_error_no_info
tests/benchmarks/test_micro_benchmarks.py::test_dont_raise_error_no_info
+1%
27.1 µs
26.9 µs
test_field_function_validator
tests/benchmarks/test_micro_benchmarks.py::test_field_function_validator
0%
1.7 ms
1.7 ms
test_frozenset_of_ints_core
tests/benchmarks/test_micro_benchmarks.py::test_frozenset_of_ints_core
0%
1.1 ms
1.1 ms
test_frozenset_of_ints_duplicates_core
tests/benchmarks/test_micro_benchmarks.py::test_frozenset_of_ints_duplicates_core
0%
760.8 µs
760.2 µs
test_generator_python
tests/benchmarks/test_micro_benchmarks.py::test_generator_python
0%
43.4 µs
43.4 µs
test_generator_rust
tests/benchmarks/test_micro_benchmarks.py::test_generator_rust
-2%
32 µs
32.9 µs
test_int_error
tests/benchmarks/test_micro_benchmarks.py::test_int_error
+3%
80.8 µs
78.7 µs
test_int_range
tests/benchmarks/test_micro_benchmarks.py::test_int_range
0%
20.8 µs
20.8 µs
test_int_range_json
tests/benchmarks/test_micro_benchmarks.py::test_int_range_json
0%
22.1 µs
22.2 µs
test_isinstance_json
tests/benchmarks/test_micro_benchmarks.py::test_isinstance_json
-3%
31.9 µs
32.9 µs
test_isinstance_string_lax_false
tests/benchmarks/test_micro_benchmarks.py::test_isinstance_string_lax_false
0%
21.8 µs
21.8 µs
test_isinstance_string_lax_true
tests/benchmarks/test_micro_benchmarks.py::test_isinstance_string_lax_true
0%
19.5 µs
19.5 µs
test_isinstance_string_strict_false
tests/benchmarks/test_micro_benchmarks.py::test_isinstance_string_strict_false
0%
21.3 µs
21.3 µs
test_isinstance_string_strict_true
tests/benchmarks/test_micro_benchmarks.py::test_isinstance_string_strict_true
0%
19.6 µs
19.6 µs
test_list_of_any_core_py
tests/benchmarks/test_micro_benchmarks.py::test_list_of_any_core_py
0%
186.1 µs
185.9 µs
test_list_of_dict_models_core
tests/benchmarks/test_micro_benchmarks.py::test_list_of_dict_models_core
+1%
517.6 µs
512 µs
test_list_of_ints_core_json
tests/benchmarks/test_micro_benchmarks.py::test_list_of_ints_core_json
0%
5 ms
5 ms
test_list_of_ints_core_py
tests/benchmarks/test_micro_benchmarks.py::test_list_of_ints_core_py
0%
2.4 ms
2.4 ms
test_list_of_nullable_core
tests/benchmarks/test_micro_benchmarks.py::test_list_of_nullable_core
0%
485.5 µs
485.3 µs
test_many_models_core_dict
tests/benchmarks/test_micro_benchmarks.py::test_many_models_core_dict
0%
5.4 ms
5.4 ms
test_many_models_core_model
tests/benchmarks/test_micro_benchmarks.py::test_many_models_core_model
0%
15.8 ms
15.8 ms
test_model_instance
tests/benchmarks/test_micro_benchmarks.py::test_model_instance
-2%
56.2 µs
57.2 µs
test_model_instance_abc
tests/benchmarks/test_micro_benchmarks.py::test_model_instance_abc
0%
56.8 µs
56.6 µs
test_positional_tuple
tests/benchmarks/test_micro_benchmarks.py::test_positional_tuple
+2%
32.1 µs
31.5 µs
test_raise_error_custom
tests/benchmarks/test_micro_benchmarks.py::test_raise_error_custom
0%
65.1 µs
64.8 µs
test_raise_error_value_error
tests/benchmarks/test_micro_benchmarks.py::test_raise_error_value_error
+1%
64.2 µs
63.6 µs
test_set_of_ints_core
tests/benchmarks/test_micro_benchmarks.py::test_set_of_ints_core
0%
3.5 ms
3.5 ms
test_set_of_ints_core_duplicates
tests/benchmarks/test_micro_benchmarks.py::test_set_of_ints_core_duplicates
0%
1.8 ms
1.8 ms
test_set_of_ints_core_json
tests/benchmarks/test_micro_benchmarks.py::test_set_of_ints_core_json
0%
5.9 ms
5.8 ms
test_set_of_ints_core_json_duplicates
tests/benchmarks/test_micro_benchmarks.py::test_set_of_ints_core_json_duplicates
0%
3.7 ms
3.6 ms
test_set_of_ints_core_length
tests/benchmarks/test_micro_benchmarks.py::test_set_of_ints_core_length
0%
3.6 ms
3.6 ms
test_small_class_core_dict
tests/benchmarks/test_micro_benchmarks.py::test_small_class_core_dict
-1%
33.4 µs
33.6 µs
test_small_class_core_model
tests/benchmarks/test_micro_benchmarks.py::test_small_class_core_model
+4%
52.1 µs
50.3 µs
test_strict_int
tests/benchmarks/test_micro_benchmarks.py::test_strict_int
0%
19.5 µs
19.5 µs
test_tagged_union_int_keys_json
tests/benchmarks/test_micro_benchmarks.py::test_tagged_union_int_keys_json
0%
48.4 µs
48.6 µs
test_tagged_union_int_keys_python
tests/benchmarks/test_micro_benchmarks.py::test_tagged_union_int_keys_python
0%
34.8 µs
34.8 µs
test_tuple_many_positional
tests/benchmarks/test_micro_benchmarks.py::test_tuple_many_positional
+2%
34.1 µs
33.5 µs
test_tuple_many_variable
tests/benchmarks/test_micro_benchmarks.py::test_tuple_many_variable
+2%
34.1 µs
33.5 µs
test_validate_literal[json-few_ints]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-few_ints]
-1%
21.7 µs
21.9 µs
test_validate_literal[json-few_large_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-few_large_strings]
0%
25.1 µs
25.1 µs
test_validate_literal[json-few_mixed]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-few_mixed]
+2%
29.9 µs
29.3 µs
test_validate_literal[json-few_small_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-few_small_strings]
0%
24.8 µs
24.9 µs
test_validate_literal[json-few_str_enum]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-few_str_enum]
+1%
32.3 µs
32 µs
test_validate_literal[json-many_ints]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-many_ints]
0%
21.7 µs
21.8 µs
test_validate_literal[json-many_large_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-many_large_strings]
-1%
25.1 µs
25.2 µs
test_validate_literal[json-many_small_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-many_small_strings]
0%
23.5 µs
23.5 µs
test_validate_literal[python-few_ints]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-few_ints]
-1%
20.5 µs
20.6 µs
test_validate_literal[python-few_large_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-few_large_strings]
0%
20.6 µs
20.6 µs
test_validate_literal[python-few_mixed]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-few_mixed]
+2%
27.5 µs
27 µs
test_validate_literal[python-few_small_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-few_small_strings]
0%
20.4 µs
20.4 µs
test_validate_literal[python-few_str_enum]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-few_str_enum]
+1%
25.4 µs
25.1 µs
test_validate_literal[python-many_ints]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-many_ints]
0%
20.6 µs
20.7 µs
test_validate_literal[python-many_large_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-many_large_strings]
0%
20.6 µs
20.6 µs
test_validate_literal[python-many_small_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-many_small_strings]
-1%
20.3 µs
20.5 µs
test_variable_tuple
tests/benchmarks/test_micro_benchmarks.py::test_variable_tuple
+2%
32.1 µs
31.5 µs
test_with_default
tests/benchmarks/test_micro_benchmarks.py::test_with_default
+1%
42.9 µs
42.2 µs
test_nested_schema_inlined
tests/benchmarks/test_nested_benchmark.py::test_nested_schema_inlined
0%
95.9 ms
95.8 ms
test_nested_schema_using_defs
tests/benchmarks/test_nested_benchmark.py::test_nested_schema_using_defs
0%
103.8 ms
103.9 ms
test_core_dict
tests/benchmarks/test_serialization_micro.py::TestBenchmarkSimpleModel::test_core_dict
0%
261.6 µs
261.3 µs
test_core_dict_filter
tests/benchmarks/test_serialization_micro.py::TestBenchmarkSimpleModel::test_core_dict_filter
0%
267.9 µs
268.4 µs
test_core_json
tests/benchmarks/test_serialization_micro.py::TestBenchmarkSimpleModel::test_core_json
0%
315.2 µs
314.4 µs
test_core_model_json
tests/benchmarks/test_serialization_micro.py::test_core_model_json
+1%
49.8 µs
49.6 µs
test_core_model_json_extra
tests/benchmarks/test_serialization_micro.py::test_core_model_json_extra
0%
58.2 µs
58 µs
test_core_model_py
tests/benchmarks/test_serialization_micro.py::test_core_model_py
0%
51 µs
50.9 µs
test_core_model_py_extra
tests/benchmarks/test_serialization_micro.py::test_core_model_py_extra
+1%
59.5 µs
59.2 µs
test_date_format
tests/benchmarks/test_serialization_micro.py::test_date_format
+1%
99.4 µs
98.8 µs
test_date_format_function
tests/benchmarks/test_serialization_micro.py::test_date_format_function
0%
102 µs
102 µs
test_date_format_function_no_info
tests/benchmarks/test_serialization_micro.py::test_date_format_function_no_info
0%
99.6 µs
99.1 µs
test_datetime
tests/benchmarks/test_serialization_micro.py::test_datetime
0%
49.5 µs
49.5 µs
test_filter
tests/benchmarks/test_serialization_micro.py::test_filter
0%
113.8 µs
113.8 µs
test_json_any_list_int
tests/benchmarks/test_serialization_micro.py::test_json_any_list_int
0%
1.3 ms
1.3 ms
test_json_any_list_str
tests/benchmarks/test_serialization_micro.py::test_json_any_list_str
0%
1.3 ms
1.3 ms
test_json_direct_list_int
tests/benchmarks/test_serialization_micro.py::test_json_direct_list_int
0%
674.1 µs
673.9 µs
test_json_direct_list_str
tests/benchmarks/test_serialization_micro.py::test_json_direct_list_str
0%
668.3 µs
667.1 µs
test_model_exclude_unset_false
tests/benchmarks/test_serialization_micro.py::test_model_exclude_unset_false
0%
54.3 µs
54.2 µs
test_model_exclude_unset_true
tests/benchmarks/test_serialization_micro.py::test_model_exclude_unset_true
+1%
66.7 µs
66 µs
test_model_list_core_json
tests/benchmarks/test_serialization_micro.py::test_model_list_core_json
0%
749.9 µs
749.7 µs
test_python_json_list_int
tests/benchmarks/test_serialization_micro.py::test_python_json_list_int
0%
582.3 µs
582 µs
test_python_json_list_none
tests/benchmarks/test_serialization_micro.py::test_python_json_list_none
0%
549.2 µs
548.6 µs
test_python_json_list_str
tests/benchmarks/test_serialization_micro.py::test_python_json_list_str
0%
592 µs
591.3 µs
test_to_string_direct
tests/benchmarks/test_serialization_micro.py::test_to_string_direct
0%
31.4 µs
31.5 µs
test_to_string_format
tests/benchmarks/test_serialization_micro.py::test_to_string_format
0%
39.7 µs
39.6 µs
test_uuid
tests/benchmarks/test_serialization_micro.py::test_uuid
0%
63.7 µs
63.6 µs

Commits

Click on a commit to change the comparison range
base
main
4df7624
+38%
Use stricter serializer for unions of simple types
7c6f41a
5 months ago by alexdrydew
-57%
Implement retry_with_lax_check in build_simple_serializer
16370b4
4 months ago by alexdrydew
ResourcesHomePricingDocsBlogGitHub
Copyright © 2024 CodSpeed Technology SAS. All rights reserved.