python-omnilogic-local 0.20.6__tar.gz → 0.20.7__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_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/PKG-INFO +4 -4
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/README.md +3 -3
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/api/protocol.py +6 -1
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/omnilogic.py +11 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyproject.toml +2 -2
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/LICENSE +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/__init__.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/_base.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/api/__init__.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/api/api.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/api/constants.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/api/exceptions.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/backyard.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/bow.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/chlorinator.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/chlorinator_equip.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/__init__.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/cli.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/debug/__init__.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/debug/commands.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/__init__.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/backyard.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/bows.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/chlorinators.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/commands.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/csads.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/filters.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/groups.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/heaters.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/lights.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/pumps.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/relays.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/schedules.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/sensors.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/valves.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/pcap_utils.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/utils.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/collections.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/colorlogiclight.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/csad.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/csad_equip.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/decorators.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/filter.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/groups.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/heater.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/heater_equip.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/models/__init__.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/models/const.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/models/exceptions.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/models/filter_diagnostics.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/models/leadmessage.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/models/mspconfig.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/models/telemetry.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/omnitypes.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/pump.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/py.typed +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/relay.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/schedule.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/sensor.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/system.py +0 -0
- {python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/util.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-omnilogic-local
|
|
3
|
-
Version: 0.20.
|
|
3
|
+
Version: 0.20.7
|
|
4
4
|
Summary: A library for local control of Hayward OmniHub/OmniLogic pool controllers using their local API
|
|
5
5
|
Author: Chris Jowett, djtimca, garionphx
|
|
6
6
|
Author-email: Chris Jowett <421501+cryptk@users.noreply.github.com>
|
|
@@ -20,9 +20,9 @@ Description-Content-Type: text/markdown
|
|
|
20
20
|
# Python OmniLogic Local
|
|
21
21
|
|
|
22
22
|
[](https://pypi.org/project/python-omnilogic-local/)
|
|
23
|
-
|
|
24
|
-
[
|
|
24
|
+
[](https://github.com/cryptk/python-omnilogic-local/actions)
|
|
25
|
+
[](LICENSE)
|
|
26
26
|
[](https://www.buymeacoffee.com/cryptk)
|
|
27
27
|
|
|
28
28
|
**A modern Python library for local control of Hayward OmniLogic and OmniHub pool controllers**
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
# Python OmniLogic Local
|
|
4
4
|
|
|
5
5
|
[](https://pypi.org/project/python-omnilogic-local/)
|
|
6
|
-
|
|
7
|
-
[
|
|
7
|
+
[](https://github.com/cryptk/python-omnilogic-local/actions)
|
|
8
|
+
[](LICENSE)
|
|
9
9
|
[](https://www.buymeacoffee.com/cryptk)
|
|
10
10
|
|
|
11
11
|
**A modern Python library for local control of Hayward OmniLogic and OmniHub pool controllers**
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/api/protocol.py
RENAMED
|
@@ -229,7 +229,12 @@ class OmniLogicProtocol(asyncio.DatagramProtocol):
|
|
|
229
229
|
# Wait for either a message or an error
|
|
230
230
|
data_task = asyncio.create_task(self.data_queue.get())
|
|
231
231
|
error_task = asyncio.create_task(self.error_queue.get())
|
|
232
|
-
done,
|
|
232
|
+
done, pending = await asyncio.wait([data_task, error_task], return_when=asyncio.FIRST_COMPLETED)
|
|
233
|
+
|
|
234
|
+
# Cancel any pending tasks to avoid "Task was destroyed but it is pending" warnings
|
|
235
|
+
for task in pending:
|
|
236
|
+
task.cancel()
|
|
237
|
+
|
|
233
238
|
if error_task in done:
|
|
234
239
|
exc = error_task.result()
|
|
235
240
|
if isinstance(exc, Exception):
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/omnilogic.py
RENAMED
|
@@ -15,6 +15,7 @@ from pyomnilogic_local.system import System
|
|
|
15
15
|
|
|
16
16
|
if TYPE_CHECKING:
|
|
17
17
|
from pyomnilogic_local._base import OmniEquipment
|
|
18
|
+
from pyomnilogic_local.bow import Bow
|
|
18
19
|
from pyomnilogic_local.chlorinator import Chlorinator
|
|
19
20
|
from pyomnilogic_local.chlorinator_equip import ChlorinatorEquipment
|
|
20
21
|
from pyomnilogic_local.colorlogiclight import ColorLogicLight
|
|
@@ -260,6 +261,12 @@ class OmniLogic:
|
|
|
260
261
|
csads.extend(bow.csads.values())
|
|
261
262
|
return EquipmentDict(csads)
|
|
262
263
|
|
|
264
|
+
@property
|
|
265
|
+
def all_bows(self) -> EquipmentDict[Bow]:
|
|
266
|
+
"""Returns all Bow instances across all bows in the backyard."""
|
|
267
|
+
# Bows are stored directly in backyard as EquipmentDict already
|
|
268
|
+
return self.backyard.bow
|
|
269
|
+
|
|
263
270
|
# Equipment search methods
|
|
264
271
|
def get_equipment_by_name(self, name: str) -> OmniEquipment[Any, Any] | None:
|
|
265
272
|
"""Find equipment by name across all equipment types.
|
|
@@ -272,6 +279,7 @@ class OmniLogic:
|
|
|
272
279
|
"""
|
|
273
280
|
# Search all equipment types
|
|
274
281
|
all_equipment: list[OmniEquipment[Any, Any]] = []
|
|
282
|
+
all_equipment.extend([self.backyard])
|
|
275
283
|
all_equipment.extend(self.all_lights.values())
|
|
276
284
|
all_equipment.extend(self.all_relays.values())
|
|
277
285
|
all_equipment.extend(self.all_pumps.values())
|
|
@@ -283,6 +291,7 @@ class OmniLogic:
|
|
|
283
291
|
all_equipment.extend(self.all_chlorinator_equipment.values())
|
|
284
292
|
all_equipment.extend(self.all_csads.values())
|
|
285
293
|
all_equipment.extend(self.all_csad_equipment.values())
|
|
294
|
+
all_equipment.extend(self.all_bows.values())
|
|
286
295
|
all_equipment.extend(self.groups.values())
|
|
287
296
|
|
|
288
297
|
for equipment in all_equipment:
|
|
@@ -302,6 +311,7 @@ class OmniLogic:
|
|
|
302
311
|
"""
|
|
303
312
|
# Search all equipment types
|
|
304
313
|
all_equipment: list[OmniEquipment[Any, Any]] = []
|
|
314
|
+
all_equipment.extend([self.backyard])
|
|
305
315
|
all_equipment.extend(self.all_lights.values())
|
|
306
316
|
all_equipment.extend(self.all_relays.values())
|
|
307
317
|
all_equipment.extend(self.all_pumps.values())
|
|
@@ -313,6 +323,7 @@ class OmniLogic:
|
|
|
313
323
|
all_equipment.extend(self.all_chlorinator_equipment.values())
|
|
314
324
|
all_equipment.extend(self.all_csads.values())
|
|
315
325
|
all_equipment.extend(self.all_csad_equipment.values())
|
|
326
|
+
all_equipment.extend(self.all_bows.values())
|
|
316
327
|
all_equipment.extend(self.groups.values())
|
|
317
328
|
all_equipment.extend(self.schedules.values())
|
|
318
329
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "python-omnilogic-local"
|
|
3
|
-
version = "0.20.
|
|
3
|
+
version = "0.20.7"
|
|
4
4
|
description = "A library for local control of Hayward OmniHub/OmniLogic pool controllers using their local API"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.13,<4.0.0"
|
|
@@ -47,7 +47,7 @@ python_version = "3.13"
|
|
|
47
47
|
plugins = [
|
|
48
48
|
"pydantic.mypy"
|
|
49
49
|
]
|
|
50
|
-
follow_imports = "silent"
|
|
50
|
+
# follow_imports = "silent"
|
|
51
51
|
strict = true
|
|
52
52
|
ignore_missing_imports = true
|
|
53
53
|
disallow_subclassing_any = false
|
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/api/__init__.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/api/api.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/api/constants.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/api/exceptions.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/backyard.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/chlorinator.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/__init__.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/cli.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/bows.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/csads.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/filters.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/groups.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/heaters.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/lights.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/pumps.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/relays.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/sensors.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/get/valves.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/pcap_utils.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/cli/utils.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/collections.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/colorlogiclight.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/csad_equip.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/decorators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/heater_equip.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/models/__init__.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/models/const.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/omnitypes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.6 → python_omnilogic_local-0.20.7}/pyomnilogic_local/schedule.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|