summaryrefslogtreecommitdiff
path: root/docs/development/quality-and-utils.md
diff options
context:
space:
mode:
authorRoberto Bertó <463349+robertoberto@users.noreply.github.com>2026-05-19 03:15:55 -0300
committerGitHub <noreply@github.com>2026-05-19 03:15:55 -0300
commit294d060ac1557ed70cab7a12f97d930f9dc4baf9 (patch)
tree25e03a160fb1dc05a27a9118a7a6f573f0ffd123 /docs/development/quality-and-utils.md
parentffd5ba16eb1ada42a582db4ac8bdaf29f66a868f (diff)
parent6071528289e4a8b11a772433c33851136d30f133 (diff)
downloadpyvyos-294d060ac1557ed70cab7a12f97d930f9dc4baf9.tar.gz
pyvyos-294d060ac1557ed70cab7a12f97d930f9dc4baf9.zip
Merge pull request #31 from vyos-contrib/release/v0.4.0-cleanupv0.4.0
Release v0.4.0 — cleanup and consolidation
Diffstat (limited to 'docs/development/quality-and-utils.md')
-rw-r--r--docs/development/quality-and-utils.md72
1 files changed, 0 insertions, 72 deletions
diff --git a/docs/development/quality-and-utils.md b/docs/development/quality-and-utils.md
deleted file mode 100644
index ff78ec2..0000000
--- a/docs/development/quality-and-utils.md
+++ /dev/null
@@ -1,72 +0,0 @@
-# Quality, Utils, and Pitfalls
-
-## Goals
-- Reduce regressions and supportability burden
-- Consistent error handling and logging
-- Clear utilities to avoid duplication
-
-## Exceptions (typed)
-- `SDKError` (base)
-- `HttpError(status, message)`
-- `ApiError(message, details=None)` # when success=False
-- `ValidationError(message)` # client-side validation
-
-## Logging
-- Use `logging.getLogger("pyvyos")`
-- Include: op, command, status, elapsed_ms, request_id
-- Redact secrets (api key) – via `utils.json.redact_key(data, keys=["key"])`
-- Default INFO; DEBUG guarded by env `PYVYOS_DEBUG=1`
-
-## Timeouts & Retries
-- Default timeout: 10s (configurable)
-- No implicit retries by default
-- Future: retry idempotent ops only (exponential backoff)
-
-## Security
-- `verify=True` by default
-- Document `urllib3.disable_warnings()` only for dev
-- Never log secrets or full payloads by default
-
-## Utilities (proposal)
-- `utils.paths.build(*segments) -> list[str]`
-- `utils.ids.request_id() -> str`
-- `utils.json.safe_dumps(obj) -> str` (with redaction)
-- `utils.http.timeout(seconds) -> int` (normalize)
-
-## Validation (optional)
-- `specs.commands.*` Pydantic models validate request structures
-- Enforce path rules (e.g., config-file requires `path=[]`)
-- Gate behind feature flag or optional dependency group
-
-## Testing
-- Unit: small, isolated, no real I/O
-- Contract: success/error fixtures per command
-- Naming: `test_should_<do>_when_<condition>`
-- Use monkeypatch on `_execute_request`
-
-## Documentation
-- Keep developer docs scoped and short (≤100 lines)
-- Update api-reference and path rules on changes
-
-## Style & Types
-- Type hints on public APIs, avoid `Any`
-- Early returns, no deep nesting, no bare `except`
-- Constants for command/operation strings
-
-## Release Hygiene
-- Conventional commits; CHANGELOG generated
-- Tag every release; ensure `git push --tags`
-- Patch bumps for fixes, minor for features
-
-## Potential Pitfalls & Fixes
-- Path handling inconsistencies → centralize in RestClient
-- Logging secrets → redact before logging
-- Tight coupling device↔transport → maintain clean core boundaries
-- Hidden breaking changes → keep shims until 1.0.0
-- Non-deterministic tests → remove sleeps, use fixed seeds
-
-## Next Steps (ordered)
-1. Introduce `exceptions.py` and wire into RestClient
-2. Add `utils/` with `json.py`, `paths.py`, `ids.py`
-3. Add optional `specs/` models for high-value commands
-4. CI: lint+type-check, codecov, test matrix