@@ -106,7 +106,7 @@ def _parse_message_elements(elements, definition):
106
106
definition ['fields' ] = fields
107
107
definition ['groups' ] = groups
108
108
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 ):
110
110
field_original_name = field_definition ['name' ]
111
111
field_name = convert_to_underscore (field_original_name )
112
112
field_id = field_definition ['id' ]
@@ -124,7 +124,7 @@ def _build_message_field(self, field_definition, offset, header_size=10, endian=
124
124
if field_definition .get ('offset' , None ) is not None :
125
125
field_offset = int (field_definition .get ('offset' , None ))
126
126
if add_header_size :
127
- field_offset += header_size
127
+ field_offset += message_type . header_size
128
128
129
129
primitive_type_fmt , primitive_type_size = self .primitive_type_map [field_type ['primitive_type' ]]
130
130
@@ -173,7 +173,7 @@ def _build_message_field(self, field_definition, offset, header_size=10, endian=
173
173
if field_definition .get ('offset' , None ) is not None :
174
174
field_offset = int (field_definition .get ('offset' , None ))
175
175
if add_header_size :
176
- field_offset += header_size
176
+ field_offset += message_type . header_size
177
177
178
178
unpack_fmt = endian
179
179
field_length = field_type .get ('length' , None )
@@ -206,7 +206,7 @@ def _build_message_field(self, field_definition, offset, header_size=10, endian=
206
206
if field_definition .get ('offset' , None ) is not None :
207
207
field_offset = int (field_definition .get ('offset' , None ))
208
208
if add_header_size :
209
- field_offset += header_size
209
+ field_offset += message_type . header_size
210
210
211
211
unpack_fmt = endian
212
212
field_length = field_type .get ('length' , None )
@@ -231,7 +231,7 @@ def _build_message_field(self, field_definition, offset, header_size=10, endian=
231
231
if field_definition .get ('offset' , None ) is not None :
232
232
field_offset = int (field_definition .get ('offset' , None ))
233
233
if add_header_size :
234
- field_offset += header_size
234
+ field_offset += message_type . header_size
235
235
236
236
float_composite = False
237
237
field_length = 0
@@ -345,12 +345,10 @@ def _construct_header(self, message):
345
345
setattr (message_type , 'header_size' , field_offset )
346
346
return field_offset
347
347
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 ):
349
349
# Now run through the remaining types and update the fields
350
350
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 )
354
352
field_offset += field .field_length
355
353
entity_type .fields .append (field )
356
354
# make it an attribute too
@@ -402,7 +400,7 @@ def _add_groups(self, entity, entity_type, endian):
402
400
dimension_size = block_field_offset ,
403
401
since_version = group_since_version )
404
402
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 )
406
404
407
405
repeating_groups .append (repeating_group )
408
406
setattr (entity_type , repeating_group .name , repeating_group )
@@ -415,8 +413,7 @@ def _add_groups(self, entity, entity_type, endian):
415
413
def _construct_body (self , message , field_offset , endian ):
416
414
message_id = int (message ['id' ])
417
415
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 )
420
417
self ._add_groups (message , message_type , endian )
421
418
422
419
def parse (self , xml_file , message_tag = "message" , types_tag = "types" , endian = '<' ):
0 commit comments