PyPlumIO 0.5.46__py3-none-any.whl → 0.5.47__py3-none-any.whl

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.
pyplumio/_version.py CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.5.46'
21
- __version_tuple__ = version_tuple = (0, 5, 46)
20
+ __version__ = version = '0.5.47'
21
+ __version_tuple__ = version_tuple = (0, 5, 47)
@@ -39,7 +39,11 @@ def get_device_handler(device_type: int) -> str:
39
39
 
40
40
  type_name = to_camelcase(
41
41
  DeviceType(device_type).name,
42
- overrides={"ecomax": "EcoMAX", "ecoster": "EcoSTER"},
42
+ overrides={
43
+ "ecomax": "EcoMAX",
44
+ "ecoster": "EcoSTER",
45
+ "econet": "EcoNET",
46
+ },
43
47
  )
44
48
  return f"devices.{type_name.lower()}.{type_name}"
45
49
 
@@ -8,11 +8,14 @@ import logging
8
8
  from types import ModuleType
9
9
  from typing import Any, TypeVar
10
10
 
11
+ from pyplumio.helpers.async_cache import acache
12
+
11
13
  _LOGGER = logging.getLogger(__name__)
12
14
 
13
15
  T = TypeVar("T")
14
16
 
15
17
 
18
+ @acache
16
19
  async def import_module(name: str) -> ModuleType:
17
20
  """Import module by name."""
18
21
  loop = asyncio.get_running_loop()
@@ -15,13 +15,14 @@ from pyplumio.structures.schedules import collect_schedule_data
15
15
 
16
16
  TIME_FORMAT: Final = "%H:%M"
17
17
 
18
- MIDNIGHT: Final = "00:00"
18
+
19
+ Time = Annotated[str, "Time string in %H:%M format"]
20
+
21
+ MIDNIGHT: Final = Time("00:00")
19
22
  MIDNIGHT_DT = dt.datetime.strptime(MIDNIGHT, TIME_FORMAT)
20
23
 
21
24
  STEP = dt.timedelta(minutes=30)
22
25
 
23
- Time = Annotated[str, "Time string in %H:%M format"]
24
-
25
26
 
26
27
  def get_time(
27
28
  index: int, start: dt.datetime = MIDNIGHT_DT, step: dt.timedelta = STEP
@@ -23,6 +23,7 @@ def timeout(
23
23
  async def wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
24
24
  return await asyncio.wait_for(func(*args, **kwargs), timeout=seconds)
25
25
 
26
+ setattr(wrapper, "_has_timeout_seconds", seconds)
26
27
  return wrapper
27
28
 
28
29
  return decorator
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyPlumIO
3
- Version: 0.5.46
3
+ Version: 0.5.47
4
4
  Summary: PyPlumIO is a native ecoNET library for Plum ecoMAX controllers.
5
5
  Author-email: Denis Paavilainen <denpa@denpa.pro>
6
6
  License: MIT License
@@ -35,7 +35,7 @@ Requires-Dist: numpy<3.0.0,>=2.0.0; extra == "test"
35
35
  Requires-Dist: pyserial-asyncio-fast==0.16; extra == "test"
36
36
  Requires-Dist: pytest==8.3.5; extra == "test"
37
37
  Requires-Dist: pytest-asyncio==0.26.0; extra == "test"
38
- Requires-Dist: ruff==0.11.7; extra == "test"
38
+ Requires-Dist: ruff==0.11.8; extra == "test"
39
39
  Requires-Dist: tox==4.25.0; extra == "test"
40
40
  Requires-Dist: types-pyserial==3.5.0.20250326; extra == "test"
41
41
  Provides-Extra: docs
@@ -1,6 +1,6 @@
1
1
  pyplumio/__init__.py,sha256=3H5SO4WFw5mBTFeEyD4w0H8-MsNo93NyOH3RyMN7IS0,3337
2
2
  pyplumio/__main__.py,sha256=3IwHHSq-iay5FaeMc95klobe-xv82yydSKcBE7BFZ6M,500
3
- pyplumio/_version.py,sha256=SpeD_oWDl9ilOk9KIMLiK5YpRdtDAJ7YkARdOAn_1y0,513
3
+ pyplumio/_version.py,sha256=tpJ3MabeNP2gyG46GJo9SxcUsTxxCYTWOLGwuYR8gLk,513
4
4
  pyplumio/connection.py,sha256=9MCPb8W62uqCrzd1YCROcn9cCjRY8E65934FnJDF5Js,5902
5
5
  pyplumio/const.py,sha256=FxF97bl_GunYuB8Wo72zCzHtznRCM64ygC2qfaR3UyA,5684
6
6
  pyplumio/data_types.py,sha256=r-QOIZiIpBFo4kRongyu8n0BHTaEU6wWMTmNkWBNjq8,9223
@@ -10,7 +10,7 @@ pyplumio/protocol.py,sha256=UnrXDouo4dDi7hqwJYHoEAvCoYJs3PgP1DFBBwRqBrw,8427
10
10
  pyplumio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  pyplumio/stream.py,sha256=iCB-XlNXRRE0p7nstb1AkXwVDwcCsgym_ggB_IDiJc8,4926
12
12
  pyplumio/utils.py,sha256=D6_SJzYkFjXoUrlNPt_mIQAP8hjMU05RsTqlAFphj3Y,1205
13
- pyplumio/devices/__init__.py,sha256=o2gkAPaOpTzufTXMyNuYC1xWSKtx0j22n89G1JxK9gA,7932
13
+ pyplumio/devices/__init__.py,sha256=bYewj3QFU6SV1eOMtgTy9f9a20Tr4kp6bTerE_URB84,7999
14
14
  pyplumio/devices/ecomax.py,sha256=Qm2oIXVfWW1Mry3qGhrnAA150Z_jHMJrLbdgfqs9A3A,16200
15
15
  pyplumio/devices/ecoster.py,sha256=X46ky5XT8jHMFq9sBW0ve8ZI_tjItQDMt4moXsW-ogY,307
16
16
  pyplumio/devices/mixer.py,sha256=cuqhWcIeGgHNIVqmRm-NyvaRb-ltGY5YZXrQN81xKP0,2744
@@ -22,10 +22,10 @@ pyplumio/frames/responses.py,sha256=M6Ky4gg2AoShmRXX0x6nftajxrvmQLKPVRWbwyhvI0E,
22
22
  pyplumio/helpers/__init__.py,sha256=H2xxdkF-9uADLwEbfBUoxNTdwru3L5Z2cfJjgsuRsn0,31
23
23
  pyplumio/helpers/async_cache.py,sha256=TlxpL4P3IZEobS4KyP86cEtqZghKtPWmVj57n5FpvTQ,1259
24
24
  pyplumio/helpers/event_manager.py,sha256=aKNlhsPNTy3eOSfWVb9TJxtIsN9GAQv9XxhOi_BOhlM,8097
25
- pyplumio/helpers/factory.py,sha256=AUPnTLDAPL8uq-fxn7ndMs_mOrocEo6keQjDk4Ig1ko,1156
26
- pyplumio/helpers/schedule.py,sha256=4XdijJBnhsfsj3l2hiKsrLA_a6oxTzg67ZnjG2IJlB0,5301
25
+ pyplumio/helpers/factory.py,sha256=XMfSfz4LzdUKHq80e2bH9oGgE9aT01643yt3r7Fjd4U,1213
26
+ pyplumio/helpers/schedule.py,sha256=ODNfMuqRZuFnnFxzFFvbE0sSQ6sxp4EUyxPMDBym-L0,5308
27
27
  pyplumio/helpers/task_manager.py,sha256=N71F6Ag1HHxdf5zJeCMcEziFdH9lmJKtMPoRGjJ-E40,1209
28
- pyplumio/helpers/timeout.py,sha256=ZTWMhgk5lOUNsR-qqNxUOif5rDHH1eOMAvRTngb1QH4,745
28
+ pyplumio/helpers/timeout.py,sha256=2wAcOug-2TgdCchKbfv0VhAfNzP-MPM0TEFtRNFJ_m8,803
29
29
  pyplumio/helpers/uid.py,sha256=HeM5Zmd0qfNmVya6RKE-bBYzdxG-pAiViOZRHqw33VU,1011
30
30
  pyplumio/parameters/__init__.py,sha256=kEDaPqJLRemc6puIGThmjfAbdt86oZnXIUE34scXG5Q,16603
31
31
  pyplumio/parameters/ecomax.py,sha256=MfjiXYW_MoEPMPdmeeZi2Wb8tNhZKTHXYxSBCQNYf9g,27606
@@ -57,8 +57,8 @@ pyplumio/structures/statuses.py,sha256=1h-EUw1UtuS44E19cNOSavUgZeAxsLgX3iS0eVC8p
57
57
  pyplumio/structures/temperatures.py,sha256=2VD3P_vwp9PEBkOn2-WhifOR8w-UYNq35aAxle0z2Vg,2831
58
58
  pyplumio/structures/thermostat_parameters.py,sha256=st3x3HkjQm3hqBrn_fpvPDQu8fuc-Sx33ONB19ViQak,3007
59
59
  pyplumio/structures/thermostat_sensors.py,sha256=rO9jTZWGQpThtJqVdbbv8sYMYHxJi4MfwZQza69L2zw,3399
60
- pyplumio-0.5.46.dist-info/licenses/LICENSE,sha256=m-UuZFjXJ22uPTGm9kSHS8bqjsf5T8k2wL9bJn1Y04o,1088
61
- pyplumio-0.5.46.dist-info/METADATA,sha256=WflfGHdBYou1j9zKrqFtcRg_NJz4I7lR3DUD3KiVf_0,5611
62
- pyplumio-0.5.46.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
63
- pyplumio-0.5.46.dist-info/top_level.txt,sha256=kNBz9UPPkPD9teDn3U_sEy5LjzwLm9KfADCXtBlbw8A,9
64
- pyplumio-0.5.46.dist-info/RECORD,,
60
+ pyplumio-0.5.47.dist-info/licenses/LICENSE,sha256=m-UuZFjXJ22uPTGm9kSHS8bqjsf5T8k2wL9bJn1Y04o,1088
61
+ pyplumio-0.5.47.dist-info/METADATA,sha256=JlJrg9WaZZR--e6JbaTZpbfOnkqx_IC_HtwRmeGRzs0,5611
62
+ pyplumio-0.5.47.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
63
+ pyplumio-0.5.47.dist-info/top_level.txt,sha256=kNBz9UPPkPD9teDn3U_sEy5LjzwLm9KfADCXtBlbw8A,9
64
+ pyplumio-0.5.47.dist-info/RECORD,,