Skip to content

Commit c55c265

Browse files
committed
v0.4.2 - fix python 3.13 support
1 parent c83678a commit c55c265

6 files changed

Lines changed: 945 additions & 16 deletions

File tree

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ ipython_config.py
9999
# This is especially recommended for binary packages to ensure reproducibility, and is more
100100
# commonly ignored for libraries.
101101
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102-
poetry.lock
102+
#poetry.lock
103103

104104
# pdm
105105
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.

poetry.lock

Lines changed: 927 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyftms/models/common.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import dataclasses as dc
55
import io
66
from enum import STRICT, IntEnum, auto
7-
from typing import Any, Generic, TypeVar, cast, override
7+
from typing import Any, cast, override
88

99
from ..serializer import BaseModel, ModelMeta, model_meta
1010

@@ -75,11 +75,8 @@ class IndoorBikeSimulationParameters(BaseModel):
7575
"""
7676

7777

78-
T = TypeVar("T", bound=int)
79-
80-
8178
@dc.dataclass(frozen=True)
82-
class CodeSwitchModel(Generic[T], BaseModel):
79+
class CodeSwitchModel[T: int](BaseModel):
8380
"""Base model based on a code attribute and associated parameter attributes."""
8481

8582
code: T | None = dc.field(

pyftms/serializer/model.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,14 @@ def _get_model_field_serializer(field: dc.Field):
6666
raise TypeError("'TypeVar' must have bound type.")
6767

6868
def _get_serializer(type_) -> Serializer:
69+
if isinstance(type_, GenericAlias):
70+
if (num := meta.get("num")) is None:
71+
raise TypeError("Number of elements is required.")
72+
73+
serializer = _get_serializer(get_args(type_)[0])
74+
75+
return ListSerializer(serializer, num)
76+
6977
if issubclass(type_, (int, float)):
7078
if fmt := meta.get("format"):
7179
return get_serializer(fmt)
@@ -75,14 +83,6 @@ def _get_serializer(type_) -> Serializer:
7583
if issubclass(type_, BaseModel):
7684
return get_serializer(type_)
7785

78-
if isinstance(type_, GenericAlias):
79-
if (num := meta.get("num")) is None:
80-
raise TypeError("Number of elements is required.")
81-
82-
serializer = _get_serializer(get_args(type_)[0])
83-
84-
return ListSerializer(serializer, num)
85-
8686
raise TypeError("Unsupported type.")
8787

8888
return _get_serializer(type_)

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.4.1"
3+
version = "0.4.2"
44
description = "PyFTMS - Python Fitness Machine Service client library."
55
authors = ["Sergey V. DUDANOV <sergey.dudanov@gmail.com>"]
66
readme = "README.md"

tests/test_models.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import pytest
22

3-
from pyftms.models import TreadmillData
3+
from pyftms.models import MachineStatusModel, TreadmillData
44
from pyftms.serializer import BaseModel, ModelSerializer, get_serializer
55

66

@@ -31,6 +31,11 @@
3131
"energy_per_minute": 0,
3232
},
3333
),
34+
(
35+
MachineStatusModel,
36+
b"\x05\x69\x00",
37+
{"code": 5, "target_speed": 1.05},
38+
),
3439
],
3540
)
3641
def test_realtime_data(model: type[BaseModel], data: bytes, result: dict):

0 commit comments

Comments
 (0)