pydantic
pydantic-core
BlogDocs

Simplify shared union serializer logic

#1538Merged
Comparing
dh/wip-union-simplification
(
ee9dd3d
) with
main
(
061711f
)
0%
Improvements
0
Regressions
0
Untouched
155
New
0
Dropped
0
Ignored
0

Benchmarks

Passed

test_field_function_validator
tests/benchmarks/test_micro_benchmarks.py::test_field_function_validator
+2%
365.7 µs
358.7 µs
test_core_python
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateTime::test_core_python
+2%
26.6 µs
26.1 µs
test_datetime
tests/benchmarks/test_serialization_micro.py::test_datetime
+1%
26.9 µs
26.5 µs
test_validate_literal[python-many_small_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-many_small_strings]
+1%
14.5 µs
14.3 µs
test_validate_literal[python-few_small_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-few_small_strings]
+1%
14.5 µs
14.3 µs
test_validate_literal[python-few_large_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-few_large_strings]
+1%
14.6 µs
14.4 µs
test_validate_literal[python-few_str_enum]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-few_str_enum]
+1%
15 µs
14.9 µs
test_validate_literal[python-few_mixed]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-few_mixed]
+1%
16.6 µs
16.4 µs
test_bool_core
tests/benchmarks/test_micro_benchmarks.py::test_bool_core
+1%
22.7 µs
22.5 µs
test_int_range
tests/benchmarks/test_micro_benchmarks.py::test_int_range
+1%
14.5 µs
14.3 µs
test_validate_literal[python-many_large_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-many_large_strings]
+1%
14.6 µs
14.5 µs
test_core_model_json
tests/benchmarks/test_serialization_micro.py::test_core_model_json
+1%
25.1 µs
24.8 µs
test_validate_literal[json-many_small_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-many_small_strings]
+1%
15.7 µs
15.6 µs
test_validate_literal[json-few_large_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-few_large_strings]
+1%
15.8 µs
15.7 µs
test_generator_python
tests/benchmarks/test_micro_benchmarks.py::test_generator_python
+1%
22.5 µs
22.3 µs
test_core_dict
tests/benchmarks/test_serialization_micro.py::TestBenchmarkSimpleModel::test_core_dict
+1%
72.9 µs
72.3 µs
test_core_string_lax
tests/benchmarks/test_micro_benchmarks.py::test_core_string_lax
+1%
13.3 µs
13.2 µs
test_bytes_core
tests/benchmarks/test_micro_benchmarks.py::test_bytes_core
+1%
13.4 µs
13.2 µs
test_core_string_strict_wrong
tests/benchmarks/test_micro_benchmarks.py::test_core_string_strict_wrong
+1%
26.9 µs
26.7 µs
test_dataclass_to_json
tests/benchmarks/test_serialization_micro.py::test_dataclass_to_json
+1%
38.4 µs
38.1 µs
test_enum_str_core
tests/benchmarks/test_micro_benchmarks.py::test_enum_str_core
+1%
14.7 µs
14.6 µs
test_core_future
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateTime::test_core_future
+1%
25.7 µs
25.5 µs
test_validate_literal[json-many_ints]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-many_ints]
+1%
15.2 µs
15 µs
test_validate_literal[json-few_ints]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-few_ints]
+1%
15.2 µs
15.1 µs
test_model_list_core_json
tests/benchmarks/test_serialization_micro.py::test_model_list_core_json
+1%
154.2 µs
153.1 µs
test_ser_list_of_lists
tests/benchmarks/test_serialization_micro.py::test_ser_list_of_lists
+1%
1.2 ms
1.2 ms
test_raise_error_custom
tests/benchmarks/test_micro_benchmarks.py::test_raise_error_custom
+1%
37.1 µs
36.8 µs
test_raise_error_value_error
tests/benchmarks/test_micro_benchmarks.py::test_raise_error_value_error
+1%
36.1 µs
35.9 µs
test_smart_union_coerce_core
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUnion::test_smart_union_coerce_core
+1%
17.2 µs
17.1 µs
test_strict_int_fails
tests/benchmarks/test_micro_benchmarks.py::test_strict_int_fails
+1%
26.7 µs
26.5 µs
test_generator_rust
tests/benchmarks/test_micro_benchmarks.py::test_generator_rust
+1%
18.3 µs
18.2 µs
test_complete_core_json
tests/benchmarks/test_complete_benchmark.py::test_complete_core_json
+1%
441.2 µs
438.4 µs
test_core_str
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateTime::test_core_str
+1%
18.2 µs
18.1 µs
test_enum_str_python
tests/benchmarks/test_micro_benchmarks.py::test_enum_str_python
+1%
23.1 µs
23 µs
test_enum_int_python
tests/benchmarks/test_micro_benchmarks.py::test_enum_int_python
+1%
23.5 µs
23.4 µs
test_validate_literal[json-few_str_enum]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-few_str_enum]
+1%
19.8 µs
19.7 µs
test_complete_core_lax
tests/benchmarks/test_complete_benchmark.py::test_complete_core_lax
+1%
275.5 µs
274 µs
test_smart_union_core
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUnion::test_smart_union_core
+1%
15.6 µs
15.6 µs
test_date_from_datetime
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateX::test_date_from_datetime
+1%
21.6 µs
21.5 µs
test_json_direct_list_int
tests/benchmarks/test_serialization_micro.py::test_json_direct_list_int
+1%
134.6 µs
133.8 µs
test_core_string_lax_wrong
tests/benchmarks/test_micro_benchmarks.py::test_core_string_lax_wrong
+1%
27.2 µs
27.1 µs
test_tuple_many_positional
tests/benchmarks/test_micro_benchmarks.py::test_tuple_many_positional
+1%
17.6 µs
17.5 µs
test_set_of_ints_core_json
tests/benchmarks/test_micro_benchmarks.py::test_set_of_ints_core_json
0%
887.3 µs
883 µs
test_core_future_str
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateTime::test_core_future_str
0%
18.5 µs
18.4 µs
test_dont_raise_error
tests/benchmarks/test_micro_benchmarks.py::test_dont_raise_error
0%
19.2 µs
19.1 µs
test_core_model_py
tests/benchmarks/test_serialization_micro.py::test_core_model_py
0%
25.8 µs
25.7 µs
test_chain_two_functions
tests/benchmarks/test_micro_benchmarks.py::test_chain_two_functions
0%
28 µs
27.9 µs
test_core_model_json_extra
tests/benchmarks/test_serialization_micro.py::test_core_model_json_extra
0%
28.8 µs
28.7 µs
test_strict_int
tests/benchmarks/test_micro_benchmarks.py::test_strict_int
0%
13.3 µs
13.3 µs
test_tagged_union_int_keys_python
tests/benchmarks/test_micro_benchmarks.py::test_tagged_union_int_keys_python
0%
20.2 µs
20.1 µs
test_with_default
tests/benchmarks/test_micro_benchmarks.py::test_with_default
0%
22.4 µs
22.4 µs
test_validate_literal[python-many_ints]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-many_ints]
0%
14.2 µs
14.2 µs
test_list_of_nullable_core
tests/benchmarks/test_micro_benchmarks.py::test_list_of_nullable_core
0%
104.4 µs
104 µs
test_core_json
tests/benchmarks/test_serialization_micro.py::TestBenchmarkSimpleModel::test_core_json
0%
79.9 µs
79.6 µs
test_uuid
tests/benchmarks/test_serialization_micro.py::test_uuid
0%
23 µs
22.9 µs
test_validate_literal[json-few_small_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-few_small_strings]
0%
15.6 µs
15.6 µs
test_list_of_dict_models_core
tests/benchmarks/test_micro_benchmarks.py::test_list_of_dict_models_core
0%
92.9 µs
92.5 µs
test_chain_function
tests/benchmarks/test_micro_benchmarks.py::test_chain_function
0%
24.1 µs
24 µs
test_list_of_strs_json_uncached
tests/benchmarks/test_micro_benchmarks.py::test_list_of_strs_json_uncached
0%
408.5 µs
407.1 µs
test_model_exclude_unset_false
tests/benchmarks/test_serialization_micro.py::test_model_exclude_unset_false
0%
29.1 µs
29 µs
test_isinstance_json
tests/benchmarks/test_micro_benchmarks.py::test_isinstance_json
0%
17.4 µs
17.4 µs
test_model_instance
tests/benchmarks/test_micro_benchmarks.py::test_model_instance
0%
28.2 µs
28.1 µs
test_core_json_fs
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkSimpleModel::test_core_json_fs
0%
106.8 µs
106.5 µs
test_tuple_many_variable
tests/benchmarks/test_micro_benchmarks.py::test_tuple_many_variable
0%
17.6 µs
17.6 µs
test_to_string_direct
tests/benchmarks/test_serialization_micro.py::test_to_string_direct
0%
18.2 µs
18.1 µs
test_set_of_ints_core_length
tests/benchmarks/test_micro_benchmarks.py::test_set_of_ints_core_length
0%
733.4 µs
731.1 µs
test_complete_core_serializer_to_json
tests/benchmarks/test_complete_benchmark.py::test_complete_core_serializer_to_json
0%
291.7 µs
290.8 µs
test_dict_of_ints_core
tests/benchmarks/test_micro_benchmarks.py::test_dict_of_ints_core
0%
1 ms
1 ms
test_validate_literal[json-few_mixed]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-few_mixed]
0%
18 µs
17.9 µs
test_strict_union_error_core
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUnion::test_strict_union_error_core
0%
31.8 µs
31.7 µs
test_arguments
tests/benchmarks/test_micro_benchmarks.py::test_arguments
0%
22.3 µs
22.2 µs
test_tagged_union_int_keys_json
tests/benchmarks/test_micro_benchmarks.py::test_tagged_union_int_keys_json
0%
24.4 µs
24.4 µs
test_definition_model_core
tests/benchmarks/test_micro_benchmarks.py::test_definition_model_core
0%
1.1 ms
1.1 ms
test_isinstance_string_strict_true
tests/benchmarks/test_micro_benchmarks.py::test_isinstance_string_strict_true
0%
13.4 µs
13.4 µs
test_complete_core_serializer_to_python
tests/benchmarks/test_complete_benchmark.py::test_complete_core_serializer_to_python
0%
260.9 µs
260.3 µs
test_set_of_ints_core
tests/benchmarks/test_micro_benchmarks.py::test_set_of_ints_core
0%
720.3 µs
718.8 µs
test_enum_int_core
tests/benchmarks/test_micro_benchmarks.py::test_enum_int_core
0%
15.1 µs
15.1 µs
test_dont_raise_error_no_info
tests/benchmarks/test_micro_benchmarks.py::test_dont_raise_error_no_info
0%
16.9 µs
16.9 µs
test_strict_union_core
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUnion::test_strict_union_core
0%
16.3 µs
16.3 µs
test_positional_tuple
tests/benchmarks/test_micro_benchmarks.py::test_positional_tuple
0%
18 µs
18 µs
test_int_error
tests/benchmarks/test_micro_benchmarks.py::test_int_error
0%
40 µs
39.9 µs
test_variable_tuple
tests/benchmarks/test_micro_benchmarks.py::test_variable_tuple
0%
18 µs
17.9 µs
test_model_exclude_unset_true
tests/benchmarks/test_serialization_micro.py::test_model_exclude_unset_true
0%
35.3 µs
35.3 µs
test_python_json_list_none
tests/benchmarks/test_serialization_micro.py::test_python_json_list_none
0%
121.3 µs
121.1 µs
test_core_str
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_core_str
0%
32.4 µs
32.3 µs
test_chain_nested_functions
tests/benchmarks/test_micro_benchmarks.py::test_chain_nested_functions
0%
28 µs
28 µs
test_build_schema
tests/benchmarks/test_complete_benchmark.py::test_build_schema
0%
744.1 µs
743.2 µs
test_core_model_py_extra
tests/benchmarks/test_serialization_micro.py::test_core_model_py_extra
0%
29.5 µs
29.4 µs
test_many_models_core_dict
tests/benchmarks/test_micro_benchmarks.py::test_many_models_core_dict
0%
952.1 µs
951.2 µs
test_python_json_list_str
tests/benchmarks/test_serialization_micro.py::test_python_json_list_str
0%
154.9 µs
154.8 µs
test_list_of_ints_core_py
tests/benchmarks/test_micro_benchmarks.py::test_list_of_ints_core_py
0%
514.1 µs
513.8 µs
test_core_dict_filter
tests/benchmarks/test_serialization_micro.py::TestBenchmarkSimpleModel::test_core_dict_filter
0%
78.1 µs
78.1 µs
test_json_any_list_int
tests/benchmarks/test_serialization_micro.py::test_json_any_list_int
0%
195.5 µs
195.4 µs
test_list_of_any_core_py
tests/benchmarks/test_micro_benchmarks.py::test_list_of_any_core_py
0%
98.6 µs
98.5 µs
test_set_of_ints_core_duplicates
tests/benchmarks/test_micro_benchmarks.py::test_set_of_ints_core_duplicates
0%
352.6 µs
352.5 µs
test_model_instance_abc
tests/benchmarks/test_micro_benchmarks.py::test_model_instance_abc
0%
28.6 µs
28.6 µs
test_json_any_list_str
tests/benchmarks/test_serialization_micro.py::test_json_any_list_str
0%
228.3 µs
228.3 µs
test_set_of_ints_core_json_duplicates
tests/benchmarks/test_micro_benchmarks.py::test_set_of_ints_core_json_duplicates
0%
439.1 µs
439 µs
test_int_range_json
tests/benchmarks/test_micro_benchmarks.py::test_int_range_json
0%
15.3 µs
15.3 µs
test_to_string_format
tests/benchmarks/test_serialization_micro.py::test_to_string_format
0%
22.4 µs
22.4 µs
test_dict_of_any_core
tests/benchmarks/test_micro_benchmarks.py::test_dict_of_any_core
0%
714.8 µs
714.8 µs
test_date_from_date
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateX::test_date_from_date
0%
13.7 µs
13.7 µs
test_core_string_strict
tests/benchmarks/test_micro_benchmarks.py::test_core_string_strict
0%
13.3 µs
13.3 µs
test_isinstance_string_lax_true
tests/benchmarks/test_micro_benchmarks.py::test_isinstance_string_lax_true
0%
13.4 µs
13.4 µs
test_validate_literal[json-many_large_strings]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[json-many_large_strings]
0%
15.8 µs
15.8 µs
test_validate_literal[python-few_ints]
tests/benchmarks/test_micro_benchmarks.py::test_validate_literal[python-few_ints]
0%
14.2 µs
14.2 µs
test_nested_schema_using_defs
tests/benchmarks/test_nested_benchmark.py::test_nested_schema_using_defs
0%
15.4 ms
15.4 ms
test_chain_list
tests/benchmarks/test_micro_benchmarks.py::test_chain_list
0%
24.3 µs
24.3 µs
test_core_string_strict_wrong_str_e
tests/benchmarks/test_micro_benchmarks.py::test_core_string_strict_wrong_str_e
0%
39.6 µs
39.7 µs
test_frozenset_of_ints_duplicates_core
tests/benchmarks/test_micro_benchmarks.py::test_frozenset_of_ints_duplicates_core
0%
170.3 µs
170.4 µs
test_date_format_function_no_info
tests/benchmarks/test_serialization_micro.py::test_date_format_function_no_info
0%
50.9 µs
50.9 µs
test_complete_core_strict
tests/benchmarks/test_complete_benchmark.py::test_complete_core_strict
0%
252.3 µs
252.4 µs
test_definition_out_of_tree
tests/benchmarks/test_micro_benchmarks.py::test_definition_out_of_tree
0%
1 ms
1 ms
test_list_of_strs_py_cached
tests/benchmarks/test_micro_benchmarks.py::test_list_of_strs_py_cached
0%
122.8 µs
122.8 µs
test_definition_in_tree
tests/benchmarks/test_micro_benchmarks.py::test_definition_in_tree
0%
738.3 µs
738.7 µs
test_frozenset_of_ints_core
tests/benchmarks/test_micro_benchmarks.py::test_frozenset_of_ints_core
0%
246 µs
246.1 µs
test_list_of_strs_json_cached
tests/benchmarks/test_micro_benchmarks.py::test_list_of_strs_json_cached
0%
299.6 µs
299.9 µs
test_core_python_fs
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkSimpleModel::test_core_python_fs
0%
69 µs
69 µs
test_json_direct_list_str
tests/benchmarks/test_serialization_micro.py::test_json_direct_list_str
0%
162.7 µs
162.9 µs
test_core_python
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_core_python
0%
25.6 µs
25.6 µs
test_uuid_from_string_pyd
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_uuid_from_string_pyd
0%
47.7 µs
47.7 µs
test_uuid_from_string_core
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_uuid_from_string_core
0%
32.2 µs
32.2 µs
test_model_core_json
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_model_core_json
0%
42 µs
42.1 µs
test_isinstance_string_lax_false
tests/benchmarks/test_micro_benchmarks.py::test_isinstance_string_lax_false
0%
15.2 µs
15.2 µs
test_uuid_from_uuid_core
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_uuid_from_uuid_core
0%
13.5 µs
13.6 µs
test_date_format_function
tests/benchmarks/test_serialization_micro.py::test_date_format_function
0%
52.2 µs
52.3 µs
test_small_class_core_model
tests/benchmarks/test_micro_benchmarks.py::test_small_class_core_model
0%
26.5 µs
26.6 µs
test_decimal_from_string_core
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDecimal::test_decimal_from_string_core
0%
23.1 µs
23.2 µs
test_python_json_list_int
tests/benchmarks/test_serialization_micro.py::test_python_json_list_int
0%
147.9 µs
148.3 µs
test_decimal_from_string_pyd
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDecimal::test_decimal_from_string_pyd
0%
31.8 µs
31.9 µs
test_list_of_ints_core_json
tests/benchmarks/test_micro_benchmarks.py::test_list_of_ints_core_json
0%
742.5 µs
744.7 µs
test_model_core_json
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateTime::test_model_core_json
0%
30.5 µs
30.6 µs
test_complete_core_isinstance
tests/benchmarks/test_complete_benchmark.py::test_complete_core_isinstance
0%
1.8 ms
1.8 ms
test_core_future
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateX::test_core_future
0%
17.8 µs
17.8 µs
test_complete_core_error
tests/benchmarks/test_complete_benchmark.py::test_complete_core_error
0%
1.8 ms
1.8 ms
test_small_class_core_dict
tests/benchmarks/test_micro_benchmarks.py::test_small_class_core_dict
0%
18.4 µs
18.5 µs
test_dataclass_serialization_json
tests/benchmarks/test_serialization_micro.py::test_dataclass_serialization_json
0%
24.2 µs
24.3 µs
test_date_from_str
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateX::test_date_from_str
0%
15.7 µs
15.7 µs
test_core_python
tests/benchmarks/test_micro_benchmarks.py::TestModelLarge::test_core_python
0%
128.8 µs
129.3 µs
test_nested_schema_inlined
tests/benchmarks/test_nested_benchmark.py::test_nested_schema_inlined
0%
16 ms
16.1 ms
test_filter
tests/benchmarks/test_serialization_micro.py::test_filter
0%
41.2 µs
41.4 µs
test_core_json_fs
tests/benchmarks/test_micro_benchmarks.py::TestModelLarge::test_core_json_fs
0%
144.6 µs
145.3 µs
test_decimal_from_string_limit
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDecimal::test_decimal_from_string_limit
0%
18.1 µs
18.2 µs
test_core_future_str
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateX::test_core_future_str
-1%
16.5 µs
16.6 µs
test_dict_of_ints_core_json
tests/benchmarks/test_micro_benchmarks.py::test_dict_of_ints_core_json
-1%
1.4 ms
1.5 ms
test_many_models_core_model
tests/benchmarks/test_micro_benchmarks.py::test_many_models_core_model
-1%
2.4 ms
2.4 ms
test_isinstance_string_strict_false
tests/benchmarks/test_micro_benchmarks.py::test_isinstance_string_strict_false
-1%
14.8 µs
14.9 µs
test_uuid_from_uuid_pyd
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_uuid_from_uuid_pyd
-1%
14.4 µs
14.5 µs
test_core_raw
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateTime::test_core_raw
-1%
13.8 µs
13.8 µs
test_core_raw
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkUUID::test_core_raw
-1%
13.5 µs
13.6 µs
test_date_format
tests/benchmarks/test_serialization_micro.py::test_date_format
-1%
52.1 µs
52.5 µs
test_core_root_model
tests/benchmarks/test_micro_benchmarks.py::test_core_root_model
-1%
35.2 µs
35.4 µs
test_date_from_datetime_str
tests/benchmarks/test_micro_benchmarks.py::TestBenchmarkDateX::test_date_from_datetime_str
-1%
19 µs
19.1 µs
test_dataclass_serialization_python
tests/benchmarks/test_serialization_micro.py::test_dataclass_serialization_python
-1%
21.3 µs
21.5 µs
test_to_json_list_of_lists
tests/benchmarks/test_serialization_micro.py::test_to_json_list_of_lists
-1%
1.7 ms
1.7 ms

Commits

Click on a commit to change the comparison range
Base
main
061711f
+1%
wip: simplify unions
f037904
15 days ago
by davidhewitt
0%
Merge branch 'main' into dh/wip-union-simplification
0ceac1b
15 days ago
by sydney-runkle
0%
remove middleman functions
a5fbc2a
15 days ago
by sydney-runkle
0%
add support for the raised ser unexpected err
742a3e9
15 days ago
by sydney-runkle
0%
fix tests
92f5bbc
15 days ago
by sydney-runkle
0%
cleaner error handling
57c3c6f
15 days ago
by sydney-runkle
0%
figure out issue with borrowed serializer
f3a304a
14 days ago
by sydney-runkle
-1%
continue refactor
ee9dd3d
13 days ago
by sydney-runkle
Home Terms PrivacyDocs