1+ import dataclasses
12import json
2- from dataclasses import dataclass
33from datetime import date , datetime , time , timedelta , timezone
44from decimal import Decimal
55from enum import Enum
6+ from typing import ClassVar
67
78import pytest
89from dirty_equals import IsList
@@ -22,10 +23,12 @@ def test_repr(any_serializer):
2223 assert plain_repr (any_serializer ) == 'SchemaSerializer(serializer=Any(AnySerializer),slots=[])'
2324
2425
25- @dataclass (frozen = True )
26+ @dataclasses . dataclass (frozen = True )
2627class MyDataclass :
28+ class_var : ClassVar [int ] = 1
2729 a : int
2830 b : str
31+ frog : dataclasses .InitVar [int ]
2932
3033
3134class MyModel :
@@ -46,7 +49,7 @@ def test_any_json_round_trip(any_serializer, value):
4649@pytest .mark .parametrize (
4750 'input_value,expected_plain,expected_json_obj' ,
4851 [
49- (MyDataclass (1 , 'foo' ), {'a' : 1 , 'b' : 'foo' }, {'a' : 1 , 'b' : 'foo' }),
52+ (MyDataclass (1 , 'foo' , 3 ), {'a' : 1 , 'b' : 'foo' }, {'a' : 1 , 'b' : 'foo' }),
5053 (MyModel (a = 1 , b = 'foo' ), {'a' : 1 , 'b' : 'foo' }, {'a' : 1 , 'b' : 'foo' }),
5154 ({1 , 2 , 3 }, {1 , 2 , 3 }, IsList (1 , 2 , 3 , check_order = False )),
5255 ({1 , '2' , b'3' }, {1 , '2' , b'3' }, IsList (1 , '2' , '3' , check_order = False )),
@@ -59,7 +62,7 @@ def test_any_python(any_serializer, input_value, expected_plain, expected_json_o
5962
6063
6164def test_set_member_db (any_serializer ):
62- input_value = {MyDataclass (1 , 'a' ), MyDataclass (2 , 'b' )}
65+ input_value = {MyDataclass (1 , 'a' , 2 ), MyDataclass (2 , 'b' , 2 )}
6366 expected_json_obj = IsList ({'a' : 1 , 'b' : 'a' }, {'a' : 2 , 'b' : 'b' }, check_order = False )
6467 assert any_serializer .to_python (input_value , mode = 'json' ) == expected_json_obj
6568 assert json .loads (any_serializer .to_json (input_value )) == expected_json_obj
@@ -84,9 +87,9 @@ def test_set_member_db(any_serializer):
8487 (date (2022 , 12 , 3 ), b'"2022-12-03"' ),
8588 (time (12 , 30 , 45 ), b'"12:30:45"' ),
8689 (timedelta (hours = 2 ), b'"PT7200S"' ),
87- (MyDataclass (1 , 'foo' ), b'{"a":1,"b":"foo"}' ),
90+ (MyDataclass (1 , 'foo' , 2 ), b'{"a":1,"b":"foo"}' ),
8891 (MyModel (a = 1 , b = 'foo' ), b'{"a":1,"b":"foo"}' ),
89- ([MyDataclass (1 , 'a' ), MyModel (a = 2 , b = 'b' )], b'[{"a":1,"b":"a"},{"a":2,"b":"b"}]' ),
92+ ([MyDataclass (1 , 'a' , 2 ), MyModel (a = 2 , b = 'b' )], b'[{"a":1,"b":"a"},{"a":2,"b":"b"}]' ),
9093 ],
9194)
9295def test_any_json (any_serializer , value , expected_json ):
@@ -205,22 +208,22 @@ def test_include_generator(any_serializer):
205208
206209def test_include_dict (any_serializer ):
207210 assert any_serializer .to_python ({1 : 2 , '3' : 4 }) == {1 : 2 , '3' : 4 }
208- assert any_serializer .to_python (MyDataclass (a = 1 , b = 'foo' )) == {'a' : 1 , 'b' : 'foo' }
211+ assert any_serializer .to_python (MyDataclass (a = 1 , b = 'foo' , frog = 2 )) == {'a' : 1 , 'b' : 'foo' }
209212 assert any_serializer .to_python ({1 : 2 , '3' : 4 }, mode = 'json' ) == {'1' : 2 , '3' : 4 }
210213 assert any_serializer .to_json ({1 : 2 , '3' : 4 }) == b'{"1":2,"3":4}'
211- assert any_serializer .to_json (MyDataclass (a = 1 , b = 'foo' )) == b'{"a":1,"b":"foo"}'
214+ assert any_serializer .to_json (MyDataclass (a = 1 , b = 'foo' , frog = 2 )) == b'{"a":1,"b":"foo"}'
212215
213216 assert any_serializer .to_python ({1 : 2 , '3' : 4 }, include = {1 }) == {1 : 2 }
214217 assert any_serializer .to_python ({1 : 2 , '3' : 4 }, include = {'3' }) == {'3' : 4 }
215- assert any_serializer .to_python (MyDataclass (a = 1 , b = 'foo' ), include = {'a' }) == {'a' : 1 }
216- assert any_serializer .to_python (MyDataclass (a = 1 , b = 'foo' ), include = {'a' }, mode = 'json' ) == {'a' : 1 }
218+ assert any_serializer .to_python (MyDataclass (a = 1 , b = 'foo' , frog = 2 ), include = {'a' }) == {'a' : 1 }
219+ assert any_serializer .to_python (MyDataclass (a = 1 , b = 'foo' , frog = 2 ), include = {'a' }, mode = 'json' ) == {'a' : 1 }
217220 assert any_serializer .to_python (MyModel (a = 1 , b = 'foo' ), include = {'a' }) == {'a' : 1 }
218221 assert any_serializer .to_python (MyModel (a = 1 , b = 'foo' ), include = {'a' }, mode = 'json' ) == {'a' : 1 }
219222 assert any_serializer .to_python ({1 : 2 , '3' : 4 }, include = {1 }, mode = 'json' ) == {'1' : 2 }
220223 assert any_serializer .to_python ({1 : 2 , '3' : 4 }, include = {'3' }, mode = 'json' ) == {'3' : 4 }
221224 assert any_serializer .to_json ({1 : 2 , '3' : 4 }, include = {1 }) == b'{"1":2}'
222225 assert any_serializer .to_json ({1 : 2 , '3' : 4 }, include = {'3' }) == b'{"3":4}'
223- assert any_serializer .to_json (MyDataclass (a = 1 , b = 'foo' ), include = {'a' }) == b'{"a":1}'
226+ assert any_serializer .to_json (MyDataclass (a = 1 , b = 'foo' , frog = 2 ), include = {'a' }) == b'{"a":1}'
224227
225228
226229class FieldsSetModel :
@@ -326,7 +329,7 @@ def test_base64():
326329 (lambda : Decimal ('12.34' ), {}, b'"12.34"' ),
327330 (lambda : MyEnum .a , {}, b'1' ),
328331 (lambda : MyEnum .b , {}, b'"b"' ),
329- (lambda : [MyDataclass (1 , 'a' ), MyModel (a = 2 , b = 'b' )], {}, b'[{"a":1,"b":"a"},{"a":2,"b":"b"}]' ),
332+ (lambda : [MyDataclass (1 , 'a' , 2 ), MyModel (a = 2 , b = 'b' )], {}, b'[{"a":1,"b":"a"},{"a":2,"b":"b"}]' ),
330333 # # (lambda: re.compile('^regex$'), b'"^regex$"'),
331334 ],
332335)
0 commit comments