Skip to content

Commit 6d7b0f6

Browse files
committed
type annotations
1 parent da9b542 commit 6d7b0f6

File tree

8 files changed

+19
-20
lines changed

8 files changed

+19
-20
lines changed

docs/examples/inspect_data_fields.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def field_types(obs: ObsData) -> dict[str, str]:
1111

1212
return {
1313
field.name: field.type.__name__ if hasattr(field.type, "__name__") else str(field.type)
14-
for field in fields(obs) # type:ignore[arg-type]
14+
for field in fields(obs)
1515
}
1616

1717

docs/examples/sqlite.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
import typer
1818

1919
from pms.core import Sensor, SensorReader, Supported
20-
from pms.core.reader import ObsData, RawData
20+
from pms.core.reader import RawData
21+
from pms.core.types import ObsData
2122

2223
app = typer.Typer(add_completion=False)
2324

docs/examples/sqlite_measurements.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import typer
2626

2727
from pms.core import Sensor, SensorReader
28-
from pms.core.reader import ObsData
28+
from pms.core.types import ObsData
2929

3030
app = typer.Typer(add_completion=False)
3131

@@ -104,7 +104,7 @@ def connect() -> Iterator[sqlite3.Connection]:
104104
for sensor in Sensor:
105105
view_fields = ",\n".join(
106106
f"MAX(CASE WHEN field='{field.name}' THEN value ELSE NULL END) {field.name}"
107-
for field in fields(sensor.Data) # type:ignore[arg-type]
107+
for field in fields(sensor.Data)
108108
if field.name != "time"
109109
)
110110
sensor_view = f"""
@@ -135,7 +135,7 @@ def write_measurements(db: sqlite3.Connection, sensor: Sensor, obs: ObsData):
135135
"""
136136
values = (
137137
(obs.time, sensor.name, field, value)
138-
for field, value in asdict(obs).items() # type:ignore[call-overload]
138+
for field, value in asdict(obs).items()
139139
if field != "time"
140140
)
141141
with db, closing(db.cursor()) as cur:

docs/examples/sqlite_message.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
import typer
2323

2424
from pms.core import Sensor, SensorReader
25-
from pms.core.reader import ObsData, RawData
25+
from pms.core.reader import RawData
26+
from pms.core.types import ObsData
2627

2728
app = typer.Typer(add_completion=False)
2829

src/pms/core/types.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
from __future__ import annotations
2+
3+
from dataclasses import dataclass
14
from datetime import datetime
25
from typing import Protocol
36

@@ -38,16 +41,14 @@ class Message(Protocol):
3841
"""Message from sensor"""
3942

4043
@classmethod
41-
def decode(cls, message: bytes, command: Cmd) -> tuple[float, ...]: ...
44+
def decode(cls, message: bytes, command: Cmd) -> tuple[int | float, ...]: ...
4245

4346

47+
@dataclass
4448
class ObsData(Protocol):
4549
"""Decoded sensor message"""
4650

47-
def __init__(self, *data: float) -> None: ...
48-
49-
@property
50-
def time(self) -> int: ...
51+
time: int
5152

5253
@property
5354
def date(self) -> datetime: ...

src/pms/extra/cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from loguru import logger
1515

1616
from pms.core import exit_on_fail
17-
from pms.sensors.base import ObsData
17+
from pms.core.types import ObsData
1818

1919
DB_HOST: TypeAlias = Annotated[str, typer.Option("--db-host", help="database server")]
2020
DB_PORT: TypeAlias = Annotated[int, typer.Option("--db-port", help="server port")]

src/pms/sensors/base.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ class Message(metaclass=ABCMeta):
3434
Base class for serial messages from PM sensors
3535
"""
3636

37+
data_records: slice
38+
3739
def __init__(self, message: bytes) -> None:
3840
logger.debug(f"message hex: {message.hex()}")
3941
self.message = message
@@ -60,13 +62,7 @@ def unpack(cls, message: bytes, header: bytes, length: int) -> tuple[float, ...]
6062
def decode(cls, message: bytes, command: Cmd) -> tuple[float, ...]:
6163
header = command.answer_header
6264
length = command.answer_length
63-
return cls.unpack(message, header, length)[cls.data_records] # type: ignore[call-overload]
64-
65-
@property # type:ignore[misc]
66-
@classmethod
67-
@abstractmethod
68-
def data_records(cls) -> slice:
69-
pass
65+
return cls.unpack(message, header, length)[cls.data_records]
7066

7167
@property
7268
@abstractmethod

tests/extra/test_cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
from loguru import logger
88
from typer.testing import CliRunner
99

10+
from pms.core.types import ObsData
1011
from pms.extra.cli import db_measurements, mqtt_messages
1112
from pms.main import main
12-
from pms.sensors.base import ObsData
1313

1414
runner = CliRunner()
1515

0 commit comments

Comments
 (0)