1111 DataMessage , FieldData , FieldDefinition , DefinitionMessage , MessageHeader ,
1212 BASE_TYPES , BASE_TYPE_BYTE
1313)
14- from fitparse .utils import calc_crc
14+ from fitparse .utils import calc_crc , scrub_method_name
1515
1616
1717class FitParseError (Exception ):
1818 pass
1919
2020
2121class FitFile (object ):
22- # TODO: unit test to make sure that all units in profile.py convert to
23- # sane function names after applying replacements (and there are no
24- # no regressions)
25- UNIT_NAME_TO_FUNC_REPLACEMENTS = (
26- ('/' , 'per' ),
27- ('%' , 'percent' ),
28- )
29-
3022 def __init__ (self , fileish , check_crc = True , data_processor = None ):
3123 if hasattr (fileish , 'read' ):
3224 self ._file = fileish
@@ -287,9 +279,10 @@ def _parse_data_message(self, header):
287279 # Resolve component fields
288280 if field .components :
289281 for component in field .components :
290- # Render it's raw value
282+ # Render its raw value
291283 cmp_raw_value = component .render (raw_value )
292284
285+ # Apply accumulated value
293286 if component .accumulate :
294287 accumulator = self ._accumulators [def_mesg .mesg_num ]
295288 cmp_raw_value = self ._apply_compressed_accumulation (
@@ -303,6 +296,7 @@ def _parse_data_message(self, header):
303296
304297 # Extract the component's dynamic field from def_mesg
305298 cmp_field = def_mesg .mesg_type .fields [component .def_num ]
299+
306300 # Resolve a possible subfield
307301 cmp_field , cmp_parent_field = self ._resolve_subfield (cmp_field , def_mesg , raw_values )
308302 cmp_value = cmp_field .render (cmp_raw_value )
@@ -356,32 +350,28 @@ def _parse_data_message(self, header):
356350 # Apply data processors
357351 for field_data in field_datas :
358352 # Apply type name processor
359- type_processor = getattr (self ._processor , 'process_type_%s' % field_data .type .name , None )
353+ process_method_name = scrub_method_name ('process_type_%s' % field_data .type .name )
354+ type_processor = getattr (self ._processor , process_method_name , None )
360355 if type_processor :
361356 type_processor (field_data )
362357
363358 # Apply field name processor
364- field_processor = getattr (self ._processor , 'process_field_%s' % field_data .name , None )
359+ process_method_name = scrub_method_name ('process_field_%s' % field_data .name )
360+ field_processor = getattr (self ._processor , process_method_name , None )
365361 if field_processor :
366362 field_processor (field_data )
367363
368364 # Apply units name processor
369365 if field_data .units :
370- process_func_name = 'process_units_%s' % field_data .units
371- # Do unit name replacements padded with spaces
372- for replace_from , replace_to in self .UNIT_NAME_TO_FUNC_REPLACEMENTS :
373- process_func_name = process_func_name .replace (
374- replace_from , ' %s ' % replace_to ,
375- )
376- # Then strip and convert spaces to underscores
377- process_func_name = process_func_name .strip ().replace (' ' , '_' )
378- units_processor = getattr (self ._processor , process_func_name , None )
366+ process_method_name = scrub_method_name ('process_units_%s' % field_data .units , convert_units = True )
367+ units_processor = getattr (self ._processor , process_method_name , None )
379368 if units_processor :
380369 units_processor (field_data )
381370
382371 data_message = DataMessage (header = header , def_mesg = def_mesg , fields = field_datas )
383372
384- mesg_processor = getattr (self ._processor , 'process_message_%s' % def_mesg .name , None )
373+ process_method_name = scrub_method_name ('process_message_%s' % def_mesg .name )
374+ mesg_processor = getattr (self ._processor , process_method_name , None )
385375 if mesg_processor :
386376 mesg_processor (data_message )
387377
0 commit comments