python-netgear-switch-library 0.0.post344__tar.gz → 0.0.post346__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/PKG-INFO +1 -1
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/_version.py +2 -2
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/aio_api.py +16 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/capabilities.py +22 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/cli_read.py +14 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/models.py +17 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/cli/commands.py +6 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/cli/parse.py +71 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/sync_api.py +19 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/.github/workflows/ci.yml +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/.github/workflows/deb.yml +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/.github/workflows/publish-pypi.yml +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/.gitignore +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/.readthedocs.yaml +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/CLAUDE.md +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/LICENSE +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/README.md +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/RELEASING.md +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/debian/changelog +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/debian/control +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/debian/copyright +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/debian/rules +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/debian/source/format +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/Makefile +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/_ext/filelinks.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/_ext/support_tables.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/_static/models/gs105pe.png +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/_static/models/gs110emx.png +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/_static/models/gs305ep.png +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/_static/models/gs728tpp.png +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/_static/models/gsm7228ps.jpg +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/_static/models/gsm7252ps.jpg +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/_static/models/m4300-16x.png +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/_static/models/m4300-24x.png +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/_static/ngsw.css +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/api/cli.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/api/core.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/api/facades.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/api/index.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/api/mcp.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/api/operations.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/api/protocols.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/api/transport.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/api/virtual.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/cli.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/conf.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/development.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/fake/index.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/fake/internals.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/fake/serving.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/fake/testing.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/guide/concepts.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/guide/configuration.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/guide/installation.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/guide/principles.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/guide/quickstart.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/guide/reading.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/guide/writing.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/index.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/mcp.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/models/gs105pe.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/models/gs110emx.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/models/gs305ep.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/models/gs728tpp.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/models/gsm7228ps.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/models/gsm7252ps.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/models/index.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/models/m4300-16x.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/models/m4300-24x.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/models/support.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/protocols/cli.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/protocols/http/cheetah-form.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/protocols/http/cheetah-v1.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/protocols/http/gambit.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/protocols/http/merge-hash-cgi.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/protocols/http/xml-api.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/protocols/http.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/protocols/index.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/protocols/nsdp.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/protocols/snmp.rst +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/superpowers/plans/2026-07-15-foundation.md +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/superpowers/plans/2026-07-17-slice-02-snmp-read-core.md +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/superpowers/plans/2026-07-17-slice-03-read-apis.md +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/superpowers/plans/2026-07-18-slice-04-snmp-write.md +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/superpowers/plans/2026-07-18-slice-05-nsdp.md +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/superpowers/plans/2026-07-18-slice-06-http.md +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/superpowers/plans/2026-07-18-slice-07-cli.md +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/superpowers/plans/2026-07-18-slice-08-packaging-ci.md +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/superpowers/plans/2026-07-23-gsm7252ps-http-xe-dialect.md +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/superpowers/specs/2026-07-15-netgear-control-library-design.md +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/superpowers/specs/2026-07-23-gsm7252ps-http-xe-dialect-design.md +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/superpowers/specs/2026-08-02-snmp-surface-findings.md +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/packaging/apt-index.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/packaging/ci-build.sh +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/packaging/deb-version.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/pyproject.toml +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/_dispatch.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/cli/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/cli/capture.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/cli/context.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/cli/format.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/cli/main.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/cli/resolve.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/cli/safety.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/cli_write.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/config.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/errors.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/http_read.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/http_write.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/mcp/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/mcp/server.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/nsdp_read.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/nsdp_write.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/cli/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/http/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/http/crypt.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/http/endpoints.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/http/forms.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/http/parse.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/http/session.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/http/types.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/nsdp/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/nsdp/auth.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/nsdp/client.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/nsdp/parsers.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/nsdp/protocol.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/nsdp/types.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/nsdp/write.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/snmp/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/snmp/client.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/snmp/oids.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/snmp/parse.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/protocols/snmp/write.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/py.typed +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/registry.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/snmp_read.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/snmp_write.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/transport/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/transport/aio/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/transport/aio/nsdp_udp.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/transport/aio/snmp_pysnmp.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/transport/cli/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/transport/cli/console.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/transport/cli/session.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/transport/cli/ssh.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/transport/cli/telnet.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/transport/http/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/transport/http/client.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/transport/sync/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/transport/sync/nsdp_udp.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/transport/sync/snmp_netsnmp_cli.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/cli_fastpath.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/faces/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/faces/cli.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/faces/http.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/faces/mibview.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/faces/nsdp.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/faces/snmp.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/seed.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/server.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/state.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/web.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/web_fastpath_vlan.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/web_fastpath_xui.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/web_gs105pe.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/web_gs110emx.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/web_gs110emx_templates.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/web_gs728tpp.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/web_gsm7228ps.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/web_gsm7252ps.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/src/netgear_switch/virtual/web_m4300.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/capture_parity.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/cli/test_capture.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/cli/test_cli_integration.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/cli/test_control_poe_port.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/cli/test_control_vlan_ip.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/cli/test_format.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/cli/test_main_framework.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/cli/test_new_commands.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/cli/test_op_coverage.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/cli/test_prompt_wiring.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/cli/test_read_commands.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/cli/test_resolve.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/cli/test_safety.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/cli/test_serve.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/conftest.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/equivalence.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/captures/gsm7228ps.json +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/captures/gsm7252ps.json +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/captures/m4300-16x.json +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/captures/m4300-24x.json +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7228ps_environment.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7228ps_lldp.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7228ps_mac_table.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7228ps_network.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7228ps_poe.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7228ps_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7228ps_show_version.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7228ps_vlan.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7228ps_vlan_brief.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7228ps_vlan_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7252ps_show_environment.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7252ps_show_interface_ethernet_1_0_1.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7252ps_show_lldp_remote_device_all.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7252ps_show_mac_addr_table.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7252ps_show_network.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7252ps_show_poe_port_info_all.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7252ps_show_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7252ps_show_version.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7252ps_show_vlan_90.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7252ps_show_vlan_brief.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/gsm7252ps_show_vlan_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_16x_show_environment.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_16x_show_interface_ethernet_1_0_1.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_16x_show_ip_management.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_16x_show_lldp_remote_device_all.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_16x_show_mac_addr_table.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_16x_show_poe_port_info_all.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_16x_show_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_16x_show_version.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_16x_show_vlan.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_16x_show_vlan_1.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_16x_show_vlan_4.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_16x_show_vlan_5.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_16x_show_vlan_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_24x_show_environment.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_24x_show_interface_ethernet_1_0_1.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_24x_show_ip_management.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_24x_show_lldp_remote_device_all.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_24x_show_mac_addr_table.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_24x_show_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_24x_show_version.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_24x_show_vlan.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_24x_show_vlan_5.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_24x_show_vlan_90.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/cli/m4300_24x_show_vlan_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs105pe_membership.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs105pe_portstats.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs105pe_pvid.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs105pe_status.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs105pe_switch_info.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs105pe_vlancfg.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs110emx_cf8021q.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs110emx_interface_stats.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs110emx_login.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs110emx_port_settings.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs110emx_pvid.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs110emx_redirect.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs110emx_sysinfo.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs110emx_vlanmembership.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs305ep_dashboard.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs305ep_login.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs305ep_membership.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs305ep_poestatus.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs305ep_portstats.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs305ep_pvid.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs305ep_vlancfg.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs728tpp_device_info_and_sensors.xml +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs728tpp_lldp.xml +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs728tpp_macs.xml +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs728tpp_mgmt_ip.xml +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs728tpp_poe.xml +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs728tpp_ports.xml +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs728tpp_pvids_membership.xml +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs728tpp_vlan_membership_per_vlan.xml +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gs728tpp_vlans.xml +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7228ps_basicAddressTable.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7228ps_ipConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7228ps_lldpRemoteInventory.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7228ps_poeInterfaceConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7228ps_portPvidConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7228ps_portStatistics.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7228ps_portsConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7228ps_sysInfo.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7228ps_vlanPortCfg_vlan5.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7228ps_vlanStatus.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7252ps_basicAddressTable.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7252ps_ipConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7252ps_lldpRemoteInventory.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7252ps_login.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7252ps_poeInterfaceConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7252ps_portPvidConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7252ps_portStatistics.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7252ps_portsConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7252ps_sysInfo.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7252ps_vlanPortCfg_vlan1.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7252ps_vlanPortCfg_vlan141.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/gsm7252ps_vlanStatus.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/m4300_16x_lldpRemoteInventory.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/m4300_16x_mgmtVlanIpv4Configuration.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/m4300_16x_poeInterfaceConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/m4300_16x_portsConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/m4300_16x_vlanportcfg_vlan4.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/m4300_24x_poeInterfaceConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/m4300_addresstable.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/m4300_lldpRemoteInventory.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/m4300_mgmtVlanIpv4Configuration.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/m4300_ports.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/m4300_portstats.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/m4300_pvid.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/m4300_sysinfo.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/m4300_vlanportcfg_vlan1.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/http/m4300_vlanstatus.html +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/snmp/gsm7252ps_fans.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/snmp/gsm7252ps_ifhighspeed.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/snmp/gsm7252ps_ifoperstatus.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/fixtures/snmp/gsm7252ps_psu.txt +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/http_specs.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/cli/test_cli_parse.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/http/test_crypt.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/http/test_endpoints.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/http/test_forms.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/http/test_parse.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/nsdp/test_auth.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/nsdp/test_parsers.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/nsdp/test_protocol.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/nsdp/test_write_frame.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/snmp/test_client.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/snmp/test_oids.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/snmp/test_parse_lldp_macs.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/snmp/test_parse_mgmt_ip.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/snmp/test_parse_poe_sensors.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/snmp/test_parse_ports.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/snmp/test_parse_system_info.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/snmp/test_parse_vlans.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/protocols/snmp/test_write_encode.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_aio_api.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_capabilities.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_cli_read.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_cli_vlan_write.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_cli_write.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_config.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_cross_backend_equivalence.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_deb_version.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_dispatch.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_docs_coverage.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_errors.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_facade_equivalence.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_http_dispatch.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_http_equivalence.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_http_read.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_http_vlan_membership.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_http_write.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_http_xui_writes.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_import.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_mcp_server.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_models.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_models_snmp_read.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_nsdp_integration.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_nsdp_read.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_nsdp_write.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_public_api.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_quality_gates.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_registry.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_snmp_integration.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_snmp_read.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_snmp_write.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_sync_api.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_version.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/test_write_equivalence.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/transport/_fastpath_fake.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/transport/test_cli_console.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/transport/test_cli_scp_cert.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/transport/test_cli_telnet.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/transport/test_http_client.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/transport/test_nsdp_udp_sync.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/transport/test_set_transport.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/transport/test_snmp_netsnmp_cli.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/transport/test_snmp_pysnmp.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/transport/test_value_parity.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_cli_cross_backend.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_cli_gsm7228ps_parity.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_gsm7228ps_seed.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_hostname.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_m4300_seeds.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_mibview.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_mutable_state.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_nsdp_state.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_serve_daemon.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_snmp_write_face.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_state_seed.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_switchport_vlan_write.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_virtual_http_face.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_virtual_nsdp_face.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_virtual_snmp_face.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/tests/virtual/test_web_projection.py +0 -0
- {python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/uv.lock +0 -0
{python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-netgear-switch-library
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.post346
|
|
4
4
|
Summary: Python library and CLI to query and control Netgear switches over SNMP, NSDP and HTTP.
|
|
5
5
|
Author-email: Tim Ansell <me@mith.ro>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 0, '
|
|
21
|
+
__version__ = version = '0.0.post346'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 0, 'post346')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -95,6 +95,8 @@ if TYPE_CHECKING:
|
|
|
95
95
|
PortStats,
|
|
96
96
|
PortStatus,
|
|
97
97
|
Sensor,
|
|
98
|
+
ServiceStatus,
|
|
99
|
+
SwitchUser,
|
|
98
100
|
SyslogConfig,
|
|
99
101
|
VLANInfo,
|
|
100
102
|
VlanMode,
|
|
@@ -452,6 +454,20 @@ class AsyncSwitch:
|
|
|
452
454
|
"""Async twin of ``SyncSwitch.get_syslog`` -- see there."""
|
|
453
455
|
return await self._read(lambda r: r.get_syslog(), backend)
|
|
454
456
|
|
|
457
|
+
async def get_users(self, *, backend: Backend | None = None) -> list[SwitchUser]:
|
|
458
|
+
"""Async twin of ``SyncSwitch.get_users``.
|
|
459
|
+
|
|
460
|
+
AsyncSwitch has no CLI backend, so this refuses on every model -- the
|
|
461
|
+
same honest refusal every async CLI read gives.
|
|
462
|
+
"""
|
|
463
|
+
return await self._read(lambda r: r.get_users(), backend)
|
|
464
|
+
|
|
465
|
+
async def get_services(
|
|
466
|
+
self, *, backend: Backend | None = None
|
|
467
|
+
) -> list[ServiceStatus]:
|
|
468
|
+
"""Async twin of ``SyncSwitch.get_services`` -- CLI only, see there."""
|
|
469
|
+
return await self._read(lambda r: r.get_services(), backend)
|
|
470
|
+
|
|
455
471
|
async def get_hostname(self, *, backend: Backend | None = None) -> str:
|
|
456
472
|
"""Async twin of ``SyncSwitch.get_hostname`` -- see there."""
|
|
457
473
|
return await self._read(lambda r: r.get_hostname(), backend)
|
|
@@ -114,6 +114,28 @@ READ_OPERATIONS: tuple[Operation, ...] = (
|
|
|
114
114
|
Operation("get_sensors", OperationKind.READ, "Fan/PSU/temperature sensors"),
|
|
115
115
|
Operation("get_mgmt_ip", OperationKind.READ, "Management IP configuration"),
|
|
116
116
|
Operation("get_hostname", OperationKind.READ, "The switch's host name"),
|
|
117
|
+
Operation(
|
|
118
|
+
"get_users",
|
|
119
|
+
OperationKind.READ,
|
|
120
|
+
"Local login accounts and their access level",
|
|
121
|
+
# CLI only, deliberately. The S3300's vendor SNMP user table holds ONE
|
|
122
|
+
# account where its own CLI lists two, so the two backends do not report
|
|
123
|
+
# the same set; claiming both serve this would assert an equivalence the
|
|
124
|
+
# hardware contradicts. Restricting it to the CLI makes no cross-backend
|
|
125
|
+
# claim at all, and leaves the SNMP question open rather than answered
|
|
126
|
+
# wrongly.
|
|
127
|
+
backends=_CLI_BACKENDS,
|
|
128
|
+
),
|
|
129
|
+
Operation(
|
|
130
|
+
"get_services",
|
|
131
|
+
OperationKind.READ,
|
|
132
|
+
"Which management services (http/https/telnet/ssh) are enabled",
|
|
133
|
+
# CLI only so far: `show ip http`, `show telnetcon` and `show ip ssh`
|
|
134
|
+
# are measured, and the SNMP/HTTP/NSDP equivalents are unlocated rather
|
|
135
|
+
# than absent. The four models with no CLI backend therefore have no
|
|
136
|
+
# route to this yet, which the support table now shows as a hole.
|
|
137
|
+
backends=_CLI_BACKENDS,
|
|
138
|
+
),
|
|
117
139
|
Operation(
|
|
118
140
|
"get_syslog",
|
|
119
141
|
OperationKind.READ,
|
|
@@ -36,6 +36,7 @@ if TYPE_CHECKING:
|
|
|
36
36
|
PortStats,
|
|
37
37
|
PortStatus,
|
|
38
38
|
Sensor,
|
|
39
|
+
ServiceStatus,
|
|
39
40
|
SwitchUser,
|
|
40
41
|
SyslogConfig,
|
|
41
42
|
VLANInfo,
|
|
@@ -105,6 +106,19 @@ class CliReader:
|
|
|
105
106
|
def get_mgmt_ip(self) -> MgmtIpConfig:
|
|
106
107
|
return parse.parse_mgmt_ip(self.session.run(self._spec.network_cmd))
|
|
107
108
|
|
|
109
|
+
def get_services(self) -> list[ServiceStatus]:
|
|
110
|
+
"""Which management services are enabled, and on which ports.
|
|
111
|
+
|
|
112
|
+
Three commands, because the switch splits it that way -- and the telnet
|
|
113
|
+
one is ``show telnetcon``, not ``show telnet``. See
|
|
114
|
+
``parse.parse_services`` for why that distinction matters.
|
|
115
|
+
"""
|
|
116
|
+
return parse.parse_services(
|
|
117
|
+
self.session.run(self._spec.http_service_cmd),
|
|
118
|
+
self.session.run(self._spec.telnet_service_cmd),
|
|
119
|
+
self.session.run(self._spec.ssh_service_cmd),
|
|
120
|
+
)
|
|
121
|
+
|
|
108
122
|
def get_users(self) -> list[SwitchUser]:
|
|
109
123
|
"""The switch's local login accounts, from ``show users``.
|
|
110
124
|
|
|
@@ -119,6 +119,23 @@ class MgmtIpConfig:
|
|
|
119
119
|
base_mac: str | None = None
|
|
120
120
|
|
|
121
121
|
|
|
122
|
+
@dataclass(frozen=True)
|
|
123
|
+
class ServiceStatus:
|
|
124
|
+
"""One management service the switch offers, and whether it is on.
|
|
125
|
+
|
|
126
|
+
Covers the four protocols an operator turns on or off to control how the
|
|
127
|
+
switch itself can be reached: ``http``, ``https``, ``telnet`` and ``ssh``.
|
|
128
|
+
"""
|
|
129
|
+
|
|
130
|
+
#: One of ``http``, ``https``, ``telnet``, ``ssh``.
|
|
131
|
+
name: str
|
|
132
|
+
enabled: bool
|
|
133
|
+
#: The TCP port the service listens on, or ``None`` where the firmware does
|
|
134
|
+
#: not report one. Measured: gsm7252ps omits the ``SSH Port`` line that
|
|
135
|
+
#: m4300-24x prints, so this is genuinely absent rather than defaulted to 22.
|
|
136
|
+
port: int | None = None
|
|
137
|
+
|
|
138
|
+
|
|
122
139
|
@dataclass(frozen=True)
|
|
123
140
|
class SwitchUser:
|
|
124
141
|
"""One local login account on the switch."""
|
|
@@ -106,6 +106,12 @@ class CliModelSpec:
|
|
|
106
106
|
# Local login accounts. Present on both FASTPATH images measured; the
|
|
107
107
|
# ACCESS-MODE vocabulary differs between them (see parse.parse_users).
|
|
108
108
|
users_cmd: str = "show users"
|
|
109
|
+
# Management services. `show ip http` covers BOTH web servers; the inbound
|
|
110
|
+
# telnet server is `show telnetcon` and NOT `show telnet`, which reports
|
|
111
|
+
# the switch as an outbound telnet CLIENT (measured 2026-08-02).
|
|
112
|
+
http_service_cmd: str = "show ip http"
|
|
113
|
+
telnet_service_cmd: str = "show telnetcon"
|
|
114
|
+
ssh_service_cmd: str = "show ip ssh"
|
|
109
115
|
# Remote logging. `show syslog` does NOT exist -- all three FASTPATH
|
|
110
116
|
# switches answered "% Invalid input detected" on 2026-08-02.
|
|
111
117
|
logging_cmd: str = "show logging"
|
|
@@ -42,6 +42,7 @@ from ...models import (
|
|
|
42
42
|
PortStats,
|
|
43
43
|
PortStatus,
|
|
44
44
|
Sensor,
|
|
45
|
+
ServiceStatus,
|
|
45
46
|
SwitchUser,
|
|
46
47
|
SyslogConfig,
|
|
47
48
|
SyslogServer,
|
|
@@ -609,6 +610,76 @@ def parse_environment(text: str) -> list[Sensor]:
|
|
|
609
610
|
return out
|
|
610
611
|
|
|
611
612
|
|
|
613
|
+
# ---------------------------------------------------------------------------
|
|
614
|
+
# show ip http / show telnetcon / show ip ssh -> management services
|
|
615
|
+
# ---------------------------------------------------------------------------
|
|
616
|
+
|
|
617
|
+
|
|
618
|
+
def _enabled(text: str) -> bool:
|
|
619
|
+
"""FASTPATH spells this two ways: "Enabled" and "Enable"."""
|
|
620
|
+
return text.strip().lower() in {"enabled", "enable", "yes"}
|
|
621
|
+
|
|
622
|
+
|
|
623
|
+
def parse_services(
|
|
624
|
+
http_text: str, telnet_text: str, ssh_text: str
|
|
625
|
+
) -> list[ServiceStatus]:
|
|
626
|
+
"""The four management services, from the three commands that report them.
|
|
627
|
+
|
|
628
|
+
Captured 2026-08-02 from m4300-24x (10.1.5.13) and gsm7252ps (10.1.5.22).
|
|
629
|
+
|
|
630
|
+
``show ip http`` carries BOTH the plain and secure web servers::
|
|
631
|
+
|
|
632
|
+
HTTP Mode (Unsecure)........................... Enabled
|
|
633
|
+
HTTP Port...................................... 80
|
|
634
|
+
HTTP Mode (Secure)............................. Enabled
|
|
635
|
+
Secure Port.................................... 443
|
|
636
|
+
|
|
637
|
+
``show telnetcon`` -- NOT ``show telnet`` -- reports the INBOUND server::
|
|
638
|
+
|
|
639
|
+
Telnet Server Admin Mode....................... Enable
|
|
640
|
+
Telnet Server Port............................. 23
|
|
641
|
+
|
|
642
|
+
``show telnet`` describes the switch as a telnet *client* ("Allow New
|
|
643
|
+
Outbound Telnet Sessions"), which says nothing about whether the server this
|
|
644
|
+
library's TELNET backend connects to is running. Reading it as the server
|
|
645
|
+
state would be wrong in the way that looks right.
|
|
646
|
+
|
|
647
|
+
``show ip ssh`` reports SSH, and its field set differs by firmware: the
|
|
648
|
+
gsm7252ps prints no ``SSH Port`` line at all, so that port is honestly None
|
|
649
|
+
rather than assumed to be 22.
|
|
650
|
+
"""
|
|
651
|
+
http = labelled_values(http_text)
|
|
652
|
+
telnet = labelled_values(telnet_text)
|
|
653
|
+
# `show ip ssh` writes its labels WITH a trailing colon before the dotted
|
|
654
|
+
# leader ("Administrative Mode: ......... Enabled"), unlike every other
|
|
655
|
+
# FASTPATH scalar command. Measured on both m4300-24x and gsm7252ps. Without
|
|
656
|
+
# stripping it the lookup misses and SSH reads as disabled on a switch whose
|
|
657
|
+
# own output says Enabled -- which is exactly what the first live run did.
|
|
658
|
+
ssh = {k.rstrip(":").strip(): v for k, v in labelled_values(ssh_text).items()}
|
|
659
|
+
return [
|
|
660
|
+
ServiceStatus(
|
|
661
|
+
name="http",
|
|
662
|
+
enabled=_enabled(http.get("HTTP Mode (Unsecure)", "")),
|
|
663
|
+
port=_int(http.get("HTTP Port", "")),
|
|
664
|
+
),
|
|
665
|
+
ServiceStatus(
|
|
666
|
+
name="https",
|
|
667
|
+
enabled=_enabled(http.get("HTTP Mode (Secure)", "")),
|
|
668
|
+
port=_int(http.get("Secure Port", "")),
|
|
669
|
+
),
|
|
670
|
+
ServiceStatus(
|
|
671
|
+
name="telnet",
|
|
672
|
+
enabled=_enabled(telnet.get("Telnet Server Admin Mode", "")),
|
|
673
|
+
port=_int(telnet.get("Telnet Server Port", "")),
|
|
674
|
+
),
|
|
675
|
+
ServiceStatus(
|
|
676
|
+
name="ssh",
|
|
677
|
+
enabled=_enabled(ssh.get("Administrative Mode", "")),
|
|
678
|
+
port=_int(ssh.get("SSH Port", "")),
|
|
679
|
+
),
|
|
680
|
+
]
|
|
681
|
+
|
|
682
|
+
|
|
612
683
|
# ---------------------------------------------------------------------------
|
|
613
684
|
# show users -> local login accounts
|
|
614
685
|
# ---------------------------------------------------------------------------
|
|
@@ -157,6 +157,8 @@ if TYPE_CHECKING:
|
|
|
157
157
|
PortStats,
|
|
158
158
|
PortStatus,
|
|
159
159
|
Sensor,
|
|
160
|
+
ServiceStatus,
|
|
161
|
+
SwitchUser,
|
|
160
162
|
SyslogConfig,
|
|
161
163
|
VLANInfo,
|
|
162
164
|
VlanMode,
|
|
@@ -564,6 +566,23 @@ class SyncSwitch:
|
|
|
564
566
|
"""
|
|
565
567
|
return self._read(lambda r: r.get_syslog(), backend)
|
|
566
568
|
|
|
569
|
+
def get_users(self, *, backend: Backend | None = None) -> list[SwitchUser]:
|
|
570
|
+
"""The switch's local login accounts.
|
|
571
|
+
|
|
572
|
+
Served over the FASTPATH CLI. ``SwitchUser.access_mode`` keeps the
|
|
573
|
+
firmware's own wording, which differs between images, and
|
|
574
|
+
``privileged`` carries the normalised reading.
|
|
575
|
+
"""
|
|
576
|
+
return self._read(lambda r: r.get_users(), backend)
|
|
577
|
+
|
|
578
|
+
def get_services(self, *, backend: Backend | None = None) -> list[ServiceStatus]:
|
|
579
|
+
"""Which management services are enabled, and on which ports.
|
|
580
|
+
|
|
581
|
+
Served over the FASTPATH CLI. A ``port`` of ``None`` means the firmware
|
|
582
|
+
reports no port for that service, not that a default applies.
|
|
583
|
+
"""
|
|
584
|
+
return self._read(lambda r: r.get_services(), backend)
|
|
585
|
+
|
|
567
586
|
def get_hostname(self, *, backend: Backend | None = None) -> str:
|
|
568
587
|
"""The switch's host name.
|
|
569
588
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/.gitignore
RENAMED
|
File without changes
|
|
File without changes
|
{python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/CLAUDE.md
RENAMED
|
File without changes
|
{python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/LICENSE
RENAMED
|
File without changes
|
{python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/README.md
RENAMED
|
File without changes
|
{python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/RELEASING.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/debian/rules
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/cli.rst
RENAMED
|
File without changes
|
{python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/conf.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_netgear_switch_library-0.0.post344 → python_netgear_switch_library-0.0.post346}/docs/mcp.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|