Python Netgear Switch Interface Library
Query and control all your Netgear switches — SNMP (managed), NSDP and HTTP
web-UI (Plus) — behind one model-driven Python API and the ngsw CLI.
Documentation: https://python-netgear-switch-library.readthedocs.io/ — API
reference, the complete ngsw CLI reference, the virtual-switch guide (how to
test your own tools against a mock), and generated
model × protocol and model × functionality support tables.
Status: early development. See docs/superpowers/specs/ for the design and
docs/superpowers/plans/ for the implementation plans.
Installation
pip / uv (PyPI)
pip install python-netgear-switch-library
# or: uv add python-netgear-switch-library
Optional extras: [async] (pysnmp), [http] (httpx). The synchronous SNMP
transport shells out to the net-snmp command-line tools, a system package
(not a Python dependency):
sudo apt install snmp # provides snmpget/snmpbulkwalk/snmpset
Debian / Ubuntu (apt)
Signed .deb packages for Debian trixie and sid are published to a
GitHub Pages apt repository. Pick the line matching your suite:
sudo install -d -m0755 /etc/apt/keyrings
curl -fsSL https://mith.ro/python-netgear-switch-library/python-netgear-switch-library.gpg \
| sudo tee /etc/apt/keyrings/python-netgear-switch-library.gpg > /dev/null
# trixie:
echo "deb [signed-by=/etc/apt/keyrings/python-netgear-switch-library.gpg] https://mith.ro/python-netgear-switch-library/trixie/ ./" \
| sudo tee /etc/apt/sources.list.d/python-netgear-switch-library.list
# sid:
echo "deb [signed-by=/etc/apt/keyrings/python-netgear-switch-library.gpg] https://mith.ro/python-netgear-switch-library/sid/ ./" \
| sudo tee /etc/apt/sources.list.d/python-netgear-switch-library.list
sudo apt update
sudo apt install python3-netgear-switch-library
This installs the netgear_switch library and the ngsw CLI, and pulls in the
snmp net-snmp CLI tools automatically.
Either way, once installed run ngsw --help to see available commands.
Versioning
This project is a rolling release: the version is derived from git
(0.0.postN / X.Y.postN), and every merge to main publishes a new version
to PyPI and the apt repo. There are no tags or manual version bumps.
Mock switch daemons (ngsw serve)
The library ships in-repo virtual/mock switches. ngsw serve runs them as
standalone, long-lived daemons on real sockets, so an external tool or library
can point at a mock when real hardware is unavailable (CI, local development,
demos).
# Serve one model (ephemeral ports), or several, or every registered model:
ngsw serve --model gsm7228ps
ngsw serve --model gsm7228ps --model gs305ep
ngsw serve --all
For each switch that comes up it prints the model, bind host, the actual bound
port(s) (SNMP/NSDP over UDP, HTTP over TCP), and the SNMP community and HTTP
password it accepts, then blocks until interrupted (Ctrl-C / SIGTERM), at
which point every switch is stopped cleanly:
[gsm7228ps] host=127.0.0.1
SNMP udp/36540
HTTP tcp/42629
community='public' http_password='password'
serving 1 mock switch(es); press Ctrl-C to stop
Point any tool at the printed port. For example, with the mock above serving
SNMP on UDP 36540:
snmpwalk -v2c -c public 127.0.0.1:36540 1.3.6.1.2.1.1
# ...or the library's own CLI against the same mock:
ngsw --host 127.0.0.1 --model gsm7228ps --community public ports # + your transport wiring
Options:
--model KEY— model to serve; repeatable.--allserves every registered model (seengsw models).--host IP— bind address (default127.0.0.1). Pass0.0.0.0to expose the mock to other hosts on the network.--community STR/--http-password STR— credentials the mock accepts (defaultspublic/password).--port N/--http-port N— pin the SNMP/NSDP UDP port and the HTTP TCP port instead of using ephemeral ones. Because a pinned port is a single listener, these are only allowed when serving exactly one model; otherwise leave them unset and read the printed ephemeral ports.
Full details, including worked examples of testing an external tool against a mock, are in the virtual switch guide.
Development
uv sync --all-extras
uv run pytest
uv run ruff check
uv run mypy
Build the documentation (warnings are errors, as on Read the Docs):
uv sync --extra docs
make -C docs html
License
Apache-2.0.
Release files for python-netgear-switch-library 0.1.post18
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| python_netgear_switch_library-0.1.post18.tar.gz | 2.0 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| python_netgear_switch_library-0.1.post18-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.5 MB
Release files / python_netgear_switch_library-0.1.post18.tar.gz
| Download URL | python_netgear_switch_library-0.1.post18.tar.gz |
|---|---|
| Size | 2.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b1642086c7822a9f61c5a0443819be3976a9287b39344b6632a1bd790e9676f4
|
|
BLAKE2b-256 checksum How to use checksums |
0297c3e6b6a7dcc533ffafe5cd0203e79347d155ce31fcfa0d52e6e3741f84c2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / python_netgear_switch_library-0.1.post18-py3-none-any.whl
| Download URL | python_netgear_switch_library-0.1.post18-py3-none-any.whl |
|---|---|
| Size | 504.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b8f66517a7398b1254e1b5dc189cac6e52a9098e9ef9a760fce693cde962ec7d
|
|
BLAKE2b-256 checksum How to use checksums |
1363ea7a0866e78ad0270bb91c4b64368e96423747e0aea43608d219b71f06e4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency log