violet-poolController-api 0.0.34__tar.gz → 0.0.35__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.34/violet_poolController_api.egg-info → violet_poolcontroller_api-0.0.35}/PKG-INFO +1 -1
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/pyproject.toml +1 -1
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/tests/test_api.py +41 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35/violet_poolController_api.egg-info}/PKG-INFO +1 -1
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/violet_poolcontroller_api/api.py +6 -11
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/LICENSE +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/README.md +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/setup.cfg +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/tests/test_api_smoke.py +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/tests/test_circuit_breaker.py +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/tests/test_mock_server.py +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/tests/test_parsers.py +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/tests/test_readings.py +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/violet_poolController_api.egg-info/SOURCES.txt +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/violet_poolController_api.egg-info/dependency_links.txt +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/violet_poolController_api.egg-info/requires.txt +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/violet_poolController_api.egg-info/top_level.txt +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/violet_poolcontroller_api/__init__.py +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/violet_poolcontroller_api/circuit_breaker.py +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/violet_poolcontroller_api/const_api.py +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/violet_poolcontroller_api/const_devices.py +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/violet_poolcontroller_api/parsers.py +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/violet_poolcontroller_api/py.typed +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/violet_poolcontroller_api/readings.py +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/violet_poolcontroller_api/utils_rate_limiter.py +0 -0
- {violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/violet_poolcontroller_api/utils_sanitizer.py +0 -0
|
@@ -96,6 +96,47 @@ async def test_get_readings_success(
|
|
|
96
96
|
assert dict(result) == mock_data
|
|
97
97
|
|
|
98
98
|
|
|
99
|
+
@pytest.mark.asyncio
|
|
100
|
+
async def test_get_output_runtimes_success(
|
|
101
|
+
mock_aioresponse: aioresponses,
|
|
102
|
+
api_client: VioletPoolAPI,
|
|
103
|
+
) -> None:
|
|
104
|
+
"""Test get_output_runtimes parses a JSON dict response.
|
|
105
|
+
|
|
106
|
+
Regression: previously the endpoint was requested without expect_json,
|
|
107
|
+
so the raw text body was returned and the method logged a warning
|
|
108
|
+
("Unexpected non-dict response for get_output_runtimes: str") and
|
|
109
|
+
returned an empty dict.
|
|
110
|
+
"""
|
|
111
|
+
url = "http://192.168.1.100/getOutputruntimes"
|
|
112
|
+
mock_data = {
|
|
113
|
+
"PUMP_RUNTIME": "04h 33m 12s",
|
|
114
|
+
"PUMP_LAST_ON": 1700000000,
|
|
115
|
+
"PUMP_LAST_OFF": 1699996800,
|
|
116
|
+
"CPU_UPTIME": "12d 4h 30m",
|
|
117
|
+
"LOAD_AVG": "0.42",
|
|
118
|
+
}
|
|
119
|
+
mock_aioresponse.get(url, payload=mock_data, status=200)
|
|
120
|
+
|
|
121
|
+
result = await api_client.get_output_runtimes()
|
|
122
|
+
|
|
123
|
+
assert isinstance(result, dict)
|
|
124
|
+
assert result == mock_data
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@pytest.mark.asyncio
|
|
128
|
+
async def test_get_output_runtimes_non_dict_raises(
|
|
129
|
+
mock_aioresponse: aioresponses,
|
|
130
|
+
api_client: VioletPoolAPI,
|
|
131
|
+
) -> None:
|
|
132
|
+
"""Test get_output_runtimes raises when the controller returns a non-dict."""
|
|
133
|
+
url = "http://192.168.1.100/getOutputruntimes"
|
|
134
|
+
mock_aioresponse.get(url, body="not-json", status=200)
|
|
135
|
+
|
|
136
|
+
with pytest.raises(VioletPoolAPIError):
|
|
137
|
+
await api_client.get_output_runtimes()
|
|
138
|
+
|
|
139
|
+
|
|
99
140
|
@pytest.mark.asyncio
|
|
100
141
|
async def test_set_pump_speed_success(
|
|
101
142
|
mock_aioresponse: aioresponses,
|
|
@@ -2205,23 +2205,18 @@ class VioletPoolAPI:
|
|
|
2205
2205
|
|
|
2206
2206
|
Returns a flat dict with runtime (HH:MM:SS format) and last-on/off
|
|
2207
2207
|
(ISO datetime strings) for all outputs: PUMP, SOLAR, HEATER, BACKWASH,
|
|
2208
|
-
REFILL, LIGHT, ECO, all dosing outputs,
|
|
2208
|
+
REFILL, LIGHT, ECO, all dosing outputs, OMNIDC channels, and extension
|
|
2209
2209
|
relay channels. Also includes CPU_UPTIME, LOAD_AVG, and version fields.
|
|
2210
2210
|
|
|
2211
2211
|
Returns:
|
|
2212
|
-
Dict with runtime/timestamp strings for all outputs
|
|
2213
|
-
on error.
|
|
2212
|
+
Dict with runtime/timestamp strings for all outputs.
|
|
2214
2213
|
|
|
2215
2214
|
Raises:
|
|
2216
|
-
VioletPoolAPIError: If the API call fails
|
|
2215
|
+
VioletPoolAPIError: If the API call fails or the response is not a
|
|
2216
|
+
JSON object.
|
|
2217
2217
|
|
|
2218
2218
|
"""
|
|
2219
|
-
|
|
2219
|
+
return await self._request_json_dict(
|
|
2220
2220
|
API_GET_OUTPUT_RUNTIMES,
|
|
2221
|
-
|
|
2222
|
-
priority=API_PRIORITY_NORMAL,
|
|
2221
|
+
payload_name="getOutputruntimes",
|
|
2223
2222
|
)
|
|
2224
|
-
if isinstance(resp, dict):
|
|
2225
|
-
return resp
|
|
2226
|
-
_LOGGER.warning("Unexpected non-dict response for get_output_runtimes: %s", type(resp).__name__)
|
|
2227
|
-
return {}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/tests/test_api_smoke.py
RENAMED
|
File without changes
|
{violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/tests/test_circuit_breaker.py
RENAMED
|
File without changes
|
{violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/tests/test_mock_server.py
RENAMED
|
File without changes
|
|
File without changes
|
{violet_poolcontroller_api-0.0.34 → violet_poolcontroller_api-0.0.35}/tests/test_readings.py
RENAMED
|
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
|