Repository navigation
2.6.2
smartbox v2.6.2
Port round of upstream PR #64 (improvements/fix_bugs, 19 commits). Every commit was audited intent-level against this tree — full per-commit verdicts and evidence in ajtudela-pr-64-audit.md. Ten commits were independently fixed by the 2.6.x round; of the remainder, seven were ported, one declined by decision, one is upstream-only.
Bug fixes
set_node_setupcan no longer wipe undeclared setup keys on the device (upstream5618aa3). The setup endpoint requires the whole configuration to be re-posted; the read-modify-write GET is now always raw, so keys the setup models do not declare (e.g.counter_offseton pmo nodes) survive every write. Completed withextra="allow"onDefaultNodeSetup/PmoSetup: typed (raw_response=False) reads keep unknown keys and round-trip losslessly.- Common exception root (upstream
62efcf8):InvalidAuthError,APIUnavailableErrorandResellerNotExistErrornow derive fromSmartboxError— oneexcept SmartboxErrorcatches every library failure.APIUnavailableErrorkeeps itsaiohttp.ClientConnectionErrorbase for backwards compatibility; the data-path 403 →SmartboxErrormapping is kept deliberately. - CLI: unknown
-d/-nvalues raiseclick.BadParameterwith aparam_hint(exit code 2, usage line rendered, offending option named) instead of a generic error; malformed wire node payloads stay runtime errors (upstream6ad2014).
Build & docs
- Core dependencies bounded to their current major:
aiohttp>=3,<4,pydantic>=2,<3,python-socketio>=5,<6(upstreamda3bb9c). .vscode/settings.json: pylint/flake8 editor settings replaced with the ruff formatter/code-actions setup (upstreama78bc3a).- CODEOWNERS co-owner and README badge reflow adopted from upstream (upstream
2ec1ef0). - README staleness fixes: duplicate empty
Installationheading removed,--basic-auth-credslong option corrected, Python floor>=3.14.2,tox -e py314, basic-auth pointer moved toapi-notes.md.
Tests
test_all_resellers(real HTTP calls to twelve reseller servers) moved behind anetworkmarker, deselected by default; run on demand withpytest -m network. Sessions in it are closed (upstream0bef64c).
Deliberately not ported
- The catch-all
DefaultNodeStatusfallback (upstream6d592bf): typed mode (raw_response=False) keeps rejecting sparse payloads withSmartboxValidationErrorand the offending wire payload attached — the documented bare{"sync_status": "lost"}dead-node frame is first-class in that design, and silently-Nonefields would hide firmware drift. Rationale in the audit doc.
Full changes since 2.6.1: see the 2.6.2 section of the CHANGELOG.