From 0d6a748f71857ed28367722df55c3444c50dc13d Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Mon, 21 Aug 2017 11:05:49 +0200 Subject: [PATCH 1/2] add test file for files without application id inside developer data as seen on ELEMNT BOLT (firmware version WB09-1507) --- ...o-application-id-inside-developer-data-id.fit | Bin 0 -> 5094 bytes tests/test.py | 5 +++++ 2 files changed, 5 insertions(+) create mode 100644 tests/files/elemnt-bolt-no-application-id-inside-developer-data-id.fit diff --git a/tests/files/elemnt-bolt-no-application-id-inside-developer-data-id.fit b/tests/files/elemnt-bolt-no-application-id-inside-developer-data-id.fit new file mode 100644 index 0000000000000000000000000000000000000000..810004b3d91e48602c3518a6c0e198eb6140497c GIT binary patch literal 5094 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 literal 0 HcmV?d00001 diff --git a/tests/test.py b/tests/test.py index 45c41f2..8d36db7 100755 --- a/tests/test.py +++ b/tests/test.py @@ -409,6 +409,11 @@ def test_fileish_types(self): with FitFile(io.BytesIO(open(testfile("Settings.fit"), 'rb').read())): pass + def test_elemnt_bolt_developer_data_id_without_application_id(self): + """Test that a file without application id set inside developer_data_id is parsed + (as seen on ELEMNT BOLT with firmware version WB09-1507)""" + FitFile(testfile('elemnt-bolt-no-application-id-inside-developer-data-id.fit')).parse() + # TODO: # * Test Processors: # - process_type_<>, process_field_<>, process_units_<>, process_message_<> From bb54ac80e54f47f9535136846634612dd3ab1181 Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Tue, 15 Aug 2017 12:03:17 +0200 Subject: [PATCH 2/2] records: add_dev_data_id: allow developer_data_id messages without set application_id It seems like the ELEMNT bolt writes messages without application_id set. In that case, store None there. fixes #35. --- fitparse/records.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fitparse/records.py b/fitparse/records.py index b6603f5..9924e68 100644 --- a/fitparse/records.py +++ b/fitparse/records.py @@ -363,7 +363,10 @@ def parse_string(string): def add_dev_data_id(message): global DEV_TYPES dev_data_index = message.get('developer_data_index').raw_value - application_id = message.get('application_id').raw_value + if message.get('application_id'): + application_id = message.get('application_id').raw_value + else: + application_id = None # Note that nothing in the spec says overwriting an existing type is invalid DEV_TYPES[dev_data_index] = {'dev_data_index': dev_data_index, 'application_id': application_id, 'fields': {}}