violet-poolController-api 0.0.18__tar.gz → 0.0.20__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.
- {violet_poolcontroller_api-0.0.18/violet_poolController_api.egg-info → violet_poolcontroller_api-0.0.20}/PKG-INFO +1 -1
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/pyproject.toml +3 -3
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/setup.py +1 -1
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/tests/test_api.py +3 -3
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20/violet_poolController_api.egg-info}/PKG-INFO +1 -1
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/violet_poolcontroller_api/api.py +3 -3
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/violet_poolcontroller_api/const_devices.py +7 -7
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/LICENSE +0 -0
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/README.md +0 -0
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/setup.cfg +0 -0
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/tests/__init__.py +0 -0
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/violet_poolController_api.egg-info/SOURCES.txt +0 -0
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/violet_poolController_api.egg-info/dependency_links.txt +0 -0
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/violet_poolController_api.egg-info/requires.txt +0 -0
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/violet_poolController_api.egg-info/top_level.txt +0 -0
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/violet_poolcontroller_api/__init__.py +0 -0
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/violet_poolcontroller_api/circuit_breaker.py +0 -0
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/violet_poolcontroller_api/const_api.py +0 -0
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/violet_poolcontroller_api/utils_rate_limiter.py +0 -0
- {violet_poolcontroller_api-0.0.18 → violet_poolcontroller_api-0.0.20}/violet_poolcontroller_api/utils_sanitizer.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "violet-poolController-api"
|
|
7
|
-
version = "0.0.
|
|
7
|
+
version = "0.0.20"
|
|
8
8
|
authors = [
|
|
9
9
|
{ name="Basti (Xerolux)", email="git@xerolux.de" },
|
|
10
10
|
]
|
|
@@ -45,13 +45,13 @@ asyncio_mode = "auto"
|
|
|
45
45
|
|
|
46
46
|
[tool.ruff]
|
|
47
47
|
line-length = 100
|
|
48
|
-
target-version = "0.0.
|
|
48
|
+
target-version = "0.0.20"
|
|
49
49
|
|
|
50
50
|
[tool.ruff.lint]
|
|
51
51
|
select = ["E", "F", "W", "I", "UP"]
|
|
52
52
|
ignore = ["E501"]
|
|
53
53
|
|
|
54
54
|
[tool.mypy]
|
|
55
|
-
python_version = "0.0.
|
|
55
|
+
python_version = "0.0.20"
|
|
56
56
|
warn_return_any = true
|
|
57
57
|
warn_unused_configs = true
|
|
@@ -214,12 +214,12 @@ async def test_set_config_sanitizes_payload_before_request(
|
|
|
214
214
|
api_client: VioletPoolAPI,
|
|
215
215
|
monkeypatch: pytest.Monkeypatch,
|
|
216
216
|
) -> None:
|
|
217
|
-
"""Test set_config applies sanitizer before sending
|
|
217
|
+
"""Test set_config applies sanitizer before sending form-encoded payload."""
|
|
218
218
|
captured: dict[str, object] = {}
|
|
219
219
|
|
|
220
220
|
async def fake_request(endpoint: str, **kwargs: Any) -> str: # noqa: ANN401
|
|
221
221
|
captured["endpoint"] = endpoint
|
|
222
|
-
captured["
|
|
222
|
+
captured["data"] = kwargs.get("data")
|
|
223
223
|
return "OK"
|
|
224
224
|
|
|
225
225
|
monkeypatch.setattr(api_client, "_request", fake_request)
|
|
@@ -228,7 +228,7 @@ async def test_set_config_sanitizes_payload_before_request(
|
|
|
228
228
|
|
|
229
229
|
assert result["success"] is True
|
|
230
230
|
assert result["response"] == "OK"
|
|
231
|
-
assert captured["
|
|
231
|
+
assert captured["data"] == {"poolmode": "A<mode>", "speed": 3.7}
|
|
232
232
|
|
|
233
233
|
|
|
234
234
|
@pytest.mark.asyncio
|
|
@@ -775,7 +775,7 @@ class VioletPoolAPI:
|
|
|
775
775
|
body = await self._request(
|
|
776
776
|
API_SET_CONFIG,
|
|
777
777
|
method="POST",
|
|
778
|
-
|
|
778
|
+
data=sanitized_config,
|
|
779
779
|
)
|
|
780
780
|
return self._command_result(body)
|
|
781
781
|
|
|
@@ -866,7 +866,7 @@ class VioletPoolAPI:
|
|
|
866
866
|
body = await self._request(
|
|
867
867
|
API_RESTORE_CALIBRATION,
|
|
868
868
|
method="POST",
|
|
869
|
-
|
|
869
|
+
data={"sensor": sensor, "timestamp": timestamp},
|
|
870
870
|
)
|
|
871
871
|
return self._command_result(body)
|
|
872
872
|
|
|
@@ -1209,7 +1209,7 @@ class VioletPoolAPI:
|
|
|
1209
1209
|
body = await self._request(
|
|
1210
1210
|
API_SET_DOSING_PARAMETERS,
|
|
1211
1211
|
method="POST",
|
|
1212
|
-
|
|
1212
|
+
data=dict(parameters),
|
|
1213
1213
|
)
|
|
1214
1214
|
return self._command_result(body)
|
|
1215
1215
|
|
|
@@ -128,13 +128,13 @@ DEVICE_STATE_MAPPING = {
|
|
|
128
128
|
"ON": {"mode": "manual", "active": True, "desc": "Manual ON"},
|
|
129
129
|
"OFF": {"mode": "manual", "active": False, "desc": "Manual OFF"},
|
|
130
130
|
"AUTO": {"mode": "auto", "active": None, "desc": "Auto Mode"},
|
|
131
|
-
# Numeric states from the API
|
|
131
|
+
# Numeric states from the API (source: getReadings spec Rev. 14-07-2024)
|
|
132
132
|
"0": {"mode": "auto", "active": False, "desc": "Auto - Standby"},
|
|
133
|
-
"1": {"mode": "
|
|
134
|
-
"2": {"mode": "auto", "active":
|
|
135
|
-
"3": {"mode": "auto", "active": True, "desc": "Auto -
|
|
133
|
+
"1": {"mode": "auto", "active": True, "desc": "Auto - Active (Scheduled)"},
|
|
134
|
+
"2": {"mode": "auto", "active": False, "desc": "Auto - Priority OFF (Rule Blocked)"},
|
|
135
|
+
"3": {"mode": "auto", "active": True, "desc": "Auto - Priority ON (Emergency Rule)"},
|
|
136
136
|
"4": {"mode": "manual", "active": True, "desc": "Manual ON (Forced)"},
|
|
137
|
-
"5": {"mode": "auto", "active": False, "desc": "
|
|
137
|
+
"5": {"mode": "auto", "active": False, "desc": "Rule OFF (Emergency Rule)"},
|
|
138
138
|
"6": {"mode": "manual", "active": False, "desc": "Manual OFF"},
|
|
139
139
|
# Special protection modes (from PUMPSTATE field with pipe separator)
|
|
140
140
|
"3|PUMP_ANTI_FREEZE": {
|
|
@@ -158,14 +158,14 @@ STATE_MAP = {
|
|
|
158
158
|
# Numeric states (as int and str)
|
|
159
159
|
0: False,
|
|
160
160
|
1: True,
|
|
161
|
-
2:
|
|
161
|
+
2: False,
|
|
162
162
|
3: True,
|
|
163
163
|
4: True,
|
|
164
164
|
5: False,
|
|
165
165
|
6: False,
|
|
166
166
|
"0": False,
|
|
167
167
|
"1": True,
|
|
168
|
-
"2":
|
|
168
|
+
"2": False,
|
|
169
169
|
"3": True,
|
|
170
170
|
"4": True,
|
|
171
171
|
"5": False,
|
|
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
|