@@ -106,7 +106,7 @@ def _parse_message_elements(elements, definition):
106106 definition ['fields' ] = fields
107107 definition ['groups' ] = groups
108108
109- def _build_message_field (self , field_definition , offset , header_size = 10 , endian = '<' , add_header_size = True ):
109+ def _build_message_field (self , message_type , field_definition , offset , endian = '<' , add_header_size = True ):
110110 field_original_name = field_definition ['name' ]
111111 field_name = convert_to_underscore (field_original_name )
112112 field_id = field_definition ['id' ]
@@ -124,7 +124,7 @@ def _build_message_field(self, field_definition, offset, header_size=10, endian=
124124 if field_definition .get ('offset' , None ) is not None :
125125 field_offset = int (field_definition .get ('offset' , None ))
126126 if add_header_size :
127- field_offset += header_size
127+ field_offset += message_type . header_size
128128
129129 primitive_type_fmt , primitive_type_size = self .primitive_type_map [field_type ['primitive_type' ]]
130130
@@ -173,7 +173,7 @@ def _build_message_field(self, field_definition, offset, header_size=10, endian=
173173 if field_definition .get ('offset' , None ) is not None :
174174 field_offset = int (field_definition .get ('offset' , None ))
175175 if add_header_size :
176- field_offset += header_size
176+ field_offset += message_type . header_size
177177
178178 unpack_fmt = endian
179179 field_length = field_type .get ('length' , None )
@@ -206,7 +206,7 @@ def _build_message_field(self, field_definition, offset, header_size=10, endian=
206206 if field_definition .get ('offset' , None ) is not None :
207207 field_offset = int (field_definition .get ('offset' , None ))
208208 if add_header_size :
209- field_offset += header_size
209+ field_offset += message_type . header_size
210210
211211 unpack_fmt = endian
212212 field_length = field_type .get ('length' , None )
@@ -231,7 +231,7 @@ def _build_message_field(self, field_definition, offset, header_size=10, endian=
231231 if field_definition .get ('offset' , None ) is not None :
232232 field_offset = int (field_definition .get ('offset' , None ))
233233 if add_header_size :
234- field_offset += header_size
234+ field_offset += message_type . header_size
235235
236236 float_composite = False
237237 field_length = 0
@@ -345,12 +345,10 @@ def _construct_header(self, message):
345345 setattr (message_type , 'header_size' , field_offset )
346346 return field_offset
347347
348- def _add_fields (self , field_offset , entity , entity_type , endian , add_header_size = True , header_size = 10 ):
348+ def _add_fields (self , message_type , field_offset , entity , entity_type , endian , add_header_size = True ):
349349 # Now run through the remaining types and update the fields
350350 for field_type in entity .get ('fields' , []):
351- field_type ['offset' ] = None
352- field = self ._build_message_field (field_type , field_offset , header_size = header_size , endian = endian ,
353- add_header_size = add_header_size )
351+ field = self ._build_message_field (message_type , field_type , field_offset , endian = endian , add_header_size = add_header_size )
354352 field_offset += field .field_length
355353 entity_type .fields .append (field )
356354 # make it an attribute too
@@ -402,7 +400,7 @@ def _add_groups(self, entity, entity_type, endian):
402400 dimension_size = block_field_offset ,
403401 since_version = group_since_version )
404402
405- self ._add_fields (group_field_offset , group_type , repeating_group , endian , add_header_size = False )
403+ self ._add_fields (entity , group_field_offset , group_type , repeating_group , endian , add_header_size = False )
406404
407405 repeating_groups .append (repeating_group )
408406 setattr (entity_type , repeating_group .name , repeating_group )
@@ -415,8 +413,7 @@ def _add_groups(self, entity, entity_type, endian):
415413 def _construct_body (self , message , field_offset , endian ):
416414 message_id = int (message ['id' ])
417415 message_type = self .get_message_type (message_id )
418- self ._add_fields (field_offset , message , message_type , endian , add_header_size = True ,
419- header_size = message_type .header_size )
416+ self ._add_fields (message_type , field_offset , message , message_type , endian , add_header_size = True )
420417 self ._add_groups (message , message_type , endian )
421418
422419 def parse (self , xml_file , message_tag = "message" , types_tag = "types" , endian = '<' ):
0 commit comments