1515 deserialize_pickle_message ,
1616)
1717
18+ class NonDataclass :
19+ def __init__ (self , value ):
20+ self .value = value
21+
1822@dataclass
1923class Object :
2024 value : str
@@ -33,6 +37,9 @@ class FullMessge:
3337 uid : uuid .UUID
3438 data : bytes
3539 items : list # Changed from df to a simple list
40+ list_obj : list [Object ] = None
41+ dict_obj : dict [str , Object ] = None
42+ optional_obj : Optional [Object ] = None
3643
3744@dataclass
3845class MyObject :
@@ -47,8 +54,6 @@ class Msg:
4754 my_obj : MyObject
4855
4956def test_message_serialization ():
50-
51-
5257 msg = Msg (text = "hello" , number = 42 , my_obj = None )
5358
5459 my_obj = MyObject (value = "test" , foo = None )
@@ -71,6 +76,46 @@ def test_message_serialization():
7176 assert result .number == msg .number
7277 assert result .my_obj == my_obj
7378
79+ def test_unexpexted_obj_serialization ():
80+ # Create an invalid message
81+ msg = Msg (text = "hello" , number = 42 , my_obj = None )
82+ msg .my_obj = NonDataclass (value = "test" )
83+
84+ # Test serialization
85+ serial = serialize_message (msg )
86+ assert type (serial ).__module__ .startswith ('iris' ) and serial ._IsA ("IOP.Message" )
87+ assert serial .classname == f"{ Msg .__module__ } .{ Msg .__name__ } "
88+
89+ # Test deserialization
90+ result = deserialize_message (serial )
91+ assert isinstance (result , Msg )
92+ assert result .text == msg .text
93+ assert result .number == msg .number
94+ assert result .my_obj .value == msg .my_obj .value
95+
96+
97+ def test_unexpected_fields ():
98+ # Create a message with unexpected fields
99+ msg = Msg (text = "hello" , number = 42 , my_obj = None )
100+ msg .unexpected_field = "unexpected"
101+
102+ my_obj = MyObject (value = "test" , foo = None )
103+ my_obj .unexpected_field = "unexpected"
104+ msg .my_obj = my_obj
105+
106+ # Test serialization
107+ serial = serialize_message (msg )
108+ assert type (serial ).__module__ .startswith ('iris' ) and serial ._IsA ("IOP.Message" )
109+ assert serial .classname == f"{ Msg .__module__ } .{ Msg .__name__ } "
110+
111+ # Test deserialization
112+ result = deserialize_message (serial )
113+ assert isinstance (result , Msg )
114+ assert result .text == msg .text
115+ assert result .number == msg .number
116+ assert result .unexpected_field == msg .unexpected_field
117+ assert result .my_obj == my_obj
118+
74119
75120def test_json_serialization ():
76121 # Create test data
@@ -127,7 +172,10 @@ def test_pickle_serialization():
127172 dec = decimal .Decimal ("3.14" ),
128173 uid = uuid .uuid4 (),
129174 data = b'hello world' ,
130- items = [{'col1' : 1 , 'col2' : 'a' }, {'col1' : 2 , 'col2' : 'b' }]
175+ items = [{'col1' : 1 , 'col2' : 'a' }, {'col1' : 2 , 'col2' : 'b' }],
176+ list_obj = [Object (value = "item1" ), Object (value = "item2" )],
177+ dict_obj = {'key1' : Object (value = "item1" ), 'key2' : Object (value = "item2" )},
178+ optional_obj = Object (value = "optional" )
131179 )
132180
133181 # Test serialization
@@ -150,6 +198,9 @@ def test_pickle_serialization():
150198 assert result .uid == msg .uid
151199 assert result .data == msg .data
152200 assert result .items == msg .items
201+ assert result .list_obj == msg .list_obj
202+ assert result .dict_obj == msg .dict_obj
203+ assert result .optional_obj == msg .optional_obj
153204
154205def test_invalid_message_deserialization ():
155206 # Create an invalid message without classname
0 commit comments