| Age | Commit message (Collapse) | Author |
|
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 8.1.0 to 8.2.0.
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](https://github.com/astral-sh/setup-uv/compare/08807647e7069bb48b6ef5acd8ec9567f424441b...fac544c07dec837d0ccb6301d7b5580bf5edae39)
---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
dependency-version: 8.2.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
|
|
docs: cross-reference packer-vyos as related project
|
|
Add a "Related projects" section in the main README pointing to
vyos-contrib/packer-vyos, the Packer-based image builder that
produces ready-to-deploy VyOS images. The two projects are
complementary: packer-vyos builds the appliance, pyvyos drives it.
Also mention packer-vyos in tests/pve/README.md as an alternative
to the interactive install in phase 1 of the e2e harness — without
making the harness depend on it.
This commit is documentation only. It does not change pyvyos
behaviour, payloads, or public API.
|
|
fix: pytest was declared as runtime dependency
|
|
# Conflicts:
# pyproject.toml
|
|
pyproject.toml [project].dependencies declared pytest>=9.0.3, so
'pip install pyvyos==0.4.0' pulled pytest into every install. This
contradicted the 0.4.0 CHANGELOG which advertised runtime deps as
'requests>=2.32.0,<3.0 only'.
The line was introduced accidentally during the e2e harness work in
bfcaffe (almost certainly an 'uv add pytest' that landed in the wrong
table) and was not caught in review.
Removed; pytest remains in the 'dev' optional-dependency extra.
Bump to 0.4.1 to ship the correction to PyPI.
|
|
vyos-contrib/dependabot/pip/requests-gte-2.34.2-and-lt-3.0
Update requests requirement from <3.0,>=2.32.0 to >=2.34.2,<3.0
|
|
vyos-contrib/dependabot/pip/python-dotenv-gte-1.2.2-and-lt-2.0
Update python-dotenv requirement from <2.0,>=1.0.1 to >=1.2.2,<2.0
|
|
vyos-contrib/dependabot/pip/pytest-cov-gte-7.1.0-and-lt-8.0
Update pytest-cov requirement from <7.0,>=5.0 to >=7.1.0,<8.0
|
|
Update hatchling requirement from >=1.20 to >=1.29.0
|
|
Updates the requirements on [hatchling](https://github.com/pypa/hatch) to permit the latest version.
- [Release notes](https://github.com/pypa/hatch/releases)
- [Commits](https://github.com/pypa/hatch/compare/hatchling-v1.20.0...hatchling-v1.29.0)
---
updated-dependencies:
- dependency-name: hatchling
dependency-version: 1.29.0
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com>
|
|
Updates the requirements on [pytest-cov](https://github.com/pytest-dev/pytest-cov) to permit the latest version.
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v7.1.0)
---
updated-dependencies:
- dependency-name: pytest-cov
dependency-version: 7.1.0
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com>
|
|
Updates the requirements on [python-dotenv](https://github.com/theskumar/python-dotenv) to permit the latest version.
- [Release notes](https://github.com/theskumar/python-dotenv/releases)
- [Changelog](https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md)
- [Commits](https://github.com/theskumar/python-dotenv/compare/v1.0.1...v1.2.2)
---
updated-dependencies:
- dependency-name: python-dotenv
dependency-version: 1.2.2
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com>
|
|
Updates the requirements on [requests](https://github.com/psf/requests) to permit the latest version.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.0...v2.34.2)
---
updated-dependencies:
- dependency-name: requests
dependency-version: 2.34.2
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
|
|
Release v0.4.0 — cleanup and consolidation
|
|
Per OpenSSF Scorecard 'Pinned-Dependencies' guidance, third-party
GitHub Actions should be referenced by full commit SHA, not by tag.
Tags are mutable; a SHA is not.
Each pin keeps a '# vX.Y.Z' trailing comment so Dependabot can read
the current version and propose updates while still pinning by SHA.
- actions/checkout de0fac2 # v6.0.2
- actions/setup-python a309ff8 # v6.2.0
- astral-sh/setup-uv 0880764 # v8.1.0
- pypa/gh-action-pypi-publish cef2210 # v1.14.0
This commit does not change pyvyos HTTP payloads, request handling, or
response parsing.
|
|
|
|
GitHub deprecation notice: Node.js 20 will be removed from runners in
September 2026 and forced to Node 24 in June 2026. Pin to current
majors that already run on Node 24.
- actions/checkout@v4 -> v6
- actions/setup-python@v5 -> v6
- astral-sh/setup-uv@v3 -> v8
- pypa/gh-action-pypi-publish@v1.13.0 -> v1.14.0
- pre-commit/pre-commit-hooks@v5.0.0 -> v6.0.0
This commit does not change pyvyos HTTP payloads, request handling, or
response parsing.
|
|
Adds an opt-in end-to-end harness that runs pyvyos against a real
VyOS HTTPS API on a Proxmox VE host.
tests/pve/ shell-based VM lifecycle on a remote PVE host:
preflight, ensure-template (state-machine over the
VMID with manual-install phase 1 and cloud-init
phase 2), create/start/stop/destroy, run-e2e.
Cloud-init seed ISO is generated on the PVE host
itself; nothing local-side beyond ssh is required.
.env is gitignored; .env.example documents the
full set of variables.
tests/e2e/ pytest suite that exercises the public methods
most likely to regress on a payload change:
show, retrieve_show_config, configure_set /
retrieve_return_values / configure_delete round
trip, and configure_multiple_op batch. Auto-skipped
unless PYVYOS_E2E=1.
The cloud-init template now sets 'service https api rest' before
the API key. Without that flag VyOS only exposes /info; the other
HTTPS routes return 404. README and tests/pve/README document the
requirement, both for cloud-init and for the manual-fallback path.
Also fixes a pre-existing footgun in pyproject.toml: the pytest-env
defaults overwrote VYDEVICE_HOSTNAME from the shell, which made
the e2e tests silently aim at the stale 192.168.56.100 fixture
host. The entries now use the 'D:' (default) prefix so live runs
can override from the environment as expected.
Validated against VyOS rolling 2026.05.18-0045: 4 e2e + 57 unit
tests pass.
This commit does not change pyvyos HTTP payloads, request handling,
or response parsing.
|
|
The matrix job in commit 7aa4989 left astral-sh/setup-uv@v3 with its
default cache fingerprint of "**/uv.lock". This repo is a library
and intentionally does not commit uv.lock (commit a2df706), so the
glob matches nothing and the action errors out.
Switch the fingerprint to pyproject.toml, the actual source of truth
for dependencies. Cache hits remain across PRs that don't touch
dependencies; cache invalidates on dependency changes.
|
|
- requires-python: >=3.13 -> >=3.11. The code does not use any
3.13-only feature. typing.List/Dict/Union/Optional throughout, no
PEP 695 generics, no Self, no match. Classifiers updated to advertise
3.11/3.12/3.13.
- runtime dependencies: trim to requests only.
- python-dotenv is only used by examples; move to the dev extra.
- urllib3 is never imported by pyvyos directly; it remains available
transitively through requests.
- pre-existing dev tooling (pytest, pytest-cov, pytest-env) untouched.
- CI: PR validation runs on a 3.11/3.12/3.13 matrix.
- README: reword the Python requirement.
- .python-version: 3.13.0 -> 3.13 (CI uses the matrix).
- Wheel build verified to include pyvyos/py.typed and to declare
Requires-Python: >=3.11 with requests as the only runtime requirement.
|
|
The previous examples/basic.py ran destructive operations (configure_set,
configure_delete, generate, reset, config_file_load) by default. That is
not what a public 'basic' example should do.
- examples/basic.py: rewritten as a read-only example
(retrieve_show_config, show, retrieve_return_values), uses a robust
env-bool parser, prints response.result via a small helper, and uses
the supported public import 'from pyvyos import ApiResponse, VyDevice'.
- examples/integration_smoke.py: renamed from the old basic.py, keeps
the mutating operations, and refuses to run unless
PYVYOS_ALLOW_MUTATING_EXAMPLE=1 is set.
- README: link both examples and describe what each one does.
Note: the dev/ note about a future Docker-based e2e harness is tracked
in the unreleased issue drafts; it is not part of this release.
|
|
- configure_multiple_op uses op_path=, not path=
- ApiResponse.result is dict | list | str | None (varies per endpoint),
not just dict | list
- VYDEVICE_VERIFY_SSL parsing accepts 1/true/yes
- describe logging accurately: log records only carry structural fields
(no payload, no key); sanitization applies to ApiResponse.request, not
to logs; do not claim a NullHandler is attached (none is)
- shims at 1.0.0: phrase as a decision deferred to release time
|
|
- delete CONTRIB.md (superseded by CONTRIBUTING.md)
- delete requirements.txt (duplicated [project].dependencies)
- delete test_quick.py (ad-hoc smoke covered by tests/test_shims.py)
- rewrite example.py as examples/basic.py using the public API
(from pyvyos import VyDevice) and drop the RuntimeWarning suppression
- move vagrant/ to examples/vagrant/
- stop tracking uv.lock and add it to .gitignore (library, not app)
- README: link the examples/ directory
- CHANGELOG: document the moves and removals
|
|
Rewrite the README around the supported public API, add a public API
stability policy, document the deprecation timeline, and refresh the
CHANGELOG with the full 0.4.0 scope. Add a short CONTRIBUTING guide.
Apply minor pending fixes to LICENSE and .env.example. Fix a couple of
verify=False antipatterns in the docs/ pages.
README:
- Badges (PyPI version, Python versions, license, CI).
- Quick start that actually runs (no missing import, no global
disable_warnings, correct VYDEVICE_VERIFY_SSL parse).
- Environment variable table with defaults.
- ApiResponse contract documented as a dataclass.
- Compact API overview (configure / retrieve / show / generate / reset /
config-file / system / image).
- Public API stability section with the 0.4 -> 0.5 -> 0.6 -> 1.0
deprecation timeline.
- Logging section: NullHandler default, pyvyos logger, redacted key.
- VyOS compatibility note (1.4 LTS, 1.5 rolling).
- Development with uv; optional pre-commit.
CHANGELOG:
- Consolidated 0.4.0 entry covering both the architecture refactor and
this cleanup, since 0.4.0 was tagged in git but never published.
- Explicit Added / Changed / Removed / Fixed / Compatibility / Notes
sections.
- 0.3.0 entry annotated as 'tagged but never released to PyPI'.
CONTRIBUTING.md:
- Scope statement (thin HTTPS API wrapper).
- Pull request rules; explicit 'do not change HTTP payload in passing'.
- Development setup with uv.
- Public API stability summary.
Fixes from the previous review-fixes branch:
- LICENSE copyright now reads 'GravScale, Roberto Berto'.
- .env.example default flipped to VYDEVICE_VERIFY_SSL=true with
field descriptions.
- docs/getting-started.md: VERIFY_SSL default to true; urllib3
disable_warnings now passes the specific InsecureRequestWarning.
- docs/index.md: quick example uses verify=True; removed RTD link
(RTD config was removed in this release because the build never
worked).
|
|
This commit modernizes the project's tooling and packaging without
changing the runtime code. It addresses dead workflows, obsolete
helper scripts, duplicated configuration, and stale developer docs.
Removed:
- .github/workflows/python-app.yml: targeted Python 3.12, referenced a
non-existent requirements.txt, ran only flake8 with pytest commented out
- Makefile: hard-coded env/bin/python paths that do not work with uv
- run_tests.sh and run_tests.py: duplicated each other and referenced
removed modules (test_exceptions, test_quick)
- sphinx/ and .readthedocs.yaml: the RTD config pointed to
docs/source/conf.py while the sphinx tree lived under sphinx/source,
so the build never worked and no docs were ever published
- docs/development/architecture.md, refactor-roadmap.md, and
quality-and-utils.md: described the pre-cleanup proposal that
included specs/exceptions/request_id, now contradicted by the code
Edited:
- pyproject.toml:
- dropped the validation extra (Pydantic) — specs/ is gone
- dropped the duplicated [tool.hatch.metadata].dependencies block
- dropped the duplicated [dependency-groups].dev block
- declared the wheel package explicitly via
[tool.hatch.build.targets.wheel].packages
- bumped pytest floor to >=8.0 (Python 3.13 compatible)
- added richer classifiers (Development Status, audience, topic,
Typing :: Typed), keywords, license file pointer, and a Changelog URL
- .github/workflows/python-pr-validation.yml: upgraded to
actions/checkout@v4 and setup-python@v5, switched to astral-sh/setup-uv,
removed obsolete architecture argument
- .github/dependabot.yml: added the github-actions ecosystem so
workflow versions stay current
Added:
- pyvyos/py.typed: PEP 561 marker advertising the package as typed
- .pre-commit-config.yaml: neutral hooks only (whitespace, EOF, YAML/TOML
syntax, large-file guard); no formatters or linters yet
Kept:
- docs/development/vyos_api/: JSON reference for the VyOS HTTPS API,
useful for future contract tests
Tests still pass: 57/57.
|
|
The pyvyos.specs Pydantic models were never imported by the runtime and
had 0% test coverage. The pyvyos.exceptions hierarchy was defined but
never raised anywhere. The request_id helper generated UUIDs that were
attached to log records but never propagated to callers — half-implemented
tracing is worse than none.
This commit does not alter request/response logic or HTTP payloads. It
only removes code that was never executed and tests for that code.
Removed:
- pyvyos/specs/ (Pydantic models package)
- pyvyos/exceptions.py (SDKError, HttpError, ApiError, ValidationError)
- pyvyos/utils/ids.py (request_id helper)
- tests/test_exceptions.py
- tests/utils/test_ids.py
Edited:
- pyvyos/core/rest_client.py: drop request_id import and log extras
- pyvyos/utils/__init__.py: drop request_id export
Tests: 66 -> 57 passing. Coverage: 54% -> 87%.
Public API unchanged.
|
|
vyos-contrib/dependabot/pip/pytest-env-gte-0.6.2-and-lt-1.3
Update pytest-env requirement from <0.7,>=0.6.2 to >=0.6.2,<1.3
|
|
Updates the requirements on [pytest-env](https://github.com/pytest-dev/pytest-env) to permit the latest version.
- [Release notes](https://github.com/pytest-dev/pytest-env/releases)
- [Commits](https://github.com/pytest-dev/pytest-env/compare/0.6.2...1.2.0)
---
updated-dependencies:
- dependency-name: pytest-env
dependency-version: 1.2.0
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
|
|
vyos-contrib/feat/architecture-and-quality-improvements
feat: v0.4.0 - Architecture refactor, bug fixes, and quality improvem…
|
|
- Fixed #25: config_file_save/load now include path: [] in payload
- Added exception hierarchy (SDKError, HttpError, ApiError, ValidationError)
- Added utility functions (json, ids, paths)
- Added structured logging with request ID tracking
- Added optional Pydantic validation models
- Refactored to pyvyos.core.* structure with backward compatibility shims
- Moved JSON specs to docs/development/vyos_api/
- Added comprehensive test suite (19 shim tests, 16 utils tests, 6 exception tests)
- Updated pyproject.toml for uv sync editable installation
- Added development documentation (architecture, roadmap, quality guidelines)
Maintains 100% backward compatibility with 0.3.0
|
|
Release/0.3.0
|
|
|
|
|
|
|
|
version and dependencies
|
|
|
|
Updating version release 0.3.0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
requests
|
|
|
|
device
|
|
|
|
|
|
|