@@ -184,15 +184,20 @@ def loads(string, *transformers, ignore_remaining_data=False):
184184 ignore_remaining_data = ignore_remaining_data )
185185
186186
187- def dumps (obj ):
187+ def dumps (obj , * transformers ):
188188 """
189189 Serializes Java primitive data and objects unmarshaled by load(s) before
190190 into string.
191191
192192 :param obj: A Python primitive object, or one loaded using load(s)
193+ :param transformers: Custom transformers to use
193194 :return: The serialized data as a string
194195 """
195196 marshaller = JavaObjectMarshaller ()
197+ # Add custom transformers
198+ for transformer in transformers :
199+ marshaller .add_transformer (transformer )
200+
196201 return marshaller .dump (obj )
197202
198203# ------------------------------------------------------------------------------
@@ -949,6 +954,15 @@ def __init__(self, stream=None):
949954 """
950955 self .object_stream = stream
951956 self .object_obj = None
957+ self .object_transformers = []
958+
959+ def add_transformer (self , transformer ):
960+ """
961+ Appends an object transformer to the serialization process
962+
963+ :param transformer: An object with a transform(obj) method
964+ """
965+ self .object_transformers .append (transformer )
952966
953967 def dump (self , obj ):
954968 """
@@ -1028,6 +1042,13 @@ def write_object(self, obj, parent=None):
10281042 :param obj: Not yet used
10291043 :param parent: Not yet used
10301044 """
1045+ # Transform object
1046+ for transformer in self .object_transformers :
1047+ tmp_object = transformer .transform (obj )
1048+ if tmp_object is not obj :
1049+ obj = tmp_object
1050+ break
1051+
10311052 self ._writeStruct (">B" , 1 , (self .TC_OBJECT ,))
10321053 self ._writeStruct (">B" , 1 , (self .TC_CLASSDESC ,))
10331054
0 commit comments