span-panel-api 2.6.1__tar.gz → 2.6.2__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.
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/CHANGELOG.md +8 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/PKG-INFO +1 -1
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/pyproject.toml +1 -1
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/mqtt/connection.py +10 -3
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/uv.lock +1 -1
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.codefactor +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.codefactor.yml +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.deps-installed +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.github/dependabot.yml +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.github/workflows/ci.yml +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.github/workflows/dependabot-auto-approve.yml +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.github/workflows/dependabot-auto-merge.yml +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.github/workflows/release.yml +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.gitignore +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.markdownlint-cli2.jsonc +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.markdownlint.json +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.pre-commit-config.yaml +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.prettierrc.json +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.vscode/extensions.json +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/.vscode/tasks.json +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/DEVELOPMENT.md +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/LICENSE +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/README.md +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/SECURITY.md +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/conftest.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/developer_attribute_readme.md +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/openapi.json +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/pytest.ini +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/pytest_output.log +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/scripts/__init__.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/scripts/coverage.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/scripts/format.sh +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/scripts/format_markdown.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/scripts/test_live_auth.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/setup-hooks.sh +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/__init__.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/_http.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/auth.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/const.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/detection.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/exceptions.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/factory.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/models.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/mqtt/__init__.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/mqtt/accumulator.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/mqtt/async_client.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/mqtt/client.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/mqtt/const.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/mqtt/field_metadata.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/mqtt/homie.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/mqtt/models.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/phase_validation.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/protocol.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/src/span_panel_api/py.typed +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/conftest.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/fixtures/configs/simulation_config_32_circuit.yaml +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/fixtures/configs/simulation_config_40_circuit_with_battery.yaml +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/fixtures/configs/simulation_config_8_tab_workshop.yaml +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/fixtures/v2/README.md +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/fixtures/v2/homie_schema.json +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/fixtures/v2/status.json +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/simulation_fixtures/circuits.response.txt +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/simulation_fixtures/panel.response.txt +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/simulation_fixtures/soe.response.txt +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/simulation_fixtures/status.response.txt +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/test_accumulator.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/test_async_mqtt_client.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/test_auth_and_homie_helpers.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/test_detection_auth.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/test_exceptions.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/test_field_metadata.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/test_mqtt_bridge.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/test_mqtt_client_connection.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/test_mqtt_connect_flow.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/test_mqtt_debounce.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/test_mqtt_homie.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/test_phase_validation_configs.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/test_phase_validation_errors.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/test_protocol_conformance.py +0 -0
- {span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/test_protocol_models.py +0 -0
|
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [2.6.2] - 04/2026
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- **Reconnect loop log noise reduced** — `SpanMqttClient._reconnect_loop` now splits the catch-all exception handler in two: expected transient failures (`OSError` family — refused connection, DNS miss, socket timeout, `ssl.SSLError`) log a one-line
|
|
12
|
+
WARNING with the exception repr, while unexpected exceptions retain the full traceback via `exc_info=True`. The common "panel offline" case no longer buries logs in paho/stdlib stack frames that add no diagnostic signal; genuinely unknown failures still
|
|
13
|
+
surface full tracebacks for support-ticket triage.
|
|
14
|
+
|
|
7
15
|
## [2.6.1] - 04/2026
|
|
8
16
|
|
|
9
17
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: span-panel-api
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.2
|
|
4
4
|
Summary: A client library for SPAN Panel API
|
|
5
5
|
Project-URL: Homepage, https://github.com/SpanPanel/span-panel-api
|
|
6
6
|
Project-URL: Issues, https://github.com/SpanPanel/span-panel-api/issues
|
|
@@ -407,10 +407,17 @@ class AsyncMqttBridge:
|
|
|
407
407
|
self._client.on_socket_open = self._on_socket_open_sync
|
|
408
408
|
self._client.on_socket_register_write = self._on_socket_register_write_sync
|
|
409
409
|
await self._loop.run_in_executor(None, self._client.reconnect)
|
|
410
|
+
except (OSError, TimeoutError) as exc:
|
|
411
|
+
# Expected transient failures — panel offline, DNS miss, socket
|
|
412
|
+
# timeout, refused connection. The exception type and errno are
|
|
413
|
+
# the full diagnostic; paho/stdlib stack frames add no signal.
|
|
414
|
+
# ssl.SSLError is an OSError subclass and falls in here too;
|
|
415
|
+
# SSL misconfiguration would have failed at setup, so a
|
|
416
|
+
# reconnect-time SSL error is handled as a transient failure.
|
|
417
|
+
_LOGGER.warning("Reconnect failed (%s), retrying in %ss", exc, delay)
|
|
410
418
|
except Exception: # pylint: disable=broad-exception-caught
|
|
411
|
-
#
|
|
412
|
-
#
|
|
413
|
-
# reconnect loop die — just log and keep backing off.
|
|
419
|
+
# Unknown territory — keep the traceback so support tickets
|
|
420
|
+
# are actionable. Never let the reconnect loop die.
|
|
414
421
|
_LOGGER.warning("Reconnect failed, retrying in %ss", delay, exc_info=True)
|
|
415
422
|
finally:
|
|
416
423
|
if self._client is not None:
|
|
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
|
{span_panel_api-2.6.1 → span_panel_api-2.6.2}/tests/simulation_fixtures/circuits.response.txt
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|