python-bsblan 4.2.0__tar.gz → 4.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/workflows/codeql.yaml +2 -2
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/workflows/stale.yaml +1 -1
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/PKG-INFO +1 -1
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/pyproject.toml +4 -3
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/src/bsblan/__init__.py +2 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/src/bsblan/bsblan.py +4 -4
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/src/bsblan/models.py +35 -16
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_entity_info.py +16 -3
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_state.py +1 -1
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/uv.lock +87 -78
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.editorconfig +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.gitattributes +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/CODE_OF_CONDUCT.md +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/CONTRIBUTING.md +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/ISSUE_TEMPLATE/PULL_REQUEST_TEMPLATE.md +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/copilot-instructions.md +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/labels.yml +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/prompts/add-parameter.prompt.md +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/prompts/code-review.prompt.md +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/release-drafter.yml +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/renovate.json +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/skills/bsblan-parameters/SKILL.md +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/skills/bsblan-testing/SKILL.md +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/workflows/auto-approve-renovate.yml +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/workflows/labels.yaml +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/workflows/linting.yaml +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/workflows/lock.yaml +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/workflows/pr-labels.yaml +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/workflows/release-drafter.yaml +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/workflows/release.yaml +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/workflows/tests.yaml +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.github/workflows/typing.yaml +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.gitignore +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.nvmrc +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.pre-commit-config.yaml +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.prettierignore +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/.yamllint +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/AGENTS.md +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/CLAUDE.md +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/LICENSE.md +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/README.md +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/examples/control.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/examples/discovery.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/examples/profile_init.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/examples/ruff.toml +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/examples/speed_test.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/package-lock.json +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/package.json +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/sonar-project.properties +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/src/bsblan/constants.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/src/bsblan/exceptions.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/src/bsblan/py.typed +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/src/bsblan/utility.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/__init__.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/conftest.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/fixtures/device.json +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/fixtures/dict_version.json +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/fixtures/hot_water_state.json +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/fixtures/info.json +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/fixtures/password.txt +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/fixtures/sensor.json +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/fixtures/state.json +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/fixtures/static_state.json +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/fixtures/thermostat_hvac.json +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/fixtures/thermostat_temp.json +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/fixtures/time.json +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/ruff.toml +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_api_initialization.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_api_validation.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_auth.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_backoff_retry.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_bsblan.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_bsblan_edge_cases.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_configuration.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_constants.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_context_manager.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_device.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_dhw_time_switch.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_entity_info_ha.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_hot_water_additional.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_hotwater_state.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_include_parameter.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_info.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_initialization.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_read_parameters.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_reset_validation.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_schedule_models.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_sensor.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_set_hot_water_schedule.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_set_hotwater.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_static_state.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_temperature_unit.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_temperature_validation.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_thermostat.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_time.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_utility.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_utility_additional.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_utility_edge_cases.py +0 -0
- {python_bsblan-4.2.0 → python_bsblan-4.2.1}/tests/test_version_errors.py +0 -0
|
@@ -24,6 +24,6 @@ jobs:
|
|
|
24
24
|
- name: ⤵️ Check out code from GitHub
|
|
25
25
|
uses: actions/checkout@v6.0.2
|
|
26
26
|
- name: 🏗 Initialize CodeQL
|
|
27
|
-
uses: github/codeql-action/init@v4.32.
|
|
27
|
+
uses: github/codeql-action/init@v4.32.3
|
|
28
28
|
- name: 🚀 Perform CodeQL Analysis
|
|
29
|
-
uses: github/codeql-action/analyze@v4.32.
|
|
29
|
+
uses: github/codeql-action/analyze@v4.32.3
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "python-bsblan"
|
|
3
|
-
version = "4.2.
|
|
3
|
+
version = "4.2.1"
|
|
4
4
|
description = "Asynchronous Python client for BSBLAN API"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "Willem-Jan van Rootselaar", email = "liudgervr@gmail.com"}
|
|
@@ -148,6 +148,7 @@ ignore = [
|
|
|
148
148
|
"D213", # Conflicts with other rules
|
|
149
149
|
"D417", # False positives in some occasions
|
|
150
150
|
"PLR2004", # Just annoying, not really useful
|
|
151
|
+
"UP046", # Generic subclass style kept for mashumaro compatibility
|
|
151
152
|
|
|
152
153
|
# Conflicts with the Ruff formatter
|
|
153
154
|
"COM812",
|
|
@@ -189,7 +190,7 @@ dev = [
|
|
|
189
190
|
# hatch is required to support type hinting and proper packaging of the py.typed file.
|
|
190
191
|
"hatch>=1.14.1",
|
|
191
192
|
"isort==7.0.0",
|
|
192
|
-
"ty==0.0.
|
|
193
|
+
"ty==0.0.17",
|
|
193
194
|
"pre-commit==4.5.1",
|
|
194
195
|
"pre-commit-hooks==6.0.0",
|
|
195
196
|
"pylint==4.0.4",
|
|
@@ -198,7 +199,7 @@ dev = [
|
|
|
198
199
|
"pytest-cov==7.0.0",
|
|
199
200
|
"pytest-xdist>=3.8.0",
|
|
200
201
|
"pyupgrade==3.21.2",
|
|
201
|
-
"ruff==0.15.
|
|
202
|
+
"ruff==0.15.1",
|
|
202
203
|
"safety==3.7.0",
|
|
203
204
|
"vulture==2.14",
|
|
204
205
|
"yamllint==1.38.0",
|
|
@@ -16,6 +16,7 @@ from .models import (
|
|
|
16
16
|
DHWSchedule,
|
|
17
17
|
DHWTimeSwitchPrograms,
|
|
18
18
|
EntityInfo,
|
|
19
|
+
EntityValue,
|
|
19
20
|
HotWaterConfig,
|
|
20
21
|
HotWaterSchedule,
|
|
21
22
|
HotWaterState,
|
|
@@ -41,6 +42,7 @@ __all__ = [
|
|
|
41
42
|
"Device",
|
|
42
43
|
"DeviceTime",
|
|
43
44
|
"EntityInfo",
|
|
45
|
+
"EntityValue",
|
|
44
46
|
"HVACActionCategory",
|
|
45
47
|
"HeatingCircuitStatus",
|
|
46
48
|
"HotWaterConfig",
|
|
@@ -524,8 +524,8 @@ class BSBLAN:
|
|
|
524
524
|
try:
|
|
525
525
|
static_values = await self.static_values()
|
|
526
526
|
if static_values.min_temp is not None:
|
|
527
|
-
self._min_temp =
|
|
528
|
-
logger.debug("Min temperature initialized: %
|
|
527
|
+
self._min_temp = static_values.min_temp.value # type: ignore[assignment]
|
|
528
|
+
logger.debug("Min temperature initialized: %s", self._min_temp)
|
|
529
529
|
else:
|
|
530
530
|
logger.warning(
|
|
531
531
|
"min_temp not available from device, "
|
|
@@ -533,8 +533,8 @@ class BSBLAN:
|
|
|
533
533
|
)
|
|
534
534
|
|
|
535
535
|
if static_values.max_temp is not None:
|
|
536
|
-
self._max_temp =
|
|
537
|
-
logger.debug("Max temperature initialized: %
|
|
536
|
+
self._max_temp = static_values.max_temp.value # type: ignore[assignment]
|
|
537
|
+
logger.debug("Max temperature initialized: %s", self._max_temp)
|
|
538
538
|
else:
|
|
539
539
|
logger.warning(
|
|
540
540
|
"max_temp not available from device, "
|
|
@@ -7,7 +7,7 @@ from contextlib import suppress
|
|
|
7
7
|
from dataclasses import dataclass, field
|
|
8
8
|
from datetime import time
|
|
9
9
|
from enum import IntEnum
|
|
10
|
-
from typing import
|
|
10
|
+
from typing import Final, Generic, TypeVar, cast
|
|
11
11
|
|
|
12
12
|
from mashumaro.mixins.json import DataClassJSONMixin
|
|
13
13
|
|
|
@@ -20,6 +20,12 @@ from bsblan.constants import (
|
|
|
20
20
|
# Maximum number of time slots per day supported by BSB-LAN
|
|
21
21
|
MAX_TIME_SLOTS_PER_DAY: Final[int] = 3
|
|
22
22
|
|
|
23
|
+
# All possible EntityInfo value types after conversion
|
|
24
|
+
EntityValue = float | int | str | time
|
|
25
|
+
|
|
26
|
+
# TypeVar for EntityInfo generic
|
|
27
|
+
T = TypeVar("T", bound=EntityValue)
|
|
28
|
+
|
|
23
29
|
|
|
24
30
|
@dataclass
|
|
25
31
|
class TimeSlot:
|
|
@@ -213,15 +219,25 @@ class DataType(IntEnum):
|
|
|
213
219
|
|
|
214
220
|
|
|
215
221
|
@dataclass
|
|
216
|
-
class EntityInfo(DataClassJSONMixin):
|
|
222
|
+
class EntityInfo(DataClassJSONMixin, Generic[T]):
|
|
217
223
|
"""Convert Data to valid keys and convert to object attributes.
|
|
218
224
|
|
|
219
225
|
This object holds info about specific objects and handles automatic type conversion
|
|
220
226
|
based on data_type and unit.
|
|
221
227
|
|
|
228
|
+
The generic parameter ``T`` indicates the expected value type after conversion:
|
|
229
|
+
|
|
230
|
+
- ``EntityInfo[float]`` for temperature / numeric sensor values
|
|
231
|
+
- ``EntityInfo[int]`` for enums, weekdays and plain integers
|
|
232
|
+
- ``EntityInfo[time]`` for HH:MM time values
|
|
233
|
+
- ``EntityInfo[str]`` for string / datetime values
|
|
234
|
+
|
|
235
|
+
When the device returns ``"---"`` (sensor not in use), ``value`` is set to
|
|
236
|
+
``None``.
|
|
237
|
+
|
|
222
238
|
Attributes:
|
|
223
239
|
name: Name attribute.
|
|
224
|
-
value:
|
|
240
|
+
value: Converted value, or None when sensor/parameter is inactive.
|
|
225
241
|
unit: Unit of measurement.
|
|
226
242
|
desc: Description of the entity.
|
|
227
243
|
data_type: Type of data (see DataType enum).
|
|
@@ -237,7 +253,7 @@ class EntityInfo(DataClassJSONMixin):
|
|
|
237
253
|
name: str = field(metadata={"alias": "name"})
|
|
238
254
|
unit: str = field(metadata={"alias": "unit"})
|
|
239
255
|
desc: str = field(metadata={"alias": "desc"})
|
|
240
|
-
value:
|
|
256
|
+
value: T | None = field(metadata={"alias": "value"})
|
|
241
257
|
data_type: int = field(metadata={"alias": "dataType"})
|
|
242
258
|
error: int = field(default=0)
|
|
243
259
|
readonly: int = field(default=0)
|
|
@@ -248,7 +264,8 @@ class EntityInfo(DataClassJSONMixin):
|
|
|
248
264
|
|
|
249
265
|
def __post_init__(self) -> None:
|
|
250
266
|
"""Convert values based on data_type after initialization."""
|
|
251
|
-
if self.value == "---": #
|
|
267
|
+
if self.value == "---": # Sensor/parameter not in use
|
|
268
|
+
self.value = None
|
|
252
269
|
return
|
|
253
270
|
|
|
254
271
|
try:
|
|
@@ -261,35 +278,37 @@ class EntityInfo(DataClassJSONMixin):
|
|
|
261
278
|
str(e),
|
|
262
279
|
)
|
|
263
280
|
|
|
264
|
-
def convert_value(self) ->
|
|
281
|
+
def convert_value(self) -> T | None:
|
|
265
282
|
"""Convert the value based on its data type.
|
|
266
283
|
|
|
267
284
|
Returns:
|
|
268
|
-
|
|
285
|
+
T | None: The converted value.
|
|
269
286
|
|
|
270
287
|
"""
|
|
271
|
-
|
|
288
|
+
# Raw values from BSB-LAN JSON are always strings at this point.
|
|
289
|
+
# We explicitly convert to str so the type checker knows None is excluded
|
|
290
|
+
# (__post_init__ guards against None before calling this method).
|
|
291
|
+
raw = str(self.value)
|
|
292
|
+
result: EntityValue = raw
|
|
272
293
|
|
|
273
294
|
if self.data_type == DataType.PLAIN_NUMBER:
|
|
274
295
|
# Handle temperature values
|
|
275
296
|
if self._is_temperature():
|
|
276
|
-
result = float(
|
|
297
|
+
result = float(raw)
|
|
277
298
|
else:
|
|
278
299
|
# Handle other numeric values
|
|
279
300
|
with suppress(ValueError):
|
|
280
|
-
result = (
|
|
281
|
-
float(self.value) if "." in str(self.value) else int(self.value)
|
|
282
|
-
)
|
|
301
|
+
result = float(raw) if "." in raw else int(raw)
|
|
283
302
|
|
|
284
303
|
elif self.data_type == DataType.ENUM:
|
|
285
304
|
# For ENUMs, we keep the value as int but provide access to description
|
|
286
305
|
with suppress(ValueError):
|
|
287
|
-
result = int(
|
|
306
|
+
result = int(raw)
|
|
288
307
|
|
|
289
308
|
elif self.data_type == DataType.TIME:
|
|
290
309
|
# Convert HH:MM to time object
|
|
291
310
|
try:
|
|
292
|
-
hour, minute = map(int,
|
|
311
|
+
hour, minute = map(int, raw.split(":"))
|
|
293
312
|
result = time(hour=hour, minute=minute)
|
|
294
313
|
except ValueError:
|
|
295
314
|
pass
|
|
@@ -297,9 +316,9 @@ class EntityInfo(DataClassJSONMixin):
|
|
|
297
316
|
elif self.data_type == DataType.WEEKDAY:
|
|
298
317
|
# Convert numeric weekday to int
|
|
299
318
|
with suppress(ValueError):
|
|
300
|
-
result = int(
|
|
319
|
+
result = int(raw)
|
|
301
320
|
|
|
302
|
-
return result
|
|
321
|
+
return cast("T", result)
|
|
303
322
|
|
|
304
323
|
def _is_temperature(self) -> bool:
|
|
305
324
|
"""Check if the value represents a temperature.
|
|
@@ -23,6 +23,18 @@ def test_entity_info_invalid_time_conversion() -> None:
|
|
|
23
23
|
assert entity.value == "24:61"
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
def test_entity_info_undefined_value_becomes_none() -> None:
|
|
27
|
+
"""Test that '---' (sensor/parameter not in use) is converted to None."""
|
|
28
|
+
entity = EntityInfo(
|
|
29
|
+
name="Inactive Sensor",
|
|
30
|
+
value="---",
|
|
31
|
+
unit="°C",
|
|
32
|
+
desc="",
|
|
33
|
+
data_type=DataType.PLAIN_NUMBER,
|
|
34
|
+
)
|
|
35
|
+
assert entity.value is None
|
|
36
|
+
|
|
37
|
+
|
|
26
38
|
def test_entity_info_invalid_weekday_conversion() -> None:
|
|
27
39
|
"""Test EntityInfo with invalid weekday format."""
|
|
28
40
|
# Create EntityInfo with invalid weekday format
|
|
@@ -42,16 +54,17 @@ def test_entity_info_general_conversion_error(caplog: pytest.LogCaptureFixture)
|
|
|
42
54
|
"""Test EntityInfo with general conversion error."""
|
|
43
55
|
with caplog.at_level(logging.WARNING):
|
|
44
56
|
# Create EntityInfo that will cause a conversion error
|
|
57
|
+
# Using a non-numeric string with temperature unit triggers float() ValueError
|
|
45
58
|
entity = EntityInfo(
|
|
46
59
|
name="Error Test",
|
|
47
|
-
value=
|
|
48
|
-
unit="",
|
|
60
|
+
value="not-convertible",
|
|
61
|
+
unit="°C",
|
|
49
62
|
desc="",
|
|
50
63
|
data_type=DataType.PLAIN_NUMBER,
|
|
51
64
|
)
|
|
52
65
|
|
|
53
66
|
# The original value should be preserved
|
|
54
|
-
assert
|
|
67
|
+
assert entity.value == "not-convertible"
|
|
55
68
|
assert "Failed to convert value" in caplog.text
|
|
56
69
|
|
|
57
70
|
|
|
@@ -81,7 +81,7 @@ async def test_state(monkeypatch: Any) -> None:
|
|
|
81
81
|
|
|
82
82
|
# Room temperature setpoint boost assertions
|
|
83
83
|
assert state.room1_temp_setpoint_boost is not None
|
|
84
|
-
assert state.room1_temp_setpoint_boost.value
|
|
84
|
+
assert state.room1_temp_setpoint_boost.value is None
|
|
85
85
|
assert state.room1_temp_setpoint_boost.unit == "°C"
|
|
86
86
|
|
|
87
87
|
# Verify API call
|
|
@@ -109,6 +109,15 @@ wheels = [
|
|
|
109
109
|
{ url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" },
|
|
110
110
|
]
|
|
111
111
|
|
|
112
|
+
[[package]]
|
|
113
|
+
name = "annotated-doc"
|
|
114
|
+
version = "0.0.4"
|
|
115
|
+
source = { registry = "https://pypi.org/simple" }
|
|
116
|
+
sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" }
|
|
117
|
+
wheels = [
|
|
118
|
+
{ url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" },
|
|
119
|
+
]
|
|
120
|
+
|
|
112
121
|
[[package]]
|
|
113
122
|
name = "annotated-types"
|
|
114
123
|
version = "0.7.0"
|
|
@@ -164,14 +173,14 @@ wheels = [
|
|
|
164
173
|
|
|
165
174
|
[[package]]
|
|
166
175
|
name = "authlib"
|
|
167
|
-
version = "1.6.
|
|
176
|
+
version = "1.6.8"
|
|
168
177
|
source = { registry = "https://pypi.org/simple" }
|
|
169
178
|
dependencies = [
|
|
170
179
|
{ name = "cryptography" },
|
|
171
180
|
]
|
|
172
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
181
|
+
sdist = { url = "https://files.pythonhosted.org/packages/6b/6c/c88eac87468c607f88bc24df1f3b31445ee6fc9ba123b09e666adf687cd9/authlib-1.6.8.tar.gz", hash = "sha256:41ae180a17cf672bc784e4a518e5c82687f1fe1e98b0cafaeda80c8e4ab2d1cb", size = 165074, upload-time = "2026-02-14T04:02:17.941Z" }
|
|
173
182
|
wheels = [
|
|
174
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
183
|
+
{ url = "https://files.pythonhosted.org/packages/9b/73/f7084bf12755113cd535ae586782ff3a6e710bfbe6a0d13d1c2f81ffbbfa/authlib-1.6.8-py2.py3-none-any.whl", hash = "sha256:97286fd7a15e6cfefc32771c8ef9c54f0ed58028f1322de6a2a7c969c3817888", size = 244116, upload-time = "2026-02-14T04:02:15.579Z" },
|
|
175
184
|
]
|
|
176
185
|
|
|
177
186
|
[[package]]
|
|
@@ -662,11 +671,11 @@ wheels = [
|
|
|
662
671
|
|
|
663
672
|
[[package]]
|
|
664
673
|
name = "filelock"
|
|
665
|
-
version = "3.
|
|
674
|
+
version = "3.24.1"
|
|
666
675
|
source = { registry = "https://pypi.org/simple" }
|
|
667
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
676
|
+
sdist = { url = "https://files.pythonhosted.org/packages/4f/8a/b24ff2c2d7f20ce930b5efe91e7260247d185d8939707721168ad204e465/filelock-3.24.1.tar.gz", hash = "sha256:3440181dd03f8904c108c8e9f5b11d1663e9fc960f1c837586a11f1c5c041e54", size = 37452, upload-time = "2026-02-15T22:03:16.564Z" }
|
|
668
677
|
wheels = [
|
|
669
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
678
|
+
{ url = "https://files.pythonhosted.org/packages/97/64/3613e89811e79aca8d0d4f2c984fc66336bc9d83529c1cbe02f5df010d0a/filelock-3.24.1-py3-none-any.whl", hash = "sha256:7c59f595e3cf4887dc95b403a896849da49ed183d7c9d7ee855646ca99f10698", size = 24153, upload-time = "2026-02-15T22:03:15.262Z" },
|
|
670
679
|
]
|
|
671
680
|
|
|
672
681
|
[[package]]
|
|
@@ -1087,14 +1096,14 @@ wheels = [
|
|
|
1087
1096
|
|
|
1088
1097
|
[[package]]
|
|
1089
1098
|
name = "mashumaro"
|
|
1090
|
-
version = "3.
|
|
1099
|
+
version = "3.20"
|
|
1091
1100
|
source = { registry = "https://pypi.org/simple" }
|
|
1092
1101
|
dependencies = [
|
|
1093
1102
|
{ name = "typing-extensions" },
|
|
1094
1103
|
]
|
|
1095
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1104
|
+
sdist = { url = "https://files.pythonhosted.org/packages/64/3d/0f1bf475109a816c2a31a8b424750911343f0bce304827a5255df167547e/mashumaro-3.20.tar.gz", hash = "sha256:af4573f14ae61be3fbc3a473158ddfc1420f345410385809fd782e0d79e9215c", size = 191643, upload-time = "2026-02-09T21:53:55.24Z" }
|
|
1096
1105
|
wheels = [
|
|
1097
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1106
|
+
{ url = "https://files.pythonhosted.org/packages/96/5a/4fed77781061647d3be98e2f235ef1869289dd839ca0451a8d50a30fcd5c/mashumaro-3.20-py3-none-any.whl", hash = "sha256:648bc326f64c55447988eab67d6bfe3b7958c0961c83590709b1f950f88f4a3c", size = 94942, upload-time = "2026-02-09T21:53:53.343Z" },
|
|
1098
1107
|
]
|
|
1099
1108
|
|
|
1100
1109
|
[[package]]
|
|
@@ -1341,11 +1350,11 @@ wheels = [
|
|
|
1341
1350
|
|
|
1342
1351
|
[[package]]
|
|
1343
1352
|
name = "platformdirs"
|
|
1344
|
-
version = "4.
|
|
1353
|
+
version = "4.9.1"
|
|
1345
1354
|
source = { registry = "https://pypi.org/simple" }
|
|
1346
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1355
|
+
sdist = { url = "https://files.pythonhosted.org/packages/6c/d5/763666321efaded11112de8b7a7f2273dd8d1e205168e73c334e54b0ab9a/platformdirs-4.9.1.tar.gz", hash = "sha256:f310f16e89c4e29117805d8328f7c10876eeff36c94eac879532812110f7d39f", size = 28392, upload-time = "2026-02-14T21:02:44.973Z" }
|
|
1347
1356
|
wheels = [
|
|
1348
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1357
|
+
{ url = "https://files.pythonhosted.org/packages/70/77/e8c95e95f1d4cdd88c90a96e31980df7e709e51059fac150046ad67fac63/platformdirs-4.9.1-py3-none-any.whl", hash = "sha256:61d8b967d34791c162d30d60737369cbbd77debad5b981c4bfda1842e71e0d66", size = 21307, upload-time = "2026-02-14T21:02:43.492Z" },
|
|
1349
1358
|
]
|
|
1350
1359
|
|
|
1351
1360
|
[[package]]
|
|
@@ -1758,9 +1767,9 @@ dev = [
|
|
|
1758
1767
|
{ name = "pytest-cov", specifier = "==7.0.0" },
|
|
1759
1768
|
{ name = "pytest-xdist", specifier = ">=3.8.0" },
|
|
1760
1769
|
{ name = "pyupgrade", specifier = "==3.21.2" },
|
|
1761
|
-
{ name = "ruff", specifier = "==0.15.
|
|
1770
|
+
{ name = "ruff", specifier = "==0.15.1" },
|
|
1762
1771
|
{ name = "safety", specifier = "==3.7.0" },
|
|
1763
|
-
{ name = "ty", specifier = "==0.0.
|
|
1772
|
+
{ name = "ty", specifier = "==0.0.17" },
|
|
1764
1773
|
{ name = "vulture", specifier = "==2.14" },
|
|
1765
1774
|
{ name = "yamllint", specifier = "==1.38.0" },
|
|
1766
1775
|
{ name = "zeroconf", specifier = ">=0.148.0" },
|
|
@@ -1989,27 +1998,27 @@ wheels = [
|
|
|
1989
1998
|
|
|
1990
1999
|
[[package]]
|
|
1991
2000
|
name = "ruff"
|
|
1992
|
-
version = "0.15.
|
|
1993
|
-
source = { registry = "https://pypi.org/simple" }
|
|
1994
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1995
|
-
wheels = [
|
|
1996
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1997
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1998
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1999
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2000
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2001
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2002
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2003
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2004
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2005
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2006
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2007
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2008
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2009
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2010
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2011
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2012
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2001
|
+
version = "0.15.1"
|
|
2002
|
+
source = { registry = "https://pypi.org/simple" }
|
|
2003
|
+
sdist = { url = "https://files.pythonhosted.org/packages/04/dc/4e6ac71b511b141cf626357a3946679abeba4cf67bc7cc5a17920f31e10d/ruff-0.15.1.tar.gz", hash = "sha256:c590fe13fb57c97141ae975c03a1aedb3d3156030cabd740d6ff0b0d601e203f", size = 4540855, upload-time = "2026-02-12T23:09:09.998Z" }
|
|
2004
|
+
wheels = [
|
|
2005
|
+
{ url = "https://files.pythonhosted.org/packages/23/bf/e6e4324238c17f9d9120a9d60aa99a7daaa21204c07fcd84e2ef03bb5fd1/ruff-0.15.1-py3-none-linux_armv6l.whl", hash = "sha256:b101ed7cf4615bda6ffe65bdb59f964e9f4a0d3f85cbf0e54f0ab76d7b90228a", size = 10367819, upload-time = "2026-02-12T23:09:03.598Z" },
|
|
2006
|
+
{ url = "https://files.pythonhosted.org/packages/b3/ea/c8f89d32e7912269d38c58f3649e453ac32c528f93bb7f4219258be2e7ed/ruff-0.15.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:939c995e9277e63ea632cc8d3fae17aa758526f49a9a850d2e7e758bfef46602", size = 10798618, upload-time = "2026-02-12T23:09:22.928Z" },
|
|
2007
|
+
{ url = "https://files.pythonhosted.org/packages/5e/0f/1d0d88bc862624247d82c20c10d4c0f6bb2f346559d8af281674cf327f15/ruff-0.15.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:1d83466455fdefe60b8d9c8df81d3c1bbb2115cede53549d3b522ce2bc703899", size = 10148518, upload-time = "2026-02-12T23:08:58.339Z" },
|
|
2008
|
+
{ url = "https://files.pythonhosted.org/packages/f5/c8/291c49cefaa4a9248e986256df2ade7add79388fe179e0691be06fae6f37/ruff-0.15.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9457e3c3291024866222b96108ab2d8265b477e5b1534c7ddb1810904858d16", size = 10518811, upload-time = "2026-02-12T23:09:31.865Z" },
|
|
2009
|
+
{ url = "https://files.pythonhosted.org/packages/c3/1a/f5707440e5ae43ffa5365cac8bbb91e9665f4a883f560893829cf16a606b/ruff-0.15.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92c92b003e9d4f7fbd33b1867bb15a1b785b1735069108dfc23821ba045b29bc", size = 10196169, upload-time = "2026-02-12T23:09:17.306Z" },
|
|
2010
|
+
{ url = "https://files.pythonhosted.org/packages/2a/ff/26ddc8c4da04c8fd3ee65a89c9fb99eaa5c30394269d424461467be2271f/ruff-0.15.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fe5c41ab43e3a06778844c586251eb5a510f67125427625f9eb2b9526535779", size = 10990491, upload-time = "2026-02-12T23:09:25.503Z" },
|
|
2011
|
+
{ url = "https://files.pythonhosted.org/packages/fc/00/50920cb385b89413f7cdb4bb9bc8fc59c1b0f30028d8bccc294189a54955/ruff-0.15.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66a6dd6df4d80dc382c6484f8ce1bcceb55c32e9f27a8b94c32f6c7331bf14fb", size = 11843280, upload-time = "2026-02-12T23:09:19.88Z" },
|
|
2012
|
+
{ url = "https://files.pythonhosted.org/packages/5d/6d/2f5cad8380caf5632a15460c323ae326f1e1a2b5b90a6ee7519017a017ca/ruff-0.15.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a4a42cbb8af0bda9bcd7606b064d7c0bc311a88d141d02f78920be6acb5aa83", size = 11274336, upload-time = "2026-02-12T23:09:14.907Z" },
|
|
2013
|
+
{ url = "https://files.pythonhosted.org/packages/a3/1d/5f56cae1d6c40b8a318513599b35ea4b075d7dc1cd1d04449578c29d1d75/ruff-0.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ab064052c31dddada35079901592dfba2e05f5b1e43af3954aafcbc1096a5b2", size = 11137288, upload-time = "2026-02-12T23:09:07.475Z" },
|
|
2014
|
+
{ url = "https://files.pythonhosted.org/packages/cd/20/6f8d7d8f768c93b0382b33b9306b3b999918816da46537d5a61635514635/ruff-0.15.1-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:5631c940fe9fe91f817a4c2ea4e81f47bee3ca4aa646134a24374f3c19ad9454", size = 11070681, upload-time = "2026-02-12T23:08:55.43Z" },
|
|
2015
|
+
{ url = "https://files.pythonhosted.org/packages/9a/67/d640ac76069f64cdea59dba02af2e00b1fa30e2103c7f8d049c0cff4cafd/ruff-0.15.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:68138a4ba184b4691ccdc39f7795c66b3c68160c586519e7e8444cf5a53e1b4c", size = 10486401, upload-time = "2026-02-12T23:09:27.927Z" },
|
|
2016
|
+
{ url = "https://files.pythonhosted.org/packages/65/3d/e1429f64a3ff89297497916b88c32a5cc88eeca7e9c787072d0e7f1d3e1e/ruff-0.15.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:518f9af03bfc33c03bdb4cb63fabc935341bb7f54af500f92ac309ecfbba6330", size = 10197452, upload-time = "2026-02-12T23:09:12.147Z" },
|
|
2017
|
+
{ url = "https://files.pythonhosted.org/packages/78/83/e2c3bade17dad63bf1e1c2ffaf11490603b760be149e1419b07049b36ef2/ruff-0.15.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:da79f4d6a826caaea95de0237a67e33b81e6ec2e25fc7e1993a4015dffca7c61", size = 10693900, upload-time = "2026-02-12T23:09:34.418Z" },
|
|
2018
|
+
{ url = "https://files.pythonhosted.org/packages/a1/27/fdc0e11a813e6338e0706e8b39bb7a1d61ea5b36873b351acee7e524a72a/ruff-0.15.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:3dd86dccb83cd7d4dcfac303ffc277e6048600dfc22e38158afa208e8bf94a1f", size = 11227302, upload-time = "2026-02-12T23:09:36.536Z" },
|
|
2019
|
+
{ url = "https://files.pythonhosted.org/packages/f6/58/ac864a75067dcbd3b95be5ab4eb2b601d7fbc3d3d736a27e391a4f92a5c1/ruff-0.15.1-py3-none-win32.whl", hash = "sha256:660975d9cb49b5d5278b12b03bb9951d554543a90b74ed5d366b20e2c57c2098", size = 10462555, upload-time = "2026-02-12T23:09:29.899Z" },
|
|
2020
|
+
{ url = "https://files.pythonhosted.org/packages/e0/5e/d4ccc8a27ecdb78116feac4935dfc39d1304536f4296168f91ed3ec00cd2/ruff-0.15.1-py3-none-win_amd64.whl", hash = "sha256:c820fef9dd5d4172a6570e5721704a96c6679b80cf7be41659ed439653f62336", size = 11599956, upload-time = "2026-02-12T23:09:01.157Z" },
|
|
2021
|
+
{ url = "https://files.pythonhosted.org/packages/2a/07/5bda6a85b220c64c65686bc85bd0bbb23b29c62b3a9f9433fa55f17cda93/ruff-0.15.1-py3-none-win_arm64.whl", hash = "sha256:5ff7d5f0f88567850f45081fac8f4ec212be8d0b963e385c3f7d0d2eb4899416", size = 10874604, upload-time = "2026-02-12T23:09:05.515Z" },
|
|
2013
2022
|
]
|
|
2014
2023
|
|
|
2015
2024
|
[[package]]
|
|
@@ -2146,41 +2155,41 @@ wheels = [
|
|
|
2146
2155
|
|
|
2147
2156
|
[[package]]
|
|
2148
2157
|
name = "ty"
|
|
2149
|
-
version = "0.0.
|
|
2158
|
+
version = "0.0.17"
|
|
2150
2159
|
source = { registry = "https://pypi.org/simple" }
|
|
2151
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
2160
|
+
sdist = { url = "https://files.pythonhosted.org/packages/66/c3/41ae6346443eedb65b96761abfab890a48ce2aa5a8a27af69c5c5d99064d/ty-0.0.17.tar.gz", hash = "sha256:847ed6c120913e280bf9b54d8eaa7a1049708acb8824ad234e71498e8ad09f97", size = 5167209, upload-time = "2026-02-13T13:26:36.835Z" }
|
|
2152
2161
|
wheels = [
|
|
2153
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2154
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2155
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2156
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2157
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2158
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2159
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2160
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2161
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2162
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2163
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2164
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2165
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2166
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2167
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2168
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2162
|
+
{ url = "https://files.pythonhosted.org/packages/c0/01/0ef15c22a1c54b0f728ceff3f62d478dbf8b0dcf8ff7b80b954f79584f3e/ty-0.0.17-py3-none-linux_armv6l.whl", hash = "sha256:64a9a16555cc8867d35c2647c2f1afbd3cae55f68fd95283a574d1bb04fe93e0", size = 10192793, upload-time = "2026-02-13T13:27:13.943Z" },
|
|
2163
|
+
{ url = "https://files.pythonhosted.org/packages/0f/2c/f4c322d9cded56edc016b1092c14b95cf58c8a33b4787316ea752bb9418e/ty-0.0.17-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:eb2dbd8acd5c5a55f4af0d479523e7c7265a88542efe73ed3d696eb1ba7b6454", size = 10051977, upload-time = "2026-02-13T13:26:57.741Z" },
|
|
2164
|
+
{ url = "https://files.pythonhosted.org/packages/4c/a5/43746c1ff81e784f5fc303afc61fe5bcd85d0fcf3ef65cb2cef78c7486c7/ty-0.0.17-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f18f5fd927bc628deb9ea2df40f06b5f79c5ccf355db732025a3e8e7152801f6", size = 9564639, upload-time = "2026-02-13T13:26:42.781Z" },
|
|
2165
|
+
{ url = "https://files.pythonhosted.org/packages/d6/b8/280b04e14a9c0474af574f929fba2398b5e1c123c1e7735893b4cd73d13c/ty-0.0.17-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5383814d1d7a5cc53b3b07661856bab04bb2aac7a677c8d33c55169acdaa83df", size = 10061204, upload-time = "2026-02-13T13:27:00.152Z" },
|
|
2166
|
+
{ url = "https://files.pythonhosted.org/packages/2a/d7/493e1607d8dfe48288d8a768a2adc38ee27ef50e57f0af41ff273987cda0/ty-0.0.17-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c20423b8744b484f93e7bf2ef8a9724bca2657873593f9f41d08bd9f83444c9", size = 10013116, upload-time = "2026-02-13T13:26:34.543Z" },
|
|
2167
|
+
{ url = "https://files.pythonhosted.org/packages/80/ef/22f3ed401520afac90dbdf1f9b8b7755d85b0d5c35c1cb35cf5bd11b59c2/ty-0.0.17-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6f5b1aba97db9af86517b911674b02f5bc310750485dc47603a105bd0e83ddd", size = 10533623, upload-time = "2026-02-13T13:26:31.449Z" },
|
|
2168
|
+
{ url = "https://files.pythonhosted.org/packages/75/ce/744b15279a11ac7138832e3a55595706b4a8a209c9f878e3ab8e571d9032/ty-0.0.17-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:488bce1a9bea80b851a97cd34c4d2ffcd69593d6c3f54a72ae02e5c6e47f3d0c", size = 11069750, upload-time = "2026-02-13T13:26:48.638Z" },
|
|
2169
|
+
{ url = "https://files.pythonhosted.org/packages/f2/be/1133c91f15a0e00d466c24f80df486d630d95d1b2af63296941f7473812f/ty-0.0.17-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8df66b91ec84239420985ec215e7f7549bfda2ac036a3b3c065f119d1c06825a", size = 10870862, upload-time = "2026-02-13T13:26:54.715Z" },
|
|
2170
|
+
{ url = "https://files.pythonhosted.org/packages/3e/4a/a2ed209ef215b62b2d3246e07e833081e07d913adf7e0448fc204be443d6/ty-0.0.17-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:002139e807c53002790dfefe6e2f45ab0e04012e76db3d7c8286f96ec121af8f", size = 10628118, upload-time = "2026-02-13T13:26:45.439Z" },
|
|
2171
|
+
{ url = "https://files.pythonhosted.org/packages/b3/0c/87476004cb5228e9719b98afffad82c3ef1f84334bde8527bcacba7b18cb/ty-0.0.17-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6c4e01f05ce82e5d489ab3900ca0899a56c4ccb52659453780c83e5b19e2b64c", size = 10038185, upload-time = "2026-02-13T13:27:02.693Z" },
|
|
2172
|
+
{ url = "https://files.pythonhosted.org/packages/46/4b/98f0b3ba9aef53c1f0305519536967a4aa793a69ed72677b0a625c5313ac/ty-0.0.17-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2b226dd1e99c0d2152d218c7e440150d1a47ce3c431871f0efa073bbf899e881", size = 10047644, upload-time = "2026-02-13T13:27:05.474Z" },
|
|
2173
|
+
{ url = "https://files.pythonhosted.org/packages/93/e0/06737bb80aa1a9103b8651d2eb691a7e53f1ed54111152be25f4a02745db/ty-0.0.17-py3-none-musllinux_1_2_i686.whl", hash = "sha256:8b11f1da7859e0ad69e84b3c5ef9a7b055ceed376a432fad44231bdfc48061c2", size = 10231140, upload-time = "2026-02-13T13:27:10.844Z" },
|
|
2174
|
+
{ url = "https://files.pythonhosted.org/packages/7c/79/e2a606bd8852383ba9abfdd578f4a227bd18504145381a10a5f886b4e751/ty-0.0.17-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:c04e196809ff570559054d3e011425fd7c04161529eb551b3625654e5f2434cb", size = 10718344, upload-time = "2026-02-13T13:26:51.66Z" },
|
|
2175
|
+
{ url = "https://files.pythonhosted.org/packages/c5/2d/2663984ac11de6d78f74432b8b14ba64d170b45194312852b7543cf7fd56/ty-0.0.17-py3-none-win32.whl", hash = "sha256:305b6ed150b2740d00a817b193373d21f0767e10f94ac47abfc3b2e5a5aec809", size = 9672932, upload-time = "2026-02-13T13:27:08.522Z" },
|
|
2176
|
+
{ url = "https://files.pythonhosted.org/packages/de/b5/39be78f30b31ee9f5a585969930c7248354db90494ff5e3d0756560fb731/ty-0.0.17-py3-none-win_amd64.whl", hash = "sha256:531828267527aee7a63e972f54e5eee21d9281b72baf18e5c2850c6b862add83", size = 10542138, upload-time = "2026-02-13T13:27:17.084Z" },
|
|
2177
|
+
{ url = "https://files.pythonhosted.org/packages/40/b7/f875c729c5d0079640c75bad2c7e5d43edc90f16ba242f28a11966df8f65/ty-0.0.17-py3-none-win_arm64.whl", hash = "sha256:de9810234c0c8d75073457e10a84825b9cd72e6629826b7f01c7a0b266ae25b1", size = 10023068, upload-time = "2026-02-13T13:26:39.637Z" },
|
|
2169
2178
|
]
|
|
2170
2179
|
|
|
2171
2180
|
[[package]]
|
|
2172
2181
|
name = "typer"
|
|
2173
|
-
version = "0.
|
|
2182
|
+
version = "0.23.1"
|
|
2174
2183
|
source = { registry = "https://pypi.org/simple" }
|
|
2175
2184
|
dependencies = [
|
|
2185
|
+
{ name = "annotated-doc" },
|
|
2176
2186
|
{ name = "click" },
|
|
2177
2187
|
{ name = "rich" },
|
|
2178
2188
|
{ name = "shellingham" },
|
|
2179
|
-
{ name = "typing-extensions" },
|
|
2180
2189
|
]
|
|
2181
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
2190
|
+
sdist = { url = "https://files.pythonhosted.org/packages/fd/07/b822e1b307d40e263e8253d2384cf98c51aa2368cc7ba9a07e523a1d964b/typer-0.23.1.tar.gz", hash = "sha256:2070374e4d31c83e7b61362fd859aa683576432fd5b026b060ad6b4cd3b86134", size = 120047, upload-time = "2026-02-13T10:04:30.984Z" }
|
|
2182
2191
|
wheels = [
|
|
2183
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2192
|
+
{ url = "https://files.pythonhosted.org/packages/d5/91/9b286ab899c008c2cb05e8be99814807e7fbbd33f0c0c960470826e5ac82/typer-0.23.1-py3-none-any.whl", hash = "sha256:3291ad0d3c701cbf522012faccfbb29352ff16ad262db2139e6b01f15781f14e", size = 56813, upload-time = "2026-02-13T10:04:32.008Z" },
|
|
2184
2193
|
]
|
|
2185
2194
|
|
|
2186
2195
|
[[package]]
|
|
@@ -2227,27 +2236,27 @@ wheels = [
|
|
|
2227
2236
|
|
|
2228
2237
|
[[package]]
|
|
2229
2238
|
name = "uv"
|
|
2230
|
-
version = "0.10.
|
|
2231
|
-
source = { registry = "https://pypi.org/simple" }
|
|
2232
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
2233
|
-
wheels = [
|
|
2234
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2235
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2236
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2237
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2238
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2239
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2240
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2241
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2242
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2243
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2244
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2245
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2246
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2247
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2248
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2249
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2250
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2239
|
+
version = "0.10.2"
|
|
2240
|
+
source = { registry = "https://pypi.org/simple" }
|
|
2241
|
+
sdist = { url = "https://files.pythonhosted.org/packages/0d/9a/fe74aa0127cdc26141364e07abf25e5d69b4bf9788758fad9cfecca637aa/uv-0.10.2.tar.gz", hash = "sha256:b5016f038e191cc9ef00e17be802f44363d1b1cc3ef3454d1d76839a4246c10a", size = 3858864, upload-time = "2026-02-10T19:17:51.609Z" }
|
|
2242
|
+
wheels = [
|
|
2243
|
+
{ url = "https://files.pythonhosted.org/packages/ec/b5/aea88f66284d220be56ef748ed5e1bd11d819be14656a38631f4b55bfd48/uv-0.10.2-py3-none-linux_armv6l.whl", hash = "sha256:69e35aa3e91a245b015365e5e6ca383ecf72a07280c6d00c17c9173f2d3b68ab", size = 22215714, upload-time = "2026-02-10T19:17:34.281Z" },
|
|
2244
|
+
{ url = "https://files.pythonhosted.org/packages/7f/72/947ba7737ae6cd50de61d268781b9e7717caa3b07e18238ffd547f9fc728/uv-0.10.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0b7eef95c36fe92e7aac399c0dce555474432cbfeaaa23975ed83a63923f78fd", size = 21276485, upload-time = "2026-02-10T19:18:15.415Z" },
|
|
2245
|
+
{ url = "https://files.pythonhosted.org/packages/d3/38/5c3462b927a93be4ccaaa25138926a5fb6c9e1b72884efd7af77e451d82e/uv-0.10.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:acc08e420abab21de987151059991e3f04bc7f4044d94ca58b5dd547995b4843", size = 20048620, upload-time = "2026-02-10T19:17:26.481Z" },
|
|
2246
|
+
{ url = "https://files.pythonhosted.org/packages/03/51/d4509b0f5b7740c1af82202e9c69b700d5848b8bd0faa25229e8edd2c19c/uv-0.10.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:aefbcd749ab2ad48bb533ec028607607f7b03be11c83ea152dbb847226cd6285", size = 21870454, upload-time = "2026-02-10T19:17:21.838Z" },
|
|
2247
|
+
{ url = "https://files.pythonhosted.org/packages/cd/7e/2bcbafcb424bb885817a7e58e6eec9314c190c55935daaafab1858bb82cd/uv-0.10.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:fad554c38d9988409ceddfac69a465e6e5f925a8b689e7606a395c20bb4d1d78", size = 21839508, upload-time = "2026-02-10T19:17:59.211Z" },
|
|
2248
|
+
{ url = "https://files.pythonhosted.org/packages/60/08/16df2c1f8ad121a595316b82f6e381447e8974265b2239c9135eb874f33b/uv-0.10.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6dd2dc41043e92b3316d7124a7bf48c2affe7117c93079419146f083df71933c", size = 21841283, upload-time = "2026-02-10T19:17:41.419Z" },
|
|
2249
|
+
{ url = "https://files.pythonhosted.org/packages/76/27/a869fec4c03af5e43db700fabe208d8ee8dbd56e0ff568ba792788d505cd/uv-0.10.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111c05182c5630ac523764e0ec2e58d7b54eb149dbe517b578993a13c2f71aff", size = 23111967, upload-time = "2026-02-10T19:18:11.764Z" },
|
|
2250
|
+
{ url = "https://files.pythonhosted.org/packages/2a/4a/fb38515d966acfbd80179e626985aab627898ffd02c70205850d6eb44df1/uv-0.10.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45c3deaba0343fd27ab5385d6b7cde0765df1a15389ee7978b14a51c32895662", size = 23911019, upload-time = "2026-02-10T19:18:26.947Z" },
|
|
2251
|
+
{ url = "https://files.pythonhosted.org/packages/dd/5f/51bcbb490ddb1dcb06d767f0bde649ad2826686b9e30efa57f8ab2750a1d/uv-0.10.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bb2cac4f3be60b64a23d9f035019c30a004d378b563c94f60525c9591665a56b", size = 23030217, upload-time = "2026-02-10T19:17:37.789Z" },
|
|
2252
|
+
{ url = "https://files.pythonhosted.org/packages/46/69/144f6db851d49aa6f25b040dc5c8c684b8f92df9e8d452c7abc619c6ec23/uv-0.10.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937687df0380d636ceafcb728cf6357f0432588e721892128985417b283c3b54", size = 23036452, upload-time = "2026-02-10T19:18:18.97Z" },
|
|
2253
|
+
{ url = "https://files.pythonhosted.org/packages/66/29/3c7c4559c9310ed478e3d6c585ee0aad2852dc4d5fb14f4d92a2a12d1728/uv-0.10.2-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:f90bca8703ae66bccfcfb7313b4b697a496c4d3df662f4a1a2696a6320c47598", size = 21941903, upload-time = "2026-02-10T19:17:30.575Z" },
|
|
2254
|
+
{ url = "https://files.pythonhosted.org/packages/9a/5a/42883b5ef2ef0b1bc5b70a1da12a6854a929ff824aa8eb1a5571fb27a39b/uv-0.10.2-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:cca026c2e584788e1264879a123bf499dd8f169b9cafac4a2065a416e09d3823", size = 22651571, upload-time = "2026-02-10T19:18:22.74Z" },
|
|
2255
|
+
{ url = "https://files.pythonhosted.org/packages/e8/b8/e4f1dda1b3b0cc6c8ac06952bfe7bc28893ff016fb87651c8fafc6dfca96/uv-0.10.2-py3-none-musllinux_1_1_i686.whl", hash = "sha256:9f878837938103ee1307ed3ed5d9228118e3932816ab0deb451e7e16dc8ce82a", size = 22321279, upload-time = "2026-02-10T19:17:49.402Z" },
|
|
2256
|
+
{ url = "https://files.pythonhosted.org/packages/2c/4b/baa16d46469e024846fc1a8aa0cfa63f1f89ad0fd3eaa985359a168c3fb0/uv-0.10.2-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:6ec75cfe638b316b329474aa798c3988e5946ead4d9e977fe4dc6fc2ea3e0b8b", size = 23252208, upload-time = "2026-02-10T19:17:54.46Z" },
|
|
2257
|
+
{ url = "https://files.pythonhosted.org/packages/d6/84/6a74e5ec2ee90e4314905e6d1d1708d473e06405e492ec38868b42645388/uv-0.10.2-py3-none-win32.whl", hash = "sha256:f7f3c7e09bf53b81f55730a67dd86299158f470dffb2bd279b6432feb198d231", size = 21118543, upload-time = "2026-02-10T19:18:07.296Z" },
|
|
2258
|
+
{ url = "https://files.pythonhosted.org/packages/dd/f9/e5cc6cf3a578b87004e857274df97d3cdecd8e19e965869b9b67c094c20c/uv-0.10.2-py3-none-win_amd64.whl", hash = "sha256:7b3685aa1da15acbe080b4cba8684afbb6baf11c9b04d4d4b347cc18b7b9cfa0", size = 23620790, upload-time = "2026-02-10T19:17:45.204Z" },
|
|
2259
|
+
{ url = "https://files.pythonhosted.org/packages/df/7a/99979dc08ae6a65f4f7a44c5066699016c6eecdc4e695b7512c2efb53378/uv-0.10.2-py3-none-win_arm64.whl", hash = "sha256:abdd5b3c6b871b17bf852a90346eb7af881345706554fd082346b000a9393afd", size = 22035199, upload-time = "2026-02-10T19:18:03.679Z" },
|
|
2251
2260
|
]
|
|
2252
2261
|
|
|
2253
2262
|
[[package]]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|