Skip to content

Commit 6c736ba

Browse files
committed
v0.4.0 - training status as update
1 parent e1a3e57 commit 6c736ba

File tree

10 files changed

+29
-53
lines changed

10 files changed

+29
-53
lines changed

pyftms/__init__.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
SetupEventData,
2020
SpinDownEvent,
2121
SpinDownEventData,
22-
TrainingStatusEvent,
23-
TrainingStatusEventData,
2422
UpdateEvent,
2523
UpdateEventData,
2624
discover_ftms_devices,
@@ -55,11 +53,9 @@
5553
"UpdateEvent",
5654
"SetupEvent",
5755
"ControlEvent",
58-
"TrainingStatusEvent",
5956
"NotFitnessMachineError",
6057
"SetupEventData",
6158
"UpdateEventData",
62-
"TrainingStatusEventData",
6359
"MovementDirection",
6460
"IndoorBikeSimulationParameters",
6561
"DeviceInfo",

pyftms/client/__init__.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
SetupEventData,
1818
SpinDownEvent,
1919
SpinDownEventData,
20-
TrainingStatusEvent,
21-
TrainingStatusEventData,
2220
UpdateEvent,
2321
UpdateEventData,
2422
)
@@ -161,13 +159,11 @@ async def get_client_from_address(
161159
"UpdateEvent",
162160
"SetupEvent",
163161
"ControlEvent",
164-
"TrainingStatusEvent",
165162
"SpinDownEvent",
166163
"FtmsCallback",
167164
"SetupEventData",
168165
"UpdateEventData",
169166
"SpinDownEventData",
170-
"TrainingStatusEventData",
171167
"MovementDirection",
172168
"DeviceInfo",
173169
"SettingRange",

pyftms/client/backends/__init__.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
SetupEventData,
1111
SpinDownEvent,
1212
SpinDownEventData,
13-
TrainingStatusEvent,
14-
TrainingStatusEventData,
1513
UpdateEvent,
1614
UpdateEventData,
1715
)
@@ -27,8 +25,6 @@
2725
"UpdateEvent",
2826
"SetupEvent",
2927
"ControlEvent",
30-
"TrainingStatusEvent",
3128
"SpinDownEvent",
3229
"SpinDownEventData",
33-
"TrainingStatusEventData",
3430
]

pyftms/client/backends/controller.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@
3737
SetupEventData,
3838
SpinDownEvent,
3939
SpinDownEventData,
40-
TrainingStatusEvent,
41-
TrainingStatusEventData,
40+
UpdateEvent,
41+
UpdateEventData,
4242
)
4343

4444
_LOGGER = logging.getLogger(__name__)
@@ -254,12 +254,12 @@ def _on_training_status(self, c: BleakGATTCharacteristic, data: bytearray) -> No
254254
bio = io.BytesIO(data)
255255
status = TrainingStatusModel._deserialize(bio)
256256

257-
status_data = TrainingStatusEventData(code=status.code)
257+
status_data = UpdateEventData(training_status=status.code)
258258

259259
if TrainingStatusFlags.STRING_PRESENT in status.flags:
260260
if b := bio.read():
261-
status_data["string"] = b.decode(encoding="utf-8")
261+
status_data["training_status_string"] = b.decode(encoding="utf-8")
262262

263-
event = TrainingStatusEvent(event_id="training_status", event_data=status_data)
263+
event = UpdateEvent(event_id="update", event_data=status_data)
264264

265265
self._cb(event)

pyftms/client/backends/event.py

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright 2024, Sergey Dudanov
22
# SPDX-License-Identifier: Apache-2.0
33

4-
from typing import Callable, Literal, NamedTuple, NotRequired, TypedDict
4+
from typing import Callable, Literal, NamedTuple, TypedDict
55

66
from ...models import (
77
IndoorBikeSimulationParameters,
@@ -309,24 +309,14 @@ class UpdateEventData(TypedDict, total=False):
309309
310310
Units: `s`.
311311
"""
312-
313-
314-
class TrainingStatusEventData(TypedDict):
315-
"""`TrainingStatusEvent` data."""
316-
317-
code: TrainingStatusCode
318-
"""Training Status Code."""
319-
string: NotRequired[str]
320-
"""Extended string."""
321-
322-
323-
class TrainingStatusEvent(NamedTuple):
324-
"""Training Status Event."""
325-
326-
event_id: Literal["training_status"]
327-
"""Always `training_status`."""
328-
event_data: TrainingStatusEventData
329-
"""`TrainingStatusEvent` data."""
312+
training_status: TrainingStatusCode
313+
"""
314+
Training Status.
315+
"""
316+
training_status_string: str
317+
"""
318+
Training Status String.
319+
"""
330320

331321

332322
class UpdateEvent(NamedTuple):
@@ -367,9 +357,7 @@ class ControlEvent(NamedTuple):
367357
"""Reason of event."""
368358

369359

370-
FtmsEvents = (
371-
UpdateEvent | SetupEvent | ControlEvent | TrainingStatusEvent | SpinDownEvent
372-
)
360+
FtmsEvents = UpdateEvent | SetupEvent | ControlEvent | SpinDownEvent
373361
"""Tagged union of FTMS events."""
374362

375363
FtmsCallback = Callable[[FtmsEvents], None]

pyftms/client/client.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,15 @@ def __init__(
9595
self._data_updater = DataUpdater(self._data_model, self._on_event)
9696
self._controller = MachineController(self._on_event)
9797

98-
@classmethod
9998
def _get_supported_properties(
100-
cls, features: MachineFeatures = MachineFeatures(~0)
99+
self, features: MachineFeatures = MachineFeatures(~0)
101100
) -> tuple[str, ...]:
102-
return cls._data_model._get_features(features)
101+
properties = self._data_model._get_features(features)
102+
103+
if self.training_status is not None:
104+
properties.append(c.TRAINING_STATUS)
105+
106+
return tuple(properties)
103107

104108
async def __aenter__(self):
105109
await self.connect()
@@ -210,7 +214,7 @@ def available_properties(self) -> tuple[str, ...]:
210214
@cached_property
211215
def supported_settings(self) -> tuple[str, ...]:
212216
"""Supported settings."""
213-
return ControlModel._get_features(self._m_settings)
217+
return tuple(ControlModel._get_features(self._m_settings))
214218

215219
@property
216220
def supported_ranges(self) -> MappingProxyType[str, SettingRange]:

pyftms/client/const.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
FORCE_ON_BELT = "force_on_belt"
1515
HEART_RATE = "heart_rate"
1616
INCLINATION = "inclination"
17+
INDOOR_BIKE_SIMULATION = "indoor_bike_simulation"
1718
METABOLIC_EQUIVALENT = "metabolic_equivalent"
1819
MOVEMENT_DIRECTION = "movement_direction"
1920
PACE_AVERAGE = "pace_average"
@@ -36,7 +37,7 @@
3637
STROKE_RATE_INSTANT = "stroke_rate_instant"
3738
TIME_ELAPSED = "time_elapsed"
3839
TIME_REMAINING = "time_remaining"
39-
INDOOR_BIKE_SIMULATION = "indoor_bike_simulation"
40+
TRAINING_STATUS = "training_status"
4041

4142
# TARGET SETTINGS ATTRIBUTES
4243

pyftms/client/manager.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,6 @@ class PropertiesManager:
3030
_settings: SetupEventData
3131
"""Properties dictonary"""
3232

33-
_training_status: TrainingStatusCode
34-
"""Last Training Status Code"""
35-
3633
def __init__(self, on_ftms_event: FtmsCallback | None = None) -> None:
3734
self._cb = on_ftms_event
3835
self._properties = {}
@@ -49,8 +46,6 @@ def _on_event(self, e: FtmsEvents) -> None:
4946
self._live_properties.update(k for k, v in e.event_data.items() if v)
5047
elif e.event_id == "setup":
5148
self._settings |= e.event_data
52-
elif e.event_id == "training_status":
53-
self._training_status = e.event_data["code"]
5449

5550
return self._cb and self._cb(e)
5651

@@ -83,7 +78,7 @@ def settings(self) -> SetupEventData:
8378

8479
@property
8580
def training_status(self) -> TrainingStatusCode:
86-
return self._training_status
81+
return self.get_property(c.TRAINING_STATUS)
8782

8883
# REAL-TIME TRAINING DATA
8984

pyftms/serializer/model.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ def _transform(input: dict):
171171
return result
172172

173173
@classmethod
174-
def _get_features(cls, features: int) -> tuple[str, ...]:
174+
def _get_features(cls, features: int) -> list[str]:
175175
result = []
176176

177177
def _get_cls_features(cls):
@@ -194,7 +194,7 @@ def _get_cls_features(cls):
194194

195195
_get_cls_features(cls)
196196

197-
return tuple(result)
197+
return result
198198

199199
def __post_init__(self, *args, **kwargs):
200200
for field in dc.fields(self):

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "pyftms"
3-
version = "0.3.2"
3+
version = "0.4.0"
44
description = "PyFTMS - Python Fitness Machine Service client library."
55
authors = ["Sergey V. DUDANOV <sergey.dudanov@gmail.com>"]
66
readme = "README.md"

0 commit comments

Comments
 (0)