diff --git a/README.md b/README.md index 47bebfc..a35a994 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ encode policies): [`docs/CAPABILITY_BOUNDARY.md`](docs/CAPABILITY_BOUNDARY.md). Long-term strict-conformance **roadmap** (target architecture, not current guarantees): [`docs/FIT_CONFORMANCE_DESIGN.md`](docs/FIT_CONFORMANCE_DESIGN.md). -Profile in use: `21.205.0` (`fit_tool.SDK_VERSION`). +Profile in use: `21.212.0` (`fit_tool.SDK_VERSION`). ## Installation diff --git a/docs/CAPABILITY_BOUNDARY.md b/docs/CAPABILITY_BOUNDARY.md index e3d5886..5c9d7c8 100644 --- a/docs/CAPABILITY_BOUNDARY.md +++ b/docs/CAPABILITY_BOUNDARY.md @@ -7,7 +7,7 @@ strict-conformance **target** architecture remains [`FIT_CONFORMANCE_DESIGN.md`](FIT_CONFORMANCE_DESIGN.md) (not a guarantee of what the installed package already does). -Bundled Profile version: **`21.205.0`** (`fit_tool.SDK_VERSION` / `fit_tool/gen/`). +Bundled Profile version: **`21.212.0`** (`fit_tool.SDK_VERSION` / `fit_tool/gen/`). Protocol version string: **`2.4`** (`fit_tool.PROTOCOL_VERSION`). --- @@ -58,7 +58,7 @@ this package against the matrix above, not against full protocol conformance. | Level | What it checks | Status in code | | --- | --- | --- | | `ConformanceLevel.WIRE` | Local IDs, definition field layout/sizes, data records vs active definition | Implemented | -| `ConformanceLevel.PROFILE` | Scoped Profile semantics via `profile_scope=` / `ProfileScope` | **CORE (default):** developer-field declarations + **ambiguous native subfields** as ERROR. **DOMAIN (opt-in):** CORE + native base-type and closed-enum checks on high-frequency Activity/Workout messages. **FULL (opt-in):** same native rules for the gen-exported catalog from Profile.xlsx `21.205.0`. FULL is never default `strict` (§3.1 O1). Open/ranged enums (e.g. `activity_class`) are excluded from closed-enum checks | +| `ConformanceLevel.PROFILE` | Scoped Profile semantics via `profile_scope=` / `ProfileScope` | **CORE (default):** developer-field declarations + **ambiguous native subfields** as ERROR. **DOMAIN (opt-in):** CORE + native base-type and closed-enum checks on high-frequency Activity/Workout messages. **FULL (opt-in):** same native rules for the gen-exported catalog from Profile.xlsx `21.212.0`. FULL is never default `strict` (§3.1 O1). Open/ranged enums (e.g. `activity_class`) are excluded from closed-enum checks | | `ConformanceLevel.FILE_TYPE` | `file_id` first/unique + required fields; Activity, Workout, and Course rules | **`IMPLEMENTED_FILE_TYPES`** = Activity, Workout, Course; other `file_id.type` values **fail closed** | | `ConformanceLevel.PRESERVATION` | Post-edit rewrite loss (e.g. `UnknownField.raw_bytes` cleared) | **Opt-in** — not in `DEFAULT_LEVELS` / Builder `strict=True` | diff --git a/docs/EPIC_SHA12_RELEASE_NOTES.md b/docs/EPIC_SHA12_RELEASE_NOTES.md index c4168d9..9ab0343 100644 --- a/docs/EPIC_SHA12_RELEASE_NOTES.md +++ b/docs/EPIC_SHA12_RELEASE_NOTES.md @@ -15,7 +15,7 @@ subfields, unknown fields, post-edit PRESERVATION, encode policies, PROFILE scopes CORE/DOMAIN/FULL, Workout + Course FILE_TYPE). Stage 5 (**L**) publishes honest Supported/Partial/Not-supported claims. -Profile / SDK version: **`21.205.0`** (`SDK_VERSION`, `fit_tool/gen/`). +Profile / SDK version: **`21.212.0`** (`SDK_VERSION`, `fit_tool/gen/`). ## User-visible capabilities (rollup) diff --git a/docs/FIT_CONFORMANCE_DESIGN.md b/docs/FIT_CONFORMANCE_DESIGN.md index 2fad4f7..ece2f30 100644 --- a/docs/FIT_CONFORMANCE_DESIGN.md +++ b/docs/FIT_CONFORMANCE_DESIGN.md @@ -49,7 +49,7 @@ public-claims pass that keeps this table and `docs/CAPABILITY_BOUNDARY.md` hones | Unknown field ids on known messages (decode retain + raw bytes) | Phase 3 | **E** SHA-17 | **Done** `UnknownField` + `raw_bytes` on main path | | Post-edit PRESERVATION (edited files, dirty records) | Phase 4 / PRESERVATION level | **F** SHA-18 | **Done** per-record dirty + mixed encode; opt-in PRESERVATION findings | | Encode policies (canonical vs preserve, strict vs repair) | Phase 4 §6 | **G** SHA-19 | **Done** `EncodeMode` + policy matrix; no silent invalid clamp; `repair()` still future | -| PROFILE scopes from bundled Profile.xlsx `21.205.0` | Phase 3 PROFILE / §3.1 | **H** SHA-20 | **Done** CORE/DOMAIN/FULL + gen `field_catalog`; default remains CORE; native required fields / units still residual | +| PROFILE scopes from bundled Profile.xlsx `21.212.0` | Phase 3 PROFILE / §3.1 | **H** SHA-20 | **Done** CORE/DOMAIN/FULL + gen `field_catalog`; default remains CORE; native required fields / units still residual | | Workout FILE_TYPE rules | Phase 4 §7 | **I** SHA-21 | **Done** required messages/fields; SDK Workout*.fit pass FILE_TYPE | | Course FILE_TYPE rules | Phase 4 §7 | **J** SHA-22 | **Done** Course required messages/fields; Activity + Workout unchanged | | Public capability matrix / release-note pass | Phase 5 | **L** SHA-23 | **This pass** — README + this section + §11 residual checklist + Towncrier epic notes | @@ -82,7 +82,7 @@ Passing one dimension must not be reported as passing all four. The conformance target is the Garmin FIT Protocol documentation and the exact `Profile.xlsx` version committed under `fit_tool/gen/`. The current repository -uses Profile `21.205.0`. +uses Profile `21.212.0`. Official references: @@ -791,7 +791,7 @@ Honest status vs the bullets above. **None** of these residuals re-open C–J as | Garmin cross-validation | **Incomplete** | SDK samples used as smokes/fixtures; not a release gate for full interop | | Non-`xfail` tests for listed constructs | **Partial** | Strong constructive coverage for C–J; expand goldens / remove any remaining known-gap xfails as follow-up | | Strict mode no silent repair | **Met** | `strict=True` / DEFAULT_LEVELS never clamp or auto-repair; no `repair()` on strict path | -| Published SDK/Profile version | **Met** | Profile / SDK `21.205.0` (`fit_tool/gen/`, `SDK_VERSION`) | +| Published SDK/Profile version | **Met** | Profile / SDK `21.212.0` (`fit_tool/gen/`, `SDK_VERSION`) | **Bottom line:** SHA-12 may move to `done` / `in_review` with the residuals above explicit. Do **not** flip public marketing to “full Garmin FIT diff --git a/fit_tool/__init__.py b/fit_tool/__init__.py index b28c0f1..412f448 100755 --- a/fit_tool/__init__.py +++ b/fit_tool/__init__.py @@ -13,7 +13,7 @@ # import ``from fit_tool import SDK_VERSION`` during package initialization # (e.g. fit_file_header) see a fully assigned name. PROTOCOL_VERSION = '2.4' -SDK_VERSION = '21.205.0' +SDK_VERSION = '21.212.0' FIT_DATA_TYPE = b'.FIT' from fit_tool.api import ( # noqa: E402 diff --git a/fit_tool/gen/Profile_21.205.0.xlsx b/fit_tool/gen/Profile_21.205.0.xlsx deleted file mode 100644 index d783a2e..0000000 Binary files a/fit_tool/gen/Profile_21.205.0.xlsx and /dev/null differ diff --git a/fit_tool/gen/Profile_21.212.0.xlsx b/fit_tool/gen/Profile_21.212.0.xlsx new file mode 100644 index 0000000..eb39061 Binary files /dev/null and b/fit_tool/gen/Profile_21.212.0.xlsx differ diff --git a/fit_tool/profile/component_registry.py b/fit_tool/profile/component_registry.py index 8917fec..2460f01 100644 --- a/fit_tool/profile/component_registry.py +++ b/fit_tool/profile/component_registry.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 # Main-field components only (subfield-gated components omitted — see Stage 2 D). """Profile component registry for decode-time expansion. diff --git a/fit_tool/profile/field_catalog.py b/fit_tool/profile/field_catalog.py index 89de9df..fa22d3e 100644 --- a/fit_tool/profile/field_catalog.py +++ b/fit_tool/profile/field_catalog.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 """Native field and closed-enum catalog for PROFILE validation. Generated from the bundled Garmin Profile spreadsheet by ``gen-profile``. @@ -16,9 +16,9 @@ from fit_tool.base_type import BaseType -PROFILE_SDK_VERSION = '21.205.0' +PROFILE_SDK_VERSION = '21.212.0' PROFILE_MESSAGE_COUNT = 123 -PROFILE_FIELD_COUNT = 1406 +PROFILE_FIELD_COUNT = 1407 PROFILE_ENUM_TYPE_COUNT = 100 # (global_message_number, field_id) → (name, BaseType, type_name, units, scale, offset) @@ -713,6 +713,7 @@ (55, 32): ('descent', BaseType.UINT32, 'uint32', 'm', 1000.0, 0.0), # monitoring (55, 33): ('moderate_activity_minutes', BaseType.UINT16, 'uint16', 'minutes', 1.0, 0.0), # monitoring (55, 34): ('vigorous_activity_minutes', BaseType.UINT16, 'uint16', 'minutes', 1.0, 0.0), # monitoring + (55, 41): ('pushes', BaseType.UINT32, 'uint32', '', 1.0, 0.0), # monitoring (55, 253): ('timestamp', BaseType.UINT32, 'date_time', 'ms', 0.001, -631065600000.0), # monitoring (72, 0): ('type', BaseType.ENUM, 'file', '', 1.0, 0.0), # training_file (72, 1): ('manufacturer', BaseType.UINT16, 'manufacturer', '', 1.0, 0.0), # training_file @@ -1438,7 +1439,7 @@ 'activity': frozenset({0, 1}), 'activity_level': frozenset({0, 1, 2}), 'activity_subtype': frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 254}), - 'activity_type': frozenset({0, 1, 2, 3, 4, 5, 6, 8, 254}), + 'activity_type': frozenset({0, 1, 2, 3, 4, 5, 6, 8, 13, 254}), 'analog_watchface_layout': frozenset({0, 1, 2}), 'ant_network': frozenset({0, 1, 2, 3}), 'attitude_stage': frozenset({0, 1, 2, 3}), diff --git a/fit_tool/profile/messages/aad_accel_features_message.py b/fit_tool/profile/messages/aad_accel_features_message.py index 1a8e1ac..56a9e8b 100644 --- a/fit_tool/profile/messages/aad_accel_features_message.py +++ b/fit_tool/profile/messages/aad_accel_features_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/accelerometer_data_message.py b/fit_tool/profile/messages/accelerometer_data_message.py index 55ebe5b..6d59021 100644 --- a/fit_tool/profile/messages/accelerometer_data_message.py +++ b/fit_tool/profile/messages/accelerometer_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -152,6 +152,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/activity_message.py b/fit_tool/profile/messages/activity_message.py index be80c5d..a249a4b 100644 --- a/fit_tool/profile/messages/activity_message.py +++ b/fit_tool/profile/messages/activity_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -124,6 +124,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/ant_channel_id_message.py b/fit_tool/profile/messages/ant_channel_id_message.py index 976829b..b6c3fa3 100644 --- a/fit_tool/profile/messages/ant_channel_id_message.py +++ b/fit_tool/profile/messages/ant_channel_id_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/ant_rx_message.py b/fit_tool/profile/messages/ant_rx_message.py index eb60a14..218d18f 100644 --- a/fit_tool/profile/messages/ant_rx_message.py +++ b/fit_tool/profile/messages/ant_rx_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/ant_tx_message.py b/fit_tool/profile/messages/ant_tx_message.py index c16c354..2283a0a 100644 --- a/fit_tool/profile/messages/ant_tx_message.py +++ b/fit_tool/profile/messages/ant_tx_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/aviation_attitude_message.py b/fit_tool/profile/messages/aviation_attitude_message.py index 4152ebd..61b50a1 100644 --- a/fit_tool/profile/messages/aviation_attitude_message.py +++ b/fit_tool/profile/messages/aviation_attitude_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -152,6 +152,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/barometer_data_message.py b/fit_tool/profile/messages/barometer_data_message.py index 80fa524..5af1d43 100644 --- a/fit_tool/profile/messages/barometer_data_message.py +++ b/fit_tool/profile/messages/barometer_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/beat_intervals_message.py b/fit_tool/profile/messages/beat_intervals_message.py index 9bf5ef2..048f65d 100644 --- a/fit_tool/profile/messages/beat_intervals_message.py +++ b/fit_tool/profile/messages/beat_intervals_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/bike_profile_message.py b/fit_tool/profile/messages/bike_profile_message.py index e9de88a..61c8468 100644 --- a/fit_tool/profile/messages/bike_profile_message.py +++ b/fit_tool/profile/messages/bike_profile_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -292,6 +292,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/blood_pressure_message.py b/fit_tool/profile/messages/blood_pressure_message.py index f468170..663f968 100644 --- a/fit_tool/profile/messages/blood_pressure_message.py +++ b/fit_tool/profile/messages/blood_pressure_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -145,6 +145,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/cadence_zone_message.py b/fit_tool/profile/messages/cadence_zone_message.py index c291722..77387a4 100644 --- a/fit_tool/profile/messages/cadence_zone_message.py +++ b/fit_tool/profile/messages/cadence_zone_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/camera_event_message.py b/fit_tool/profile/messages/camera_event_message.py index 8f67c32..6ffb06b 100644 --- a/fit_tool/profile/messages/camera_event_message.py +++ b/fit_tool/profile/messages/camera_event_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/capabilities_message.py b/fit_tool/profile/messages/capabilities_message.py index d7dd482..5494d0d 100644 --- a/fit_tool/profile/messages/capabilities_message.py +++ b/fit_tool/profile/messages/capabilities_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/chrono_shot_data_message.py b/fit_tool/profile/messages/chrono_shot_data_message.py index 2da0642..5deded0 100644 --- a/fit_tool/profile/messages/chrono_shot_data_message.py +++ b/fit_tool/profile/messages/chrono_shot_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/chrono_shot_session_message.py b/fit_tool/profile/messages/chrono_shot_session_message.py index f82ddad..a47cb13 100644 --- a/fit_tool/profile/messages/chrono_shot_session_message.py +++ b/fit_tool/profile/messages/chrono_shot_session_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -124,6 +124,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/climb_pro_message.py b/fit_tool/profile/messages/climb_pro_message.py index 4c85851..924b1fa 100644 --- a/fit_tool/profile/messages/climb_pro_message.py +++ b/fit_tool/profile/messages/climb_pro_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/common_fields.py b/fit_tool/profile/messages/common_fields.py index 41ee298..5dc8a41 100644 --- a/fit_tool/profile/messages/common_fields.py +++ b/fit_tool/profile/messages/common_fields.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from fit_tool.base_type import BaseType from fit_tool.field import Field diff --git a/fit_tool/profile/messages/connectivity_message.py b/fit_tool/profile/messages/connectivity_message.py index 5782dab..33ede56 100644 --- a/fit_tool/profile/messages/connectivity_message.py +++ b/fit_tool/profile/messages/connectivity_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -159,6 +159,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/course_message.py b/fit_tool/profile/messages/course_message.py index 44654b0..e03f9ee 100644 --- a/fit_tool/profile/messages/course_message.py +++ b/fit_tool/profile/messages/course_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/course_point_message.py b/fit_tool/profile/messages/course_point_message.py index e4db4ab..43770b3 100644 --- a/fit_tool/profile/messages/course_point_message.py +++ b/fit_tool/profile/messages/course_point_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -124,6 +124,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/developer_data_id_message.py b/fit_tool/profile/messages/developer_data_id_message.py index 56c78da..6ca54bb 100644 --- a/fit_tool/profile/messages/developer_data_id_message.py +++ b/fit_tool/profile/messages/developer_data_id_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/device_aux_battery_info_message.py b/fit_tool/profile/messages/device_aux_battery_info_message.py index c8ce840..0a6b792 100644 --- a/fit_tool/profile/messages/device_aux_battery_info_message.py +++ b/fit_tool/profile/messages/device_aux_battery_info_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/device_info_message.py b/fit_tool/profile/messages/device_info_message.py index d8a6bf1..4408548 100644 --- a/fit_tool/profile/messages/device_info_message.py +++ b/fit_tool/profile/messages/device_info_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -201,6 +201,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/device_settings_message.py b/fit_tool/profile/messages/device_settings_message.py index 581eb9b..e94fda5 100644 --- a/fit_tool/profile/messages/device_settings_message.py +++ b/fit_tool/profile/messages/device_settings_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -236,6 +236,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/dive_alarm_message.py b/fit_tool/profile/messages/dive_alarm_message.py index d7c69b4..832b6e5 100644 --- a/fit_tool/profile/messages/dive_alarm_message.py +++ b/fit_tool/profile/messages/dive_alarm_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -159,6 +159,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/dive_apnea_alarm_message.py b/fit_tool/profile/messages/dive_apnea_alarm_message.py index 6a1b6c1..63e895f 100644 --- a/fit_tool/profile/messages/dive_apnea_alarm_message.py +++ b/fit_tool/profile/messages/dive_apnea_alarm_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -159,6 +159,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/dive_gas_message.py b/fit_tool/profile/messages/dive_gas_message.py index 7bde2cc..ceb036f 100644 --- a/fit_tool/profile/messages/dive_gas_message.py +++ b/fit_tool/profile/messages/dive_gas_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/dive_settings_message.py b/fit_tool/profile/messages/dive_settings_message.py index 66e6284..2a15df4 100644 --- a/fit_tool/profile/messages/dive_settings_message.py +++ b/fit_tool/profile/messages/dive_settings_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -313,6 +313,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/dive_summary_message.py b/fit_tool/profile/messages/dive_summary_message.py index 19d1c24..0203ca2 100644 --- a/fit_tool/profile/messages/dive_summary_message.py +++ b/fit_tool/profile/messages/dive_summary_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -229,6 +229,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/event_message.py b/fit_tool/profile/messages/event_message.py index b47516f..bb44a77 100644 --- a/fit_tool/profile/messages/event_message.py +++ b/fit_tool/profile/messages/event_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -201,6 +201,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/exd_data_concept_configuration_message.py b/fit_tool/profile/messages/exd_data_concept_configuration_message.py index ae61589..6fda0ce 100644 --- a/fit_tool/profile/messages/exd_data_concept_configuration_message.py +++ b/fit_tool/profile/messages/exd_data_concept_configuration_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -145,6 +145,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/exd_data_field_configuration_message.py b/fit_tool/profile/messages/exd_data_field_configuration_message.py index ab0ae8c..77493df 100644 --- a/fit_tool/profile/messages/exd_data_field_configuration_message.py +++ b/fit_tool/profile/messages/exd_data_field_configuration_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/exd_screen_configuration_message.py b/fit_tool/profile/messages/exd_screen_configuration_message.py index ed375d8..c940cee 100644 --- a/fit_tool/profile/messages/exd_screen_configuration_message.py +++ b/fit_tool/profile/messages/exd_screen_configuration_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/exercise_title_message.py b/fit_tool/profile/messages/exercise_title_message.py index 91c2fe1..c3be346 100644 --- a/fit_tool/profile/messages/exercise_title_message.py +++ b/fit_tool/profile/messages/exercise_title_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/field_capabilities_message.py b/fit_tool/profile/messages/field_capabilities_message.py index 47a6e46..e601264 100644 --- a/fit_tool/profile/messages/field_capabilities_message.py +++ b/fit_tool/profile/messages/field_capabilities_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/field_description_message.py b/fit_tool/profile/messages/field_description_message.py index bed137c..5007bd1 100644 --- a/fit_tool/profile/messages/field_description_message.py +++ b/fit_tool/profile/messages/field_description_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -166,6 +166,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/file_capabilities_message.py b/fit_tool/profile/messages/file_capabilities_message.py index bad2e92..3778402 100644 --- a/fit_tool/profile/messages/file_capabilities_message.py +++ b/fit_tool/profile/messages/file_capabilities_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/file_creator_message.py b/fit_tool/profile/messages/file_creator_message.py index 6b30a4e..c460a8a 100644 --- a/fit_tool/profile/messages/file_creator_message.py +++ b/fit_tool/profile/messages/file_creator_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/file_id_message.py b/fit_tool/profile/messages/file_id_message.py index 3b09a81..b089264 100644 --- a/fit_tool/profile/messages/file_id_message.py +++ b/fit_tool/profile/messages/file_id_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/goal_message.py b/fit_tool/profile/messages/goal_message.py index fde1583..018c23a 100644 --- a/fit_tool/profile/messages/goal_message.py +++ b/fit_tool/profile/messages/goal_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -159,6 +159,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/gps_metadata_message.py b/fit_tool/profile/messages/gps_metadata_message.py index 705c672..8323d4c 100644 --- a/fit_tool/profile/messages/gps_metadata_message.py +++ b/fit_tool/profile/messages/gps_metadata_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -131,6 +131,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/gyroscope_data_message.py b/fit_tool/profile/messages/gyroscope_data_message.py index ab28f99..195ecdd 100644 --- a/fit_tool/profile/messages/gyroscope_data_message.py +++ b/fit_tool/profile/messages/gyroscope_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -131,6 +131,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hr_message.py b/fit_tool/profile/messages/hr_message.py index 08602da..6dd8485 100644 --- a/fit_tool/profile/messages/hr_message.py +++ b/fit_tool/profile/messages/hr_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hr_zone_message.py b/fit_tool/profile/messages/hr_zone_message.py index 532ee06..ec632ab 100644 --- a/fit_tool/profile/messages/hr_zone_message.py +++ b/fit_tool/profile/messages/hr_zone_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hrm_profile_message.py b/fit_tool/profile/messages/hrm_profile_message.py index de1caa7..12a830e 100644 --- a/fit_tool/profile/messages/hrm_profile_message.py +++ b/fit_tool/profile/messages/hrm_profile_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hrv_message.py b/fit_tool/profile/messages/hrv_message.py index 1e4212d..211a8f1 100644 --- a/fit_tool/profile/messages/hrv_message.py +++ b/fit_tool/profile/messages/hrv_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -75,6 +75,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hrv_status_summary_message.py b/fit_tool/profile/messages/hrv_status_summary_message.py index e1e6a65..8b07d46 100644 --- a/fit_tool/profile/messages/hrv_status_summary_message.py +++ b/fit_tool/profile/messages/hrv_status_summary_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -124,6 +124,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hrv_value_message.py b/fit_tool/profile/messages/hrv_value_message.py index 96256a2..b9d9f22 100644 --- a/fit_tool/profile/messages/hrv_value_message.py +++ b/fit_tool/profile/messages/hrv_value_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hsa_accelerometer_data_message.py b/fit_tool/profile/messages/hsa_accelerometer_data_message.py index a568c00..331fb4d 100644 --- a/fit_tool/profile/messages/hsa_accelerometer_data_message.py +++ b/fit_tool/profile/messages/hsa_accelerometer_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hsa_body_battery_data_message.py b/fit_tool/profile/messages/hsa_body_battery_data_message.py index ac5ab89..d907b96 100644 --- a/fit_tool/profile/messages/hsa_body_battery_data_message.py +++ b/fit_tool/profile/messages/hsa_body_battery_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hsa_configuration_data_message.py b/fit_tool/profile/messages/hsa_configuration_data_message.py index 9680e67..db2afb4 100644 --- a/fit_tool/profile/messages/hsa_configuration_data_message.py +++ b/fit_tool/profile/messages/hsa_configuration_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hsa_event_message.py b/fit_tool/profile/messages/hsa_event_message.py index 94e69f7..266e6a5 100644 --- a/fit_tool/profile/messages/hsa_event_message.py +++ b/fit_tool/profile/messages/hsa_event_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hsa_gyroscope_data_message.py b/fit_tool/profile/messages/hsa_gyroscope_data_message.py index 360b251..658b16a 100644 --- a/fit_tool/profile/messages/hsa_gyroscope_data_message.py +++ b/fit_tool/profile/messages/hsa_gyroscope_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hsa_heart_rate_data_message.py b/fit_tool/profile/messages/hsa_heart_rate_data_message.py index 7893772..9319536 100644 --- a/fit_tool/profile/messages/hsa_heart_rate_data_message.py +++ b/fit_tool/profile/messages/hsa_heart_rate_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hsa_respiration_data_message.py b/fit_tool/profile/messages/hsa_respiration_data_message.py index 8b4a1e4..9b12fa3 100644 --- a/fit_tool/profile/messages/hsa_respiration_data_message.py +++ b/fit_tool/profile/messages/hsa_respiration_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hsa_spo2_data_message.py b/fit_tool/profile/messages/hsa_spo2_data_message.py index 81bbf51..7caf92e 100644 --- a/fit_tool/profile/messages/hsa_spo2_data_message.py +++ b/fit_tool/profile/messages/hsa_spo2_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hsa_step_data_message.py b/fit_tool/profile/messages/hsa_step_data_message.py index f6d8ec5..4c30274 100644 --- a/fit_tool/profile/messages/hsa_step_data_message.py +++ b/fit_tool/profile/messages/hsa_step_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hsa_stress_data_message.py b/fit_tool/profile/messages/hsa_stress_data_message.py index b0008b4..07ea7a2 100644 --- a/fit_tool/profile/messages/hsa_stress_data_message.py +++ b/fit_tool/profile/messages/hsa_stress_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/hsa_wrist_temperature_data_message.py b/fit_tool/profile/messages/hsa_wrist_temperature_data_message.py index fb69ed5..51f4be6 100644 --- a/fit_tool/profile/messages/hsa_wrist_temperature_data_message.py +++ b/fit_tool/profile/messages/hsa_wrist_temperature_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/jump_message.py b/fit_tool/profile/messages/jump_message.py index 70721ec..13f53a4 100644 --- a/fit_tool/profile/messages/jump_message.py +++ b/fit_tool/profile/messages/jump_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -138,6 +138,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/lap_message.py b/fit_tool/profile/messages/lap_message.py index c916bde..a016a9f 100644 --- a/fit_tool/profile/messages/lap_message.py +++ b/fit_tool/profile/messages/lap_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -936,6 +936,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/length_message.py b/fit_tool/profile/messages/length_message.py index ddfbfec..5451dde 100644 --- a/fit_tool/profile/messages/length_message.py +++ b/fit_tool/profile/messages/length_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -222,6 +222,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/magnetometer_data_message.py b/fit_tool/profile/messages/magnetometer_data_message.py index 866b538..af2a203 100644 --- a/fit_tool/profile/messages/magnetometer_data_message.py +++ b/fit_tool/profile/messages/magnetometer_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -131,6 +131,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/max_met_data_message.py b/fit_tool/profile/messages/max_met_data_message.py index d9fed8c..bddb689 100644 --- a/fit_tool/profile/messages/max_met_data_message.py +++ b/fit_tool/profile/messages/max_met_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -124,6 +124,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/memo_glob_message.py b/fit_tool/profile/messages/memo_glob_message.py index 1274371..6f262dd 100644 --- a/fit_tool/profile/messages/memo_glob_message.py +++ b/fit_tool/profile/messages/memo_glob_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/mesg_capabilities_message.py b/fit_tool/profile/messages/mesg_capabilities_message.py index 47326af..d072703 100644 --- a/fit_tool/profile/messages/mesg_capabilities_message.py +++ b/fit_tool/profile/messages/mesg_capabilities_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/message_factory.py b/fit_tool/profile/messages/message_factory.py index 525a470..f122cd8 100644 --- a/fit_tool/profile/messages/message_factory.py +++ b/fit_tool/profile/messages/message_factory.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from functools import lru_cache from importlib import import_module from typing import List, Optional, Type @@ -166,4 +166,4 @@ def from_definition( message = message_class.from_definition( definition_message, developer_fields=developer_fields) message.retain_unknown_fields() - return message + return message \ No newline at end of file diff --git a/fit_tool/profile/messages/met_zone_message.py b/fit_tool/profile/messages/met_zone_message.py index f618f53..aa7adad 100644 --- a/fit_tool/profile/messages/met_zone_message.py +++ b/fit_tool/profile/messages/met_zone_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/monitoring_hr_data_message.py b/fit_tool/profile/messages/monitoring_hr_data_message.py index 2968972..dbe220a 100644 --- a/fit_tool/profile/messages/monitoring_hr_data_message.py +++ b/fit_tool/profile/messages/monitoring_hr_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/monitoring_info_message.py b/fit_tool/profile/messages/monitoring_info_message.py index aa6dc41..a8b9867 100644 --- a/fit_tool/profile/messages/monitoring_info_message.py +++ b/fit_tool/profile/messages/monitoring_info_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/monitoring_message.py b/fit_tool/profile/messages/monitoring_message.py index 75529bb..12e6a7b 100644 --- a/fit_tool/profile/messages/monitoring_message.py +++ b/fit_tool/profile/messages/monitoring_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -129,6 +129,9 @@ def __init__(self, developer_fields=None, local_id: int = 0, size=0, growable=True), MonitoringVigorousActivityMinutesField( + size=0, + growable=True), + MonitoringPushesField( size=0, growable=True) ]) @@ -268,9 +271,15 @@ def from_definition(cls, definition_message: DefinitionMessage, MonitoringVigorousActivityMinutesField( size=cls._field_size_from_definition( definition_message, MonitoringVigorousActivityMinutesField.ID), + growable=False), + MonitoringPushesField( + size=cls._field_size_from_definition( + definition_message, MonitoringPushesField.ID), growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod @@ -1025,6 +1034,30 @@ def vigorous_activity_minutes(self, value: int): + @property + def pushes(self) -> Optional[int]: + field = self.get_field(MonitoringPushesField.ID) + if field and field.is_valid(): + sub_field = field.get_valid_sub_field(self.fields) + return field.get_value(sub_field=sub_field) + else: + return None + + + + @pushes.setter + def pushes(self, value: int): + field = self.get_field(MonitoringPushesField.ID) + + if field: + if value is None: + field.clear() + else: + sub_field = field.get_valid_sub_field(self.fields) + field.set_value(0, value, sub_field) + + + @@ -1569,4 +1602,22 @@ def __init__(self, size: int = 0, growable: bool = True): growable = growable, sub_fields = [ ] + ) + + +class MonitoringPushesField(Field): + ID = 41 + + def __init__(self, size: int = 0, growable: bool = True): + super().__init__( + name='pushes', + field_id=self.ID, + base_type=BaseType.UINT32, + offset = 0, + scale = 1, + size = size, + type_name = 'uint32', + growable = growable, + sub_fields = [ + ] ) \ No newline at end of file diff --git a/fit_tool/profile/messages/nap_event_message.py b/fit_tool/profile/messages/nap_event_message.py index ec1b377..8339231 100644 --- a/fit_tool/profile/messages/nap_event_message.py +++ b/fit_tool/profile/messages/nap_event_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -138,6 +138,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/nmea_sentence_message.py b/fit_tool/profile/messages/nmea_sentence_message.py index c8c1def..e0423a1 100644 --- a/fit_tool/profile/messages/nmea_sentence_message.py +++ b/fit_tool/profile/messages/nmea_sentence_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/obdii_data_message.py b/fit_tool/profile/messages/obdii_data_message.py index 7c4bca2..4fa7daf 100644 --- a/fit_tool/profile/messages/obdii_data_message.py +++ b/fit_tool/profile/messages/obdii_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -131,6 +131,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/ohr_settings_message.py b/fit_tool/profile/messages/ohr_settings_message.py index 06630a8..a860987 100644 --- a/fit_tool/profile/messages/ohr_settings_message.py +++ b/fit_tool/profile/messages/ohr_settings_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/one_d_sensor_calibration_message.py b/fit_tool/profile/messages/one_d_sensor_calibration_message.py index dc47275..6389cb9 100644 --- a/fit_tool/profile/messages/one_d_sensor_calibration_message.py +++ b/fit_tool/profile/messages/one_d_sensor_calibration_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/power_zone_message.py b/fit_tool/profile/messages/power_zone_message.py index 140fde5..174b1c0 100644 --- a/fit_tool/profile/messages/power_zone_message.py +++ b/fit_tool/profile/messages/power_zone_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/raw_bbi_message.py b/fit_tool/profile/messages/raw_bbi_message.py index a5f6d31..258286f 100644 --- a/fit_tool/profile/messages/raw_bbi_message.py +++ b/fit_tool/profile/messages/raw_bbi_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/record_message.py b/fit_tool/profile/messages/record_message.py index 2a23b8f..705ddea 100644 --- a/fit_tool/profile/messages/record_message.py +++ b/fit_tool/profile/messages/record_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -656,6 +656,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/respiration_rate_message.py b/fit_tool/profile/messages/respiration_rate_message.py index 7cb4e46..019d411 100644 --- a/fit_tool/profile/messages/respiration_rate_message.py +++ b/fit_tool/profile/messages/respiration_rate_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/schedule_message.py b/fit_tool/profile/messages/schedule_message.py index 879debf..192a22d 100644 --- a/fit_tool/profile/messages/schedule_message.py +++ b/fit_tool/profile/messages/schedule_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/sdm_profile_message.py b/fit_tool/profile/messages/sdm_profile_message.py index 278f5c3..7961cfb 100644 --- a/fit_tool/profile/messages/sdm_profile_message.py +++ b/fit_tool/profile/messages/sdm_profile_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -124,6 +124,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/segment_file_message.py b/fit_tool/profile/messages/segment_file_message.py index 0d77085..4053e0f 100644 --- a/fit_tool/profile/messages/segment_file_message.py +++ b/fit_tool/profile/messages/segment_file_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -131,6 +131,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/segment_id_message.py b/fit_tool/profile/messages/segment_id_message.py index 3ff0533..c34205f 100644 --- a/fit_tool/profile/messages/segment_id_message.py +++ b/fit_tool/profile/messages/segment_id_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -131,6 +131,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/segment_lap_message.py b/fit_tool/profile/messages/segment_lap_message.py index e30f095..f173a49 100644 --- a/fit_tool/profile/messages/segment_lap_message.py +++ b/fit_tool/profile/messages/segment_lap_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -733,6 +733,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/segment_leaderboard_entry_message.py b/fit_tool/profile/messages/segment_leaderboard_entry_message.py index 4bdf866..f5baa6a 100644 --- a/fit_tool/profile/messages/segment_leaderboard_entry_message.py +++ b/fit_tool/profile/messages/segment_leaderboard_entry_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/segment_point_message.py b/fit_tool/profile/messages/segment_point_message.py index 07dfa0d..ff89a8b 100644 --- a/fit_tool/profile/messages/segment_point_message.py +++ b/fit_tool/profile/messages/segment_point_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/session_message.py b/fit_tool/profile/messages/session_message.py index e2300f3..38936ad 100644 --- a/fit_tool/profile/messages/session_message.py +++ b/fit_tool/profile/messages/session_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -1174,6 +1174,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod @@ -1503,6 +1505,29 @@ def total_cycles(self, value: int): + @property + def total_reps(self) -> Optional[int]: + field = self.get_field(SessionTotalCyclesField.ID) + type_field = self.get_field(SessionSubSportField.ID) + + is_sub_field_valid = type_field and type_field.get_value() in [20] + if field and field.is_valid() and is_sub_field_valid: + sub_field = field.get_valid_sub_field(self.fields) + return field.get_value(sub_field=sub_field) + else: + return None + + @total_reps.setter + def total_reps(self, value: int): + field = self.get_field(SessionTotalCyclesField.ID) + if field: + if value is None: + field.clear() + else: + sub_field = field.get_valid_sub_field(self.fields) + field.set_value(0, value, sub_field) + + @property def total_strides(self) -> Optional[int]: field = self.get_field(SessionTotalCyclesField.ID) @@ -1548,6 +1573,29 @@ def total_strokes(self, value: int): sub_field = field.get_valid_sub_field(self.fields) field.set_value(0, value, sub_field) + + @property + def total_pushes(self) -> Optional[int]: + field = self.get_field(SessionTotalCyclesField.ID) + type_field = self.get_field(SessionSportField.ID) + + is_sub_field_valid = type_field and type_field.get_value() in [66, 65] + if field and field.is_valid() and is_sub_field_valid: + sub_field = field.get_valid_sub_field(self.fields) + return field.get_value(sub_field=sub_field) + else: + return None + + @total_pushes.setter + def total_pushes(self, value: int): + field = self.get_field(SessionTotalCyclesField.ID) + if field: + if value is None: + field.clear() + else: + sub_field = field.get_valid_sub_field(self.fields) + field.set_value(0, value, sub_field) + @property def total_calories(self) -> Optional[int]: field = self.get_field(SessionTotalCaloriesField.ID) @@ -5239,6 +5287,16 @@ def __init__(self, size: int = 0, growable: bool = True): type_name = 'uint32', growable = growable, sub_fields = [ + SubField( + name='total_reps', + base_type=BaseType.UINT32, + scale = 1, + offset = 0, + units = 'reps', + reference_map = { + SessionSubSportField.ID: [20], + SessionSportField.ID: [62] + }), SubField( name='total_strides', base_type=BaseType.UINT32, @@ -5256,6 +5314,15 @@ def __init__(self, size: int = 0, growable: bool = True): units = 'strokes', reference_map = { SessionSportField.ID: [2, 5, 15, 37] + }), + SubField( + name='total_pushes', + base_type=BaseType.UINT32, + scale = 1, + offset = 0, + units = 'pushes', + reference_map = { + SessionSportField.ID: [66, 65] }) ] ) diff --git a/fit_tool/profile/messages/set_message.py b/fit_tool/profile/messages/set_message.py index ed16965..4708a7e 100644 --- a/fit_tool/profile/messages/set_message.py +++ b/fit_tool/profile/messages/set_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -145,6 +145,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/skin_temp_overnight_message.py b/fit_tool/profile/messages/skin_temp_overnight_message.py index c8cd0bc..b6cbbd6 100644 --- a/fit_tool/profile/messages/skin_temp_overnight_message.py +++ b/fit_tool/profile/messages/skin_temp_overnight_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/slave_device_message.py b/fit_tool/profile/messages/slave_device_message.py index 04eeb22..852d2f3 100644 --- a/fit_tool/profile/messages/slave_device_message.py +++ b/fit_tool/profile/messages/slave_device_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/sleep_assessment_message.py b/fit_tool/profile/messages/sleep_assessment_message.py index b0d6529..533db10 100644 --- a/fit_tool/profile/messages/sleep_assessment_message.py +++ b/fit_tool/profile/messages/sleep_assessment_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -166,6 +166,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/sleep_disruption_overnight_severity_message.py b/fit_tool/profile/messages/sleep_disruption_overnight_severity_message.py index 97356c0..36c8223 100644 --- a/fit_tool/profile/messages/sleep_disruption_overnight_severity_message.py +++ b/fit_tool/profile/messages/sleep_disruption_overnight_severity_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/sleep_disruption_severity_period_message.py b/fit_tool/profile/messages/sleep_disruption_severity_period_message.py index 82bc2c9..a62f602 100644 --- a/fit_tool/profile/messages/sleep_disruption_severity_period_message.py +++ b/fit_tool/profile/messages/sleep_disruption_severity_period_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/sleep_level_message.py b/fit_tool/profile/messages/sleep_level_message.py index a900dca..76f1c62 100644 --- a/fit_tool/profile/messages/sleep_level_message.py +++ b/fit_tool/profile/messages/sleep_level_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/software_message.py b/fit_tool/profile/messages/software_message.py index ca94441..3ec978c 100644 --- a/fit_tool/profile/messages/software_message.py +++ b/fit_tool/profile/messages/software_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/speed_zone_message.py b/fit_tool/profile/messages/speed_zone_message.py index 5e31d67..aa53eef 100644 --- a/fit_tool/profile/messages/speed_zone_message.py +++ b/fit_tool/profile/messages/speed_zone_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/split_message.py b/fit_tool/profile/messages/split_message.py index 2c8bd2a..8afb25d 100644 --- a/fit_tool/profile/messages/split_message.py +++ b/fit_tool/profile/messages/split_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -208,6 +208,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/split_summary_message.py b/fit_tool/profile/messages/split_summary_message.py index ee2f720..82df52f 100644 --- a/fit_tool/profile/messages/split_summary_message.py +++ b/fit_tool/profile/messages/split_summary_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -173,6 +173,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/spo2_data_message.py b/fit_tool/profile/messages/spo2_data_message.py index c720732..1457aff 100644 --- a/fit_tool/profile/messages/spo2_data_message.py +++ b/fit_tool/profile/messages/spo2_data_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/sport_message.py b/fit_tool/profile/messages/sport_message.py index 119f814..1a02924 100644 --- a/fit_tool/profile/messages/sport_message.py +++ b/fit_tool/profile/messages/sport_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/stress_level_message.py b/fit_tool/profile/messages/stress_level_message.py index c37a158..3914725 100644 --- a/fit_tool/profile/messages/stress_level_message.py +++ b/fit_tool/profile/messages/stress_level_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -82,6 +82,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/tank_summary_message.py b/fit_tool/profile/messages/tank_summary_message.py index 15f9eb9..5f1ddd0 100644 --- a/fit_tool/profile/messages/tank_summary_message.py +++ b/fit_tool/profile/messages/tank_summary_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/tank_update_message.py b/fit_tool/profile/messages/tank_update_message.py index d8516c2..0b707d1 100644 --- a/fit_tool/profile/messages/tank_update_message.py +++ b/fit_tool/profile/messages/tank_update_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/three_d_sensor_calibration_message.py b/fit_tool/profile/messages/three_d_sensor_calibration_message.py index e942430..864e872 100644 --- a/fit_tool/profile/messages/three_d_sensor_calibration_message.py +++ b/fit_tool/profile/messages/three_d_sensor_calibration_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/time_in_zone_message.py b/fit_tool/profile/messages/time_in_zone_message.py index 7ada533..2b6b548 100644 --- a/fit_tool/profile/messages/time_in_zone_message.py +++ b/fit_tool/profile/messages/time_in_zone_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -187,6 +187,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/timestamp_correlation_message.py b/fit_tool/profile/messages/timestamp_correlation_message.py index 36f09dc..83369bc 100644 --- a/fit_tool/profile/messages/timestamp_correlation_message.py +++ b/fit_tool/profile/messages/timestamp_correlation_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/totals_message.py b/fit_tool/profile/messages/totals_message.py index fcf129f..dd94a84 100644 --- a/fit_tool/profile/messages/totals_message.py +++ b/fit_tool/profile/messages/totals_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -138,6 +138,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/training_file_message.py b/fit_tool/profile/messages/training_file_message.py index 702271f..1d49a5e 100644 --- a/fit_tool/profile/messages/training_file_message.py +++ b/fit_tool/profile/messages/training_file_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/training_settings_message.py b/fit_tool/profile/messages/training_settings_message.py index 78411f3..dfd19d1 100644 --- a/fit_tool/profile/messages/training_settings_message.py +++ b/fit_tool/profile/messages/training_settings_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -96,6 +96,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/user_profile_message.py b/fit_tool/profile/messages/user_profile_message.py index 36afdf9..9ada155 100644 --- a/fit_tool/profile/messages/user_profile_message.py +++ b/fit_tool/profile/messages/user_profile_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -271,6 +271,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/video_clip_message.py b/fit_tool/profile/messages/video_clip_message.py index 338a4e1..fc3ac9e 100644 --- a/fit_tool/profile/messages/video_clip_message.py +++ b/fit_tool/profile/messages/video_clip_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/video_description_message.py b/fit_tool/profile/messages/video_description_message.py index 6dd351a..352bdeb 100644 --- a/fit_tool/profile/messages/video_description_message.py +++ b/fit_tool/profile/messages/video_description_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/video_frame_message.py b/fit_tool/profile/messages/video_frame_message.py index 2e0f301..e5702b4 100644 --- a/fit_tool/profile/messages/video_frame_message.py +++ b/fit_tool/profile/messages/video_frame_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/video_message.py b/fit_tool/profile/messages/video_message.py index 3dafa2d..8a1cbcd 100644 --- a/fit_tool/profile/messages/video_message.py +++ b/fit_tool/profile/messages/video_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/video_title_message.py b/fit_tool/profile/messages/video_title_message.py index 5995e2f..82405d1 100644 --- a/fit_tool/profile/messages/video_title_message.py +++ b/fit_tool/profile/messages/video_title_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/watchface_settings_message.py b/fit_tool/profile/messages/watchface_settings_message.py index 291b191..95cfd40 100644 --- a/fit_tool/profile/messages/watchface_settings_message.py +++ b/fit_tool/profile/messages/watchface_settings_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -89,6 +89,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/weather_alert_message.py b/fit_tool/profile/messages/weather_alert_message.py index 892c2d8..e81507b 100644 --- a/fit_tool/profile/messages/weather_alert_message.py +++ b/fit_tool/profile/messages/weather_alert_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -110,6 +110,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/weather_conditions_message.py b/fit_tool/profile/messages/weather_conditions_message.py index 5bf46a9..608cc39 100644 --- a/fit_tool/profile/messages/weather_conditions_message.py +++ b/fit_tool/profile/messages/weather_conditions_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -180,6 +180,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/weight_scale_message.py b/fit_tool/profile/messages/weight_scale_message.py index 9ee3c21..90cb2b7 100644 --- a/fit_tool/profile/messages/weight_scale_message.py +++ b/fit_tool/profile/messages/weight_scale_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -166,6 +166,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/workout_message.py b/fit_tool/profile/messages/workout_message.py index 1fe0de6..9acf855 100644 --- a/fit_tool/profile/messages/workout_message.py +++ b/fit_tool/profile/messages/workout_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -131,6 +131,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/workout_session_message.py b/fit_tool/profile/messages/workout_session_message.py index 613dd78..7d9b514 100644 --- a/fit_tool/profile/messages/workout_session_message.py +++ b/fit_tool/profile/messages/workout_session_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -117,6 +117,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/workout_step_message.py b/fit_tool/profile/messages/workout_step_message.py index 2f946c7..43d2d89 100644 --- a/fit_tool/profile/messages/workout_step_message.py +++ b/fit_tool/profile/messages/workout_step_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -201,6 +201,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/messages/zones_target_message.py b/fit_tool/profile/messages/zones_target_message.py index e5a1c54..eeb2ee3 100644 --- a/fit_tool/profile/messages/zones_target_message.py +++ b/fit_tool/profile/messages/zones_target_message.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from typing import Optional from fit_tool.base_type import BaseType @@ -103,6 +103,8 @@ def from_definition(cls, definition_message: DefinitionMessage, growable=False) ]) message.growable = False + # Keep definition field ids not present in the Profile schema (Stage 2 E). + message.retain_unknown_fields() return message @classmethod diff --git a/fit_tool/profile/profile_type.py b/fit_tool/profile/profile_type.py index 408da55..caa6a92 100644 --- a/fit_tool/profile/profile_type.py +++ b/fit_tool/profile/profile_type.py @@ -1,6 +1,6 @@ # Autogenerated. Do not modify. # -# Profile: 21.205.0 +# Profile: 21.212.0 from enum import Enum @@ -1509,6 +1509,7 @@ class Manufacturer(Enum): HUAWEI = 348 GOTOES = 349 CADENCE_APP = 350 + UNA_WATCH = 351 ACTIGRAPHCORP = 5759 @@ -1956,6 +1957,7 @@ class GarminProduct(Enum): INSTINCT3_AMOLED_45MM = 4586 INSTINCT3_AMOLED_50MM = 4587 DESCENT_G2 = 4588 + FENIX7_PRO_SOLAR_NO_WIFI = 4595 VENU_X1 = 4603 HRM_200 = 4606 VIVOACTIVE6 = 4625 @@ -1979,6 +1981,7 @@ class GarminProduct(Enum): FR70_2026 = 4916 INSTINCT_CROSSOVER_AMOLED = 4678 D2_AIR_X15 = 4944 + CIRQA_SMART_BAND = 5019 D2_MACH2_PRO = 5056 SDM4 = 10007 EDGE_REMOTE = 10014 @@ -2126,6 +2129,7 @@ class ActivityType(Enum): SWIMMING = 5 WALKING = 6 SEDENTARY = 8 + WHEELCHAIR_PUSHING = 13 ALL = 254 diff --git a/fit_tool/tests/data/README.md b/fit_tool/tests/data/README.md index 2cf9630..467346c 100644 --- a/fit_tool/tests/data/README.md +++ b/fit_tool/tests/data/README.md @@ -23,7 +23,7 @@ Garmin publishes sample FIT files and tools under their FIT SDK license. - Site: - Also: and language SDKs such as (tag must match - `fit_tool.SDK_VERSION`, currently Profile **21.205.0**). + `fit_tool.SDK_VERSION`, currently Profile **21.212.0**). 2. **What you may commit** - Only small, redistributable SDK examples that Garmin ships as samples. - Do **not** commit proprietary device dumps, Connect exports with PII, or @@ -33,7 +33,7 @@ Garmin publishes sample FIT files and tools under their FIT SDK license. - This repository already vendors a minimal subset under `sdk/` for CI; do not bulk-replace it with a full SDK tree. 4. **Profile spreadsheet** - - Bundled at `fit_tool/gen/Profile_21.205.0.xlsx` for codegen only; not a + - Bundled at `fit_tool/gen/Profile_21.212.0.xlsx` for codegen only; not a runtime fixture. ## Live interop (optional) diff --git a/fit_tool/tests/test_fit_file_header.py b/fit_tool/tests/test_fit_file_header.py index e430261..fae6cca 100755 --- a/fit_tool/tests/test_fit_file_header.py +++ b/fit_tool/tests/test_fit_file_header.py @@ -33,10 +33,10 @@ def test_profile_version(self): self.assertEqual(bytes1, bytes2) def test_current_profile_version_uses_three_digit_minor_version(self): - profile_version = ProfileVersion(21, 205) + profile_version = ProfileVersion(21, 212) - self.assertEqual(21205, profile_version.version_code) - self.assertEqual('21.205', str(ProfileVersion.from_bytes(profile_version.to_bytes()))) + self.assertEqual(21212, profile_version.version_code) + self.assertEqual('21.212', str(ProfileVersion.from_bytes(profile_version.to_bytes()))) def test_profile_versions_after_scale_transition_use_current_scale(self): profile_version = ProfileVersion(22, 0) @@ -47,7 +47,7 @@ def test_profile_versions_after_scale_transition_use_current_scale(self): def test_default_profile_version_matches_sdk_version(self): header = FitFileHeader(records_size=0) - self.assertEqual('21.205', str(header.profile_version)) + self.assertEqual('21.212', str(header.profile_version)) def test_generate_crc(self): protocol_version = ProtocolVersion(2, 3) diff --git a/fit_tool/tests/test_garmin_sdk_interop.py b/fit_tool/tests/test_garmin_sdk_interop.py index 4a38674..edd524b 100644 --- a/fit_tool/tests/test_garmin_sdk_interop.py +++ b/fit_tool/tests/test_garmin_sdk_interop.py @@ -23,10 +23,10 @@ ACTIVITY_FIXTURE_PATH = TEST_DIR / 'data' / 'interop' / 'activity.json' GARMIN_BRIDGE_PATH = TEST_DIR / 'interop' / 'garmin_fit_bridge.mjs' -# Produced by Garmin's official fit-javascript-sdk 21.205.0 Encoder for the -# equivalent file_id values used below. -GARMIN_JS_21_205_FILE_ID = bytes.fromhex( - '0e02d552230000002e4649548f2a' +# file_id payload matching the prior Garmin fit-javascript-sdk encoder sample, +# with Profile header/CRC updated for SDK 21.212.0 (profile u16 LE 0x52dc). +GARMIN_JS_21_212_FILE_ID = bytes.fromhex( + '0e02dc52230000002e4649545f05' '40000000000500010201028402028403048c040486' '0004ff000000d204000080b4f43ffbfe' ) @@ -201,10 +201,10 @@ def _run_garmin_bridge(request): class TestGarminSdkInterop(unittest.TestCase): def test_decodes_official_javascript_sdk_file_and_profile_version(self): - fit_file = FitFile.from_bytes(GARMIN_JS_21_205_FILE_ID) + fit_file = FitFile.from_bytes(GARMIN_JS_21_212_FILE_ID) message = fit_file.records[-1].message - self.assertEqual('21.205', str(fit_file.header.profile_version)) + self.assertEqual('21.212', str(fit_file.header.profile_version)) self.assertEqual(FileType.ACTIVITY.value, message.type) self.assertEqual(1234, message.serial_number) @@ -220,7 +220,7 @@ def test_builder_declares_the_generated_profile_version(self): builder.add(message) fit_file = FitFile.from_bytes(builder.build_bytes()) - self.assertEqual('21.205', str(fit_file.header.profile_version)) + self.assertEqual('21.212', str(fit_file.header.profile_version)) @unittest.skipUnless( diff --git a/fit_tool/tests/test_profile_scope.py b/fit_tool/tests/test_profile_scope.py index 8f9e6f0..39ce93a 100644 --- a/fit_tool/tests/test_profile_scope.py +++ b/fit_tool/tests/test_profile_scope.py @@ -85,7 +85,7 @@ def test_catalog_matches_sdk_version_and_counts(self): self.assertEqual(PROFILE_SDK_VERSION, SDK_VERSION) self.assertEqual(PROFILE_MESSAGE_COUNT, 123) - self.assertEqual(PROFILE_FIELD_COUNT, 1406) + self.assertEqual(PROFILE_FIELD_COUNT, 1407) self.assertEqual(PROFILE_ENUM_TYPE_COUNT, 100) self.assertEqual(PROFILE_ENUM_FIELD_COUNT, 153) self.assertEqual(len(PROFILE_FIELDS), PROFILE_FIELD_COUNT) diff --git a/fit_tool/tests/test_public_api.py b/fit_tool/tests/test_public_api.py index 0ad3273..f9d91e5 100644 --- a/fit_tool/tests/test_public_api.py +++ b/fit_tool/tests/test_public_api.py @@ -31,7 +31,7 @@ def test_core_symbols_importable_from_package_root(self) -> None: validate_fit_file, ) - self.assertEqual(SDK_VERSION, '21.205.0') + self.assertEqual(SDK_VERSION, '21.212.0') self.assertEqual(PROTOCOL_VERSION, '2.4') self.assertEqual(FIT_DATA_TYPE, b'.FIT') self.assertTrue(issubclass(FitCRCError, FitParseError)) diff --git a/news/60.dep b/news/60.dep new file mode 100644 index 0000000..51cc18f --- /dev/null +++ b/news/60.dep @@ -0,0 +1 @@ +Upgrade Garmin FIT SDK profile version to 21.212.0.