Skip to content

Commit f84af8f

Browse files
robertnishiharapcmoritz
authored andcommitted
ARROW-2065: [Python] Fix bug in SerializationContext.clone().
One issue is that I don't think the test fails on the current master. Author: Robert Nishihara <[email protected]> Closes #1539 from robertnishihara/fixclonebug and squashes the following commits: 61534b8 [Robert Nishihara] Fix test. 35a559a [Robert Nishihara] Fix bug in which SerializationContext.clone() doesn't copy a field.
1 parent c1d77a1 commit f84af8f

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

python/pyarrow/serialization.pxi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ cdef class SerializationContext:
8989
result = SerializationContext()
9090
result.type_to_type_id = self.type_to_type_id.copy()
9191
result.whitelisted_types = self.whitelisted_types.copy()
92+
result.types_to_pickle = self.types_to_pickle.copy()
9293
result.custom_serializers = self.custom_serializers.copy()
9394
result.custom_deserializers = self.custom_deserializers.copy()
9495
result.pickle_serializer = self.pickle_serializer

python/pyarrow/tests/test_serialization.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,33 @@ def large_memory_map(tmpdir_factory, size=100*1024*1024):
248248
return path
249249

250250

251+
def test_clone():
252+
context = pa.SerializationContext()
253+
254+
class Foo(object):
255+
pass
256+
257+
def custom_serializer(obj):
258+
return 0
259+
260+
def custom_deserializer(serialized_obj):
261+
return (serialized_obj, 'a')
262+
263+
context.register_type(Foo, 'Foo', custom_serializer=custom_serializer,
264+
custom_deserializer=custom_deserializer)
265+
266+
new_context = context.clone()
267+
268+
f = Foo()
269+
serialized = pa.serialize(f, context=context)
270+
deserialized = serialized.deserialize(context=context)
271+
assert deserialized == (0, 'a')
272+
273+
serialized = pa.serialize(f, context=new_context)
274+
deserialized = serialized.deserialize(context=new_context)
275+
assert deserialized == (0, 'a')
276+
277+
251278
def test_primitive_serialization(large_buffer):
252279
for obj in PRIMITIVE_OBJECTS:
253280
serialization_roundtrip(obj, large_buffer)

0 commit comments

Comments
 (0)