6060# ------------------------------------------------------------------------------
6161
6262# Custom writeObject parsing classes
63-
64- def assign_dict (fields , values ):
65- ret = dict ()
66- for i , v in enumerate (fields ):
67- ret [v ] = values [i ]
68- return ret
69-
7063class CustomWriterInstance (javaobj .beans .JavaInstance ):
7164 def __init__ (self ):
7265 javaobj .beans .JavaInstance .__init__ (self )
@@ -84,7 +77,7 @@ def load_from_instance(self):
8477 '>i' , BytesIO (raw_data [0 ].data ).read (4 ))[0 ]
8578 custom_obj = raw_data [1 ]
8679 values = [int_not_in_fields , custom_obj ]
87- self .field_data = assign_dict ( fields , values )
80+ self .field_data = dict ( zip ( fields , values ) )
8881 return True
8982
9083 return False
@@ -100,15 +93,16 @@ def load_from_instance(self):
10093 if self .classdesc and self .classdesc in self .field_data :
10194 fields = self .classdesc .fields_names
10295 values = self .field_data [self .classdesc ].values ()
103- self .field_data = assign_dict ( fields , list ( values ))
96+ self .field_data = dict ( zip ( fields , values ))
10497 if self .classdesc .super_class and self .classdesc .super_class in self .annotations :
10598 super_class = self .annotations [self .classdesc .super_class ][0 ]
106- self .annotations = assign_dict ( super_class .fields_names , super_class .field_data )
99+ self .annotations = dict ( zip ( super_class .fields_names , super_class .field_data ) )
107100 return True
108101
109102 return False
110103
111104
105+ __metaclass__ = type
112106class BaseTransformer (javaobj .transformers .ObjectTransformer ):
113107 """
114108 Creates a JavaInstance object with custom loading methods for the
@@ -147,19 +141,20 @@ class JavaRandomTransformer(BaseTransformer):
147141 def __init__ (self ):
148142 super (JavaRandomTransformer , self ).__init__ ()
149143 self .name = "java.util.Random"
150- self .fields = {
151- 'haveNextNextGaussian' : javaobj .beans .FieldType .BOOLEAN ,
152- 'nextNextGaussian' : javaobj .beans .FieldType .DOUBLE ,
153- 'seed' : javaobj .beans .FieldType .LONG
154- }
144+ self .field_names = ['haveNextNextGaussian' , 'nextNextGaussian' , 'seed' ]
145+ self .field_types = [
146+ javaobj .beans .FieldType .BOOLEAN ,
147+ javaobj .beans .FieldType .DOUBLE ,
148+ javaobj .beans .FieldType .LONG
149+ ]
155150
156151 def load_custom_writeObject (self , parser , reader , name ):
157152 if name == self .name :
158153 fields = []
159154 values = []
160- for field_name , field_type in self .fields . items ( ):
161- values .append (parser ._read_field_value (field_type ))
162- fields .append (javaobj .beans .JavaField (field_type , field_name ))
155+ for index , value in enumerate ( self .field_types ):
156+ values .append (parser ._read_field_value (value ))
157+ fields .append (javaobj .beans .JavaField (value , self . field_names [ index ] ))
163158
164159 class_desc = javaobj .beans .JavaClassDesc (
165160 javaobj .beans .ClassDescType .NORMALCLASS )
@@ -575,18 +570,9 @@ def test_writeObject(self):
575570 }
576571 }
577572
578- self .assertEqual (expected ['int_not_in_fields' ],
579- parent_data ['int_not_in_fields' ])
580- self .assertEqual (expected ['custom_obj' ]
581- ['field_data' ]['doub' ], child_data ['doub' ])
582- self .assertEqual (expected ['custom_obj' ]
583- ['field_data' ]['num' ], child_data ['num' ])
584- self .assertEqual (expected ['custom_obj' ]['annotations' ]
585- ['haveNextNextGaussian' ], super_data ['haveNextNextGaussian' ])
586- self .assertEqual (expected ['custom_obj' ]['annotations' ]
587- ['nextNextGaussian' ], super_data ['nextNextGaussian' ])
588- self .assertEqual (expected ['custom_obj' ]
589- ['annotations' ]['seed' ], super_data ['seed' ])
573+ self .assertEqual (expected ['int_not_in_fields' ], parent_data ['int_not_in_fields' ])
574+ self .assertEqual (expected ['custom_obj' ]['field_data' ], child_data )
575+ self .assertEqual (expected ['custom_obj' ]['annotations' ], super_data )
590576
591577# ------------------------------------------------------------------------------
592578
0 commit comments