The distribution is renamed to napalm-netgear-switches: napalm-netgear on PyPI belongs to another project. The import package napalm_netgear and the driver names netgear_smart / netgear_plus do not change.
Changes
style: ruff format and ruff check --fix with the standard's rule set (E, F, I, UP, B, line length 100, Python 3.10). Mechanical.
fix: a failed logout in the Netgear Plus close() logs at debug level (B110); justified nosec for the firmware CDN probe (B310: the URL is always https on the fixed _FW_CDN_BASE, model and version only fill the path) and the empty password field of get_users (B105, NAPALM's shape). A second TestGetLldpNeighbors class shadowed the first, whose two tests never ran; renamed, both run and pass.
chore: distribution name napalm-netgear-switches with [tool.napalm-standard] package = "napalm_netgear"; CI in .gitea/workflows/ci.yml via the shared workflow, .github/ removed; Python >= 3.10, napalm-device-types>=4.21.1, SPDX license, LICENSE, py.typed, URLs on git.netork.io, dev extra, CHANGELOG.md; strict mypy with netgear_plus and netgear_smart exempt (139 errors), quality baseline, coverage floor 48 %.
fix(deps): netaddr>=0.7.19; unfloored, the lowest job installs netaddr 0.3.1, which has no IPAddress.
Locally: 101 tests, coverage 48.23 %, ruff, mypy, bandit clean; napalm-standard check and ratchet clean; build + twine check --strict pass; the tests also pass at the declared floors (uv pip install --resolution lowest-direct, Python 3.10). Fixtures only.
## Summary
napalm-netgear adopts the NAPALM driver standard (https://git.netork.io/NAPALM/driver-standard).
Epic: NAPALM/driver-standard#2.
The distribution is renamed to `napalm-netgear-switches`: `napalm-netgear` on PyPI belongs to another project. The import package `napalm_netgear` and the driver names `netgear_smart` / `netgear_plus` do not change.
## Changes
- **style**: ruff format and `ruff check --fix` with the standard's rule set (E, F, I, UP, B, line length 100, Python 3.10). Mechanical.
- **fix**: a failed logout in the Netgear Plus `close()` logs at debug level (B110); justified nosec for the firmware CDN probe (B310: the URL is always https on the fixed `_FW_CDN_BASE`, model and version only fill the path) and the empty `password` field of `get_users` (B105, NAPALM's shape). A second `TestGetLldpNeighbors` class shadowed the first, whose two tests never ran; renamed, both run and pass.
- **chore**: distribution name `napalm-netgear-switches` with `[tool.napalm-standard] package = "napalm_netgear"`; CI in `.gitea/workflows/ci.yml` via the shared workflow, `.github/` removed; Python >= 3.10, `napalm-device-types>=4.21.1`, SPDX license, LICENSE, `py.typed`, URLs on git.netork.io, dev extra, CHANGELOG.md; strict mypy with `netgear_plus` and `netgear_smart` exempt (139 errors), quality baseline, coverage floor 48 %.
- **fix(deps)**: `netaddr>=0.7.19`; unfloored, the lowest job installs netaddr 0.3.1, which has no `IPAddress`.
## Related Issue
Closes #14
## Testing
Locally: 101 tests, coverage 48.23 %, ruff, mypy, bandit clean; `napalm-standard check` and `ratchet` clean; build + `twine check --strict` pass; the tests also pass at the declared floors (`uv pip install --resolution lowest-direct`, Python 3.10). Fixtures only.
Mechanical: ruff format, and ruff check --fix with the rule set every NAPALM
driver uses (E, F, I, UP, B at line length 100, Python 3.10). What ruff
cannot fix comes in the next commit.
- Netgear Plus: a failed logout on close() now logs at debug level (B110),
so a swallowed failure leaves a trace; the module gets its logger.
- nosec for the firmware CDN probe (B310): the URL is built on the fixed
https base _FW_CDN_BASE, model and version only fill its path, so no
file:// or custom scheme can reach urlopen.
- nosec for the empty password in get_users (B105): it is NAPALM's field,
the CLI never shows a password; a false positive.
- The v7 LLDP table in a docstring loses one leading space per line to fit
line length 100.
- tests: a second TestGetLldpNeighbors class shadowed the first, whose two
tests never ran; the v7 one is now TestGetLldpNeighborsV7 and both run
(and pass). raise ... from exc in the netmiko stand-in.
- The distribution is renamed to napalm-netgear-switches: napalm-netgear
on PyPI belongs to another project. The import package napalm_netgear
and the napalm.drivers entry points netgear_smart and netgear_plus stay;
[tool.napalm-standard] package names the import package for the check.
README install line and CHANGELOG say the new name.
- CI moves to .gitea/workflows/ci.yml and calls the shared driver workflow
of NAPALM/driver-standard; .github/ is gone.
- requires-python >=3.10 (napalm-device-types needs it), floor
napalm-device-types>=4.21.1, LICENSE file, py.typed, SPDX license string,
links to git.netork.io, a dev extra with floors, CHANGELOG.md.
- mypy strict for the package; napalm_netgear.netgear_plus and
napalm_netgear.netgear_smart are exempt for now (139 errors), recorded
in the quality baseline with their long and complex functions and the
2070-line netgear_smart module. Coverage floor 48 % (measured 48.23 %).
Closes#14
Without one, uv's lowest-direct resolution installs netaddr 0.3.1, which
has no IPAddress, and every test module fails to import. 0.7.19 has
IPAddress, IPNetwork and AddrFormatError, and the tests pass at exactly
the declared floors on Python 3.10.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
napalm-netgear adopts the NAPALM driver standard (https://git.netork.io/NAPALM/driver-standard).
Epic: NAPALM/driver-standard#2.
The distribution is renamed to
napalm-netgear-switches:napalm-netgearon PyPI belongs to another project. The import packagenapalm_netgearand the driver namesnetgear_smart/netgear_plusdo not change.Changes
ruff check --fixwith the standard's rule set (E, F, I, UP, B, line length 100, Python 3.10). Mechanical.close()logs at debug level (B110); justified nosec for the firmware CDN probe (B310: the URL is always https on the fixed_FW_CDN_BASE, model and version only fill the path) and the emptypasswordfield ofget_users(B105, NAPALM's shape). A secondTestGetLldpNeighborsclass shadowed the first, whose two tests never ran; renamed, both run and pass.napalm-netgear-switcheswith[tool.napalm-standard] package = "napalm_netgear"; CI in.gitea/workflows/ci.ymlvia the shared workflow,.github/removed; Python >= 3.10,napalm-device-types>=4.21.1, SPDX license, LICENSE,py.typed, URLs on git.netork.io, dev extra, CHANGELOG.md; strict mypy withnetgear_plusandnetgear_smartexempt (139 errors), quality baseline, coverage floor 48 %.netaddr>=0.7.19; unfloored, the lowest job installs netaddr 0.3.1, which has noIPAddress.Related Issue
Closes #14
Testing
Locally: 101 tests, coverage 48.23 %, ruff, mypy, bandit clean;
napalm-standard checkandratchetclean; build +twine check --strictpass; the tests also pass at the declared floors (uv pip install --resolution lowest-direct, Python 3.10). Fixtures only.