python-netgear-switch-library 0.0.post342__tar.gz → 0.0.post344__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.post342 → python_netgear_switch_library-0.0.post344}/PKG-INFO +1 -1
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/superpowers/specs/2026-08-02-snmp-surface-findings.md +66 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/_version.py +2 -2
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/cli_read.py +10 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/models.py +22 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/cli/commands.py +3 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/cli/parse.py +61 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/.github/workflows/ci.yml +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/.github/workflows/deb.yml +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/.github/workflows/publish-pypi.yml +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/.gitignore +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/.readthedocs.yaml +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/CLAUDE.md +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/LICENSE +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/README.md +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/RELEASING.md +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/debian/changelog +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/debian/control +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/debian/copyright +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/debian/rules +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/debian/source/format +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/Makefile +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/_ext/filelinks.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/_ext/support_tables.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/_static/models/gs105pe.png +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/_static/models/gs110emx.png +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/_static/models/gs305ep.png +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/_static/models/gs728tpp.png +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/_static/models/gsm7228ps.jpg +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/_static/models/gsm7252ps.jpg +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/_static/models/m4300-16x.png +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/_static/models/m4300-24x.png +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/_static/ngsw.css +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/api/cli.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/api/core.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/api/facades.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/api/index.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/api/mcp.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/api/operations.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/api/protocols.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/api/transport.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/api/virtual.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/cli.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/conf.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/development.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/fake/index.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/fake/internals.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/fake/serving.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/fake/testing.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/guide/concepts.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/guide/configuration.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/guide/installation.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/guide/principles.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/guide/quickstart.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/guide/reading.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/guide/writing.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/index.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/mcp.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/models/gs105pe.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/models/gs110emx.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/models/gs305ep.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/models/gs728tpp.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/models/gsm7228ps.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/models/gsm7252ps.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/models/index.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/models/m4300-16x.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/models/m4300-24x.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/models/support.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/protocols/cli.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/protocols/http/cheetah-form.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/protocols/http/cheetah-v1.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/protocols/http/gambit.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/protocols/http/merge-hash-cgi.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/protocols/http/xml-api.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/protocols/http.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/protocols/index.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/protocols/nsdp.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/protocols/snmp.rst +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/superpowers/plans/2026-07-15-foundation.md +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/superpowers/plans/2026-07-17-slice-02-snmp-read-core.md +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/superpowers/plans/2026-07-17-slice-03-read-apis.md +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/superpowers/plans/2026-07-18-slice-04-snmp-write.md +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/superpowers/plans/2026-07-18-slice-05-nsdp.md +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/superpowers/plans/2026-07-18-slice-06-http.md +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/superpowers/plans/2026-07-18-slice-07-cli.md +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/superpowers/plans/2026-07-18-slice-08-packaging-ci.md +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/superpowers/plans/2026-07-23-gsm7252ps-http-xe-dialect.md +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/superpowers/specs/2026-07-15-netgear-control-library-design.md +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/docs/superpowers/specs/2026-07-23-gsm7252ps-http-xe-dialect-design.md +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/packaging/apt-index.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/packaging/ci-build.sh +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/packaging/deb-version.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/pyproject.toml +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/_dispatch.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/aio_api.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/capabilities.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/cli/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/cli/capture.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/cli/context.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/cli/format.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/cli/main.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/cli/resolve.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/cli/safety.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/cli_write.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/config.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/errors.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/http_read.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/http_write.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/mcp/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/mcp/server.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/nsdp_read.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/nsdp_write.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/cli/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/http/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/http/crypt.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/http/endpoints.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/http/forms.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/http/parse.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/http/session.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/http/types.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/nsdp/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/nsdp/auth.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/nsdp/client.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/nsdp/parsers.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/nsdp/protocol.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/nsdp/types.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/nsdp/write.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/snmp/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/snmp/client.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/snmp/oids.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/snmp/parse.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/protocols/snmp/write.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/py.typed +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/registry.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/snmp_read.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/snmp_write.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/sync_api.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/transport/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/transport/aio/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/transport/aio/nsdp_udp.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/transport/aio/snmp_pysnmp.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/transport/cli/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/transport/cli/console.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/transport/cli/session.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/transport/cli/ssh.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/transport/cli/telnet.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/transport/http/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/transport/http/client.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/transport/sync/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/transport/sync/nsdp_udp.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/transport/sync/snmp_netsnmp_cli.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/cli_fastpath.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/faces/__init__.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/faces/cli.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/faces/http.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/faces/mibview.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/faces/nsdp.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/faces/snmp.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/seed.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/server.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/state.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/web.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/web_fastpath_vlan.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/web_fastpath_xui.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/web_gs105pe.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/web_gs110emx.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/web_gs110emx_templates.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/web_gs728tpp.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/web_gsm7228ps.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/web_gsm7252ps.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/src/netgear_switch/virtual/web_m4300.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/capture_parity.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/cli/test_capture.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/cli/test_cli_integration.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/cli/test_control_poe_port.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/cli/test_control_vlan_ip.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/cli/test_format.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/cli/test_main_framework.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/cli/test_new_commands.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/cli/test_op_coverage.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/cli/test_prompt_wiring.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/cli/test_read_commands.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/cli/test_resolve.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/cli/test_safety.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/cli/test_serve.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/conftest.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/equivalence.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/captures/gsm7228ps.json +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/captures/gsm7252ps.json +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/captures/m4300-16x.json +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/captures/m4300-24x.json +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7228ps_environment.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7228ps_lldp.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7228ps_mac_table.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7228ps_network.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7228ps_poe.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7228ps_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7228ps_show_version.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7228ps_vlan.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7228ps_vlan_brief.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7228ps_vlan_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7252ps_show_environment.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7252ps_show_interface_ethernet_1_0_1.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7252ps_show_lldp_remote_device_all.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7252ps_show_mac_addr_table.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7252ps_show_network.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7252ps_show_poe_port_info_all.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7252ps_show_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7252ps_show_version.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7252ps_show_vlan_90.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7252ps_show_vlan_brief.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/gsm7252ps_show_vlan_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_16x_show_environment.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_16x_show_interface_ethernet_1_0_1.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_16x_show_ip_management.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_16x_show_lldp_remote_device_all.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_16x_show_mac_addr_table.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_16x_show_poe_port_info_all.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_16x_show_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_16x_show_version.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_16x_show_vlan.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_16x_show_vlan_1.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_16x_show_vlan_4.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_16x_show_vlan_5.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_16x_show_vlan_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_24x_show_environment.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_24x_show_interface_ethernet_1_0_1.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_24x_show_ip_management.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_24x_show_lldp_remote_device_all.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_24x_show_mac_addr_table.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_24x_show_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_24x_show_version.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_24x_show_vlan.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_24x_show_vlan_5.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_24x_show_vlan_90.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/cli/m4300_24x_show_vlan_port_all.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs105pe_membership.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs105pe_portstats.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs105pe_pvid.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs105pe_status.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs105pe_switch_info.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs105pe_vlancfg.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs110emx_cf8021q.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs110emx_interface_stats.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs110emx_login.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs110emx_port_settings.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs110emx_pvid.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs110emx_redirect.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs110emx_sysinfo.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs110emx_vlanmembership.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs305ep_dashboard.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs305ep_login.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs305ep_membership.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs305ep_poestatus.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs305ep_portstats.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs305ep_pvid.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs305ep_vlancfg.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs728tpp_device_info_and_sensors.xml +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs728tpp_lldp.xml +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs728tpp_macs.xml +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs728tpp_mgmt_ip.xml +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs728tpp_poe.xml +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs728tpp_ports.xml +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs728tpp_pvids_membership.xml +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs728tpp_vlan_membership_per_vlan.xml +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gs728tpp_vlans.xml +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7228ps_basicAddressTable.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7228ps_ipConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7228ps_lldpRemoteInventory.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7228ps_poeInterfaceConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7228ps_portPvidConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7228ps_portStatistics.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7228ps_portsConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7228ps_sysInfo.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7228ps_vlanPortCfg_vlan5.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7228ps_vlanStatus.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7252ps_basicAddressTable.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7252ps_ipConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7252ps_lldpRemoteInventory.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7252ps_login.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7252ps_poeInterfaceConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7252ps_portPvidConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7252ps_portStatistics.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7252ps_portsConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7252ps_sysInfo.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7252ps_vlanPortCfg_vlan1.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7252ps_vlanPortCfg_vlan141.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/gsm7252ps_vlanStatus.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/m4300_16x_lldpRemoteInventory.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/m4300_16x_mgmtVlanIpv4Configuration.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/m4300_16x_poeInterfaceConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/m4300_16x_portsConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/m4300_16x_vlanportcfg_vlan4.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/m4300_24x_poeInterfaceConfiguration.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/m4300_addresstable.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/m4300_lldpRemoteInventory.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/m4300_mgmtVlanIpv4Configuration.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/m4300_ports.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/m4300_portstats.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/m4300_pvid.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/m4300_sysinfo.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/m4300_vlanportcfg_vlan1.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/http/m4300_vlanstatus.html +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/snmp/gsm7252ps_fans.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/snmp/gsm7252ps_ifhighspeed.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/snmp/gsm7252ps_ifoperstatus.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/fixtures/snmp/gsm7252ps_psu.txt +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/http_specs.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/cli/test_cli_parse.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/http/test_crypt.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/http/test_endpoints.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/http/test_forms.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/http/test_parse.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/nsdp/test_auth.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/nsdp/test_parsers.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/nsdp/test_protocol.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/nsdp/test_write_frame.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/snmp/test_client.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/snmp/test_oids.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/snmp/test_parse_lldp_macs.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/snmp/test_parse_mgmt_ip.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/snmp/test_parse_poe_sensors.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/snmp/test_parse_ports.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/snmp/test_parse_system_info.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/snmp/test_parse_vlans.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/protocols/snmp/test_write_encode.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_aio_api.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_capabilities.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_cli_read.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_cli_vlan_write.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_cli_write.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_config.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_cross_backend_equivalence.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_deb_version.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_dispatch.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_docs_coverage.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_errors.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_facade_equivalence.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_http_dispatch.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_http_equivalence.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_http_read.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_http_vlan_membership.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_http_write.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_http_xui_writes.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_import.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_mcp_server.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_models.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_models_snmp_read.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_nsdp_integration.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_nsdp_read.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_nsdp_write.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_public_api.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_quality_gates.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_registry.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_snmp_integration.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_snmp_read.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_snmp_write.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_sync_api.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_version.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/test_write_equivalence.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/transport/_fastpath_fake.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/transport/test_cli_console.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/transport/test_cli_scp_cert.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/transport/test_cli_telnet.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/transport/test_http_client.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/transport/test_nsdp_udp_sync.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/transport/test_set_transport.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/transport/test_snmp_netsnmp_cli.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/transport/test_snmp_pysnmp.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/transport/test_value_parity.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_cli_cross_backend.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_cli_gsm7228ps_parity.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_gsm7228ps_seed.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_hostname.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_m4300_seeds.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_mibview.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_mutable_state.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_nsdp_state.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_serve_daemon.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_snmp_write_face.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_state_seed.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_switchport_vlan_write.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_virtual_http_face.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_virtual_nsdp_face.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_virtual_snmp_face.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/tests/virtual/test_web_projection.py +0 -0
- {python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/uv.lock +0 -0
{python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/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.post344
|
|
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
|
|
@@ -149,3 +149,69 @@ user**, a different thing from a local login account. They must not be conflated
|
|
|
149
149
|
- Port speed/duplex **configuration** (as opposed to `ifHighSpeed`, which is the
|
|
150
150
|
negotiated rate). EtherLike-MIB `dot3` at `1.3.6.1.2.1.10.7` carries 1416
|
|
151
151
|
varbinds on the S3300 and is the obvious candidate for duplex status.
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
## Local users and service protocols — CLI, measured 2026-08-02
|
|
155
|
+
|
|
156
|
+
Captured from m4300-24x (10.1.5.13) and gsm7252ps (10.1.5.22). Three things
|
|
157
|
+
here would have been got wrong by assuming, which is why they are recorded
|
|
158
|
+
before any code is written against them.
|
|
159
|
+
|
|
160
|
+
### `show users` — two users, and the access-mode WORDS differ by firmware
|
|
161
|
+
|
|
162
|
+
Both switches carry `admin` and `guest`, and both print the same five columns
|
|
163
|
+
(User Name, User Access Mode, three SNMPv3 columns). The **values** are not the
|
|
164
|
+
same vocabulary:
|
|
165
|
+
|
|
166
|
+
| Switch | admin | guest |
|
|
167
|
+
|---|---|---|
|
|
168
|
+
| m4300-24x | `Privilege-15` | `Privilege-1` |
|
|
169
|
+
| gsm7252ps | `Read/Write` | `Read Only` |
|
|
170
|
+
|
|
171
|
+
A parser mapping the access-mode column to an enum must accept both spellings.
|
|
172
|
+
Matching on `Privilege-N` alone would silently fail on the gsm7252ps and vice
|
|
173
|
+
versa — the same shape of defect as the `show logging hosts` column count.
|
|
174
|
+
|
|
175
|
+
`show users long` prints just the names, on both.
|
|
176
|
+
|
|
177
|
+
### `show telnet` is OUTBOUND telnet, not the telnet server
|
|
178
|
+
|
|
179
|
+
Outbound Telnet Login Timeout (minutes)........ 5
|
|
180
|
+
Maximum Number of Outbound Telnet Sessions..... 5
|
|
181
|
+
Allow New Outbound Telnet Sessions............. Yes
|
|
182
|
+
|
|
183
|
+
Every field is about the switch acting as a telnet **client**. None of it
|
|
184
|
+
reports whether the inbound telnet server — the thing this library's TELNET
|
|
185
|
+
backend connects to — is enabled. Reading "Allow New Outbound Telnet Sessions:
|
|
186
|
+
Yes" as "telnet is on" would be wrong in exactly the way that looks right.
|
|
187
|
+
The inbound server state has NOT been located yet.
|
|
188
|
+
|
|
189
|
+
### `show ip ssh` works, but its field set differs by firmware
|
|
190
|
+
|
|
191
|
+
Administrative Mode: .......................... Enabled
|
|
192
|
+
SSH Port: ..................................... 22 <- m4300 ONLY
|
|
193
|
+
Protocol Levels: .............................. Version 2
|
|
194
|
+
Max SSH Sessions Allowed: ..................... 5
|
|
195
|
+
|
|
196
|
+
The gsm7252ps prints **no `SSH Port` line at all**, and reports its protocol
|
|
197
|
+
levels as `Versions 1 and 2` against the m4300's `Version 2`. A reader must
|
|
198
|
+
treat the port as optional rather than assume every FASTPATH image reports it.
|
|
199
|
+
|
|
200
|
+
### HTTP has no `show ip http server`
|
|
201
|
+
|
|
202
|
+
Both switches answer `% Invalid input detected` to `show ip http server` and to
|
|
203
|
+
`show ip http secure-server`. The command that reports web-server state has not
|
|
204
|
+
been found yet; it is not either of those.
|
|
205
|
+
|
|
206
|
+
### What this means for implementation
|
|
207
|
+
|
|
208
|
+
`get_users` is implementable on the FASTPATH CLI today, across both firmwares,
|
|
209
|
+
provided the access-mode parser accepts both vocabularies. Note the SNMP side
|
|
210
|
+
disagrees about scope: the S3300's vendor user table (`4526.11.1.2.1.3`) held
|
|
211
|
+
only ONE user, while its CLI shows two — so the two backends are not reporting
|
|
212
|
+
the same set, and that must be resolved before `get_users` is registered as a
|
|
213
|
+
cross-backend operation.
|
|
214
|
+
|
|
215
|
+
Service protocols are NOT implementable yet: SSH state is readable, inbound
|
|
216
|
+
telnet state is unlocated, and HTTP state is unlocated. Recording that as three
|
|
217
|
+
separate unknowns rather than one blocked feature.
|
|
@@ -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.post344'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 0, 'post344')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -36,6 +36,7 @@ if TYPE_CHECKING:
|
|
|
36
36
|
PortStats,
|
|
37
37
|
PortStatus,
|
|
38
38
|
Sensor,
|
|
39
|
+
SwitchUser,
|
|
39
40
|
SyslogConfig,
|
|
40
41
|
VLANInfo,
|
|
41
42
|
)
|
|
@@ -104,6 +105,15 @@ class CliReader:
|
|
|
104
105
|
def get_mgmt_ip(self) -> MgmtIpConfig:
|
|
105
106
|
return parse.parse_mgmt_ip(self.session.run(self._spec.network_cmd))
|
|
106
107
|
|
|
108
|
+
def get_users(self) -> list[SwitchUser]:
|
|
109
|
+
"""The switch's local login accounts, from ``show users``.
|
|
110
|
+
|
|
111
|
+
The access-mode wording differs between firmware images, so
|
|
112
|
+
``SwitchUser.access_mode`` keeps the raw text and ``privileged``
|
|
113
|
+
carries the normalised reading -- see ``parse.parse_users``.
|
|
114
|
+
"""
|
|
115
|
+
return parse.parse_users(self.session.run(self._spec.users_cmd))
|
|
116
|
+
|
|
107
117
|
def get_syslog(self) -> SyslogConfig:
|
|
108
118
|
"""Remote-logging configuration, from ``show logging`` + its host table.
|
|
109
119
|
|
|
@@ -119,6 +119,28 @@ class MgmtIpConfig:
|
|
|
119
119
|
base_mac: str | None = None
|
|
120
120
|
|
|
121
121
|
|
|
122
|
+
@dataclass(frozen=True)
|
|
123
|
+
class SwitchUser:
|
|
124
|
+
"""One local login account on the switch."""
|
|
125
|
+
|
|
126
|
+
name: str
|
|
127
|
+
#: The access mode exactly as this firmware words it. Kept verbatim because
|
|
128
|
+
#: the vocabulary is NOT the same across images: measured 2026-08-02, the
|
|
129
|
+
#: m4300-24x prints ``Privilege-15``/``Privilege-1`` where the gsm7252ps
|
|
130
|
+
#: prints ``Read/Write``/``Read Only`` for the same two accounts.
|
|
131
|
+
access_mode: str
|
|
132
|
+
#: Whether ``access_mode`` is the full-privilege level, normalised across
|
|
133
|
+
#: both vocabularies so callers do not have to know which image they are on.
|
|
134
|
+
#: ``None`` when the text is neither spelling -- an unrecognised level is
|
|
135
|
+
#: reported honestly rather than guessed as unprivileged.
|
|
136
|
+
privileged: bool | None
|
|
137
|
+
#: The three SNMPv3 columns the same table carries. ``None`` where the
|
|
138
|
+
#: firmware prints nothing.
|
|
139
|
+
snmpv3_access: str | None = None
|
|
140
|
+
snmpv3_auth: str | None = None
|
|
141
|
+
snmpv3_encryption: str | None = None
|
|
142
|
+
|
|
143
|
+
|
|
122
144
|
@dataclass(frozen=True)
|
|
123
145
|
class SyslogServer:
|
|
124
146
|
"""One remote syslog collector the switch is configured to send to."""
|
|
@@ -103,6 +103,9 @@ class CliModelSpec:
|
|
|
103
103
|
# SNMP's sysName, so it is what keeps the two backends returning the same
|
|
104
104
|
# answer for the same switch.
|
|
105
105
|
hosts_cmd: str = "show hosts"
|
|
106
|
+
# Local login accounts. Present on both FASTPATH images measured; the
|
|
107
|
+
# ACCESS-MODE vocabulary differs between them (see parse.parse_users).
|
|
108
|
+
users_cmd: str = "show users"
|
|
106
109
|
# Remote logging. `show syslog` does NOT exist -- all three FASTPATH
|
|
107
110
|
# switches answered "% Invalid input detected" on 2026-08-02.
|
|
108
111
|
logging_cmd: str = "show logging"
|
|
@@ -42,6 +42,7 @@ from ...models import (
|
|
|
42
42
|
PortStats,
|
|
43
43
|
PortStatus,
|
|
44
44
|
Sensor,
|
|
45
|
+
SwitchUser,
|
|
45
46
|
SyslogConfig,
|
|
46
47
|
SyslogServer,
|
|
47
48
|
VLANInfo,
|
|
@@ -608,6 +609,66 @@ def parse_environment(text: str) -> list[Sensor]:
|
|
|
608
609
|
return out
|
|
609
610
|
|
|
610
611
|
|
|
612
|
+
# ---------------------------------------------------------------------------
|
|
613
|
+
# show users -> local login accounts
|
|
614
|
+
# ---------------------------------------------------------------------------
|
|
615
|
+
|
|
616
|
+
#: Access-mode text meaning full privilege, in BOTH vocabularies FASTPATH uses.
|
|
617
|
+
#: Measured 2026-08-02: m4300-24x prints "Privilege-15"/"Privilege-1" while
|
|
618
|
+
#: gsm7252ps prints "Read/Write"/"Read Only" for the same admin/guest pair. A
|
|
619
|
+
#: parser that knew only one spelling would silently mis-report the other image.
|
|
620
|
+
_PRIVILEGED_ACCESS = frozenset({"privilege-15", "read/write"})
|
|
621
|
+
_UNPRIVILEGED_ACCESS = frozenset({"privilege-1", "read only", "no access"})
|
|
622
|
+
|
|
623
|
+
|
|
624
|
+
def _privileged(access_mode: str) -> bool | None:
|
|
625
|
+
text = access_mode.strip().lower()
|
|
626
|
+
if text in _PRIVILEGED_ACCESS:
|
|
627
|
+
return True
|
|
628
|
+
if text in _UNPRIVILEGED_ACCESS:
|
|
629
|
+
return False
|
|
630
|
+
return None
|
|
631
|
+
|
|
632
|
+
|
|
633
|
+
def parse_users(text: str) -> list[SwitchUser]:
|
|
634
|
+
"""``show users`` -> the switch's local login accounts.
|
|
635
|
+
|
|
636
|
+
Captured 2026-08-02 from m4300-24x (10.1.5.13) and gsm7252ps (10.1.5.22);
|
|
637
|
+
both list ``admin`` and ``guest``, under a header that wraps over three
|
|
638
|
+
lines::
|
|
639
|
+
|
|
640
|
+
User SNMPv3 SNMPv3 SNMPv3
|
|
641
|
+
User Name Access Mode Access Mode Authentication Encryption
|
|
642
|
+
------------------------ ------------ ----------- -------------- ----------
|
|
643
|
+
admin Privilege-15 Read Only MD5 None
|
|
644
|
+
|
|
645
|
+
Sliced by the ruler rather than split on whitespace, because an access mode
|
|
646
|
+
legitimately contains a space (``Read Only``, ``Read/Write``) and a naive
|
|
647
|
+
split would tear it in half.
|
|
648
|
+
|
|
649
|
+
The ACCESS-MODE VOCABULARY differs by firmware -- see ``_PRIVILEGED_ACCESS``
|
|
650
|
+
-- so the raw text is preserved on ``SwitchUser.access_mode`` and only the
|
|
651
|
+
normalised ``privileged`` flag interprets it.
|
|
652
|
+
"""
|
|
653
|
+
users: list[SwitchUser] = []
|
|
654
|
+
for cells in iter_table_rows(text):
|
|
655
|
+
if not cells or not cells[0].strip():
|
|
656
|
+
continue
|
|
657
|
+
padded = [*cells, "", "", "", ""]
|
|
658
|
+
name, access, snmp_access, snmp_auth, snmp_enc = (c.strip() for c in padded[:5])
|
|
659
|
+
users.append(
|
|
660
|
+
SwitchUser(
|
|
661
|
+
name=name,
|
|
662
|
+
access_mode=access,
|
|
663
|
+
privileged=_privileged(access),
|
|
664
|
+
snmpv3_access=snmp_access or None,
|
|
665
|
+
snmpv3_auth=snmp_auth or None,
|
|
666
|
+
snmpv3_encryption=snmp_enc or None,
|
|
667
|
+
)
|
|
668
|
+
)
|
|
669
|
+
return users
|
|
670
|
+
|
|
671
|
+
|
|
611
672
|
# ---------------------------------------------------------------------------
|
|
612
673
|
# show logging / show logging hosts -> syslog configuration
|
|
613
674
|
# ---------------------------------------------------------------------------
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/.gitignore
RENAMED
|
File without changes
|
|
File without changes
|
{python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/CLAUDE.md
RENAMED
|
File without changes
|
{python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/LICENSE
RENAMED
|
File without changes
|
{python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/README.md
RENAMED
|
File without changes
|
{python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/RELEASING.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/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.post342 → python_netgear_switch_library-0.0.post344}/docs/cli.rst
RENAMED
|
File without changes
|
{python_netgear_switch_library-0.0.post342 → python_netgear_switch_library-0.0.post344}/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.post342 → python_netgear_switch_library-0.0.post344}/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
|
|
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
|