netbox-super-cli 1.0.6__tar.gz → 1.0.7__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.
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/CHANGELOG.md +18 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/PKG-INFO +3 -2
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/_version.py +1 -1
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/pyproject.toml +7 -2
- netbox_super_cli-1.0.7/tests/test_packaging.py +71 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/uv.lock +4 -2
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/agents-md-sync.yml +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/bench.yml +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/claude.yml +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/docs.yml +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/e2e.yml +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/lint.yml +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/release.yml +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/test.yml +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.gitignore +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.pre-commit-config.yaml +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.python-version +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/AGENTS.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/CLAUDE.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/LICENSE +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/README.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/architecture/caching.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/architecture/command-generation.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/architecture/http-client.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/architecture/overview.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/architecture/schema-loading.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/contributing/adding-bundled-schemas.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/contributing/branching.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/contributing/development.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/contributing/release-process.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/getting-started/concepts.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/getting-started/first-run.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/getting-started/install.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/guides/ci-and-automation.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/guides/managing-profiles.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/guides/output-formats.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/guides/using-with-ai-agents.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/guides/working-with-plugins.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/guides/writes-and-safety.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/index.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/reference/cli.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/reference/config.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/reference/exit-codes.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/reference/schemas.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/justfile +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/mkdocs.yml +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/__main__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/aliases/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/aliases/resolver.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/auth/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/auth/verify.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/builder/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/builder/build.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cache/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cache/store.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/aliases_commands.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/app.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/cache_commands.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/commands_dump.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/config_commands.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/globals.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/handlers.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/init_commands.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/login_commands.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/profiles_commands.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/registration.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/runtime.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/skill_commands.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/writes/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/writes/apply.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/writes/bulk.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/writes/coercion.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/writes/confirmation.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/writes/input.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/writes/preflight.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/config/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/config/loader.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/config/models.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/config/settings.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/config/writer.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/http/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/http/audit.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/http/client.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/http/errors.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/http/retry.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/model/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/model/command_model.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/_console.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/csv_.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/errors.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/explain.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/flatten.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/headers.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/json_.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/jsonl.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/render.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/table.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/yaml_.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schema/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schema/hashing.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schema/loader.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schema/models.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schema/source.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schemas/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schemas/bundled/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schemas/bundled/manifest.yaml +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schemas/bundled/netbox-4.5.10.json.gz +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schemas/bundled/netbox-4.6.0.json.gz +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/skill/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/scripts/gen_docs.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/scripts/sync_agents_md.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/skills/netbox-super-cli/SKILL.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/aliases/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/aliases/test_resolver.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/auth/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/auth/test_verify.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/benchmarks/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/benchmarks/test_startup.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/builder/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/builder/test_build.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/builder/test_default_columns.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/builder/test_redaction_marking.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/builder/test_request_body_shape.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cache/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cache/test_prune.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cache/test_store.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_aliases_commands.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_app_smoke.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_cache_commands.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_commands_dump.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_completion_smoke.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_config_commands.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_explain.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_globals_color.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_handlers.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_init_commands.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_login_commands.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_meta_subcommands_under_broken_config.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_ndjson_input.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_profiles_commands.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_registration.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_respx_integration.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_runtime.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_runtime_color.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_skill_commands.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_stdin_sniffer.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_writes_respx.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/test_apply.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/test_bulk.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/test_confirmation.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/test_handler_helpers.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/test_handlers_audit.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/test_input.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/test_preflight.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/config/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/config/test_loader.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/config/test_models.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/config/test_writer_atomicity.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/config/test_writer_dotted_paths.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/config/test_writer_roundtrip.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/conftest.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/README.md +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/conftest.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/docker-compose.yml +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_audit_redaction.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_auth_error_envelope.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_bulk_create_with_loop_fallback.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_full_cycle.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_login.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_ndjson.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_preflight_blocks_apply.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_validation_error_envelope_from_netbox.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/wait_for_netbox.sh +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/profiles/single_profile.yaml +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/responses/auth_401.json +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/responses/circuits_providers_list.json +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/responses/dcim_devices_get.json +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/responses/dcim_devices_list_p1.json +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/responses/dcim_devices_list_p2.json +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/http/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/http/test_audit.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/http/test_audit_redaction.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/http/test_client.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/http/test_client_redaction_threading.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/http/test_errors.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/http/test_retry.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/model/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/model/test_command_model.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/model/test_request_body_shape.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_console.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_csv.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_errors.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_errors_aliases.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_errors_color.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_explain.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_explain_color.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_flatten.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_input_error_envelope.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_json.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_jsonl.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_render_dispatch.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_table.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_table_color.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_yaml.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/schema/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/schema/test_hashing.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/schema/test_loader.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/schema/test_models.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/schema/test_source.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/schema/test_source_ttl.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/scripts/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/scripts/test_gen_docs.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/skill/__init__.py +0 -0
- {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/skill/test_bundle.py +0 -0
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to netbox-super-cli are tracked here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) loosely. From v1.0.0 onward, releases follow [Semantic Versioning](https://semver.org/) and the version in `pyproject.toml` matches the git tag. Pre-1.0 milestones (Phase 1-5) were pinned by tag while `pyproject.toml` stayed at `0.0.1`.
|
|
4
4
|
|
|
5
|
+
## v1.0.7 — 2026-06-09
|
|
6
|
+
|
|
7
|
+
Patch release. Fixes a hard crash on fresh installs caused by an undeclared
|
|
8
|
+
`click` dependency (issue #81).
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **`nsc` no longer crashes with `ModuleNotFoundError: No module named 'click'`
|
|
13
|
+
on fresh installs** (issue #81). `nsc` imports the standalone `click` package
|
|
14
|
+
directly, but it was never declared as a dependency — it was only pulled in
|
|
15
|
+
transitively by `typer`. typer 0.26 vendored click (as `typer._click`) and
|
|
16
|
+
dropped its public `click` dependency, so a fresh `uv tool install` / `pip
|
|
17
|
+
install` resolving `typer>=0.12` got typer 0.26.x with no `click`, and the
|
|
18
|
+
first `import click` aborted every command. `click>=8.1` is now an explicit
|
|
19
|
+
dependency, and `typer` is pinned `>=0.12,<0.26` — the last line that uses the
|
|
20
|
+
standalone `click` that nsc's `TyperGroup` overrides are written against.
|
|
21
|
+
Adopting typer 0.26's vendored click is tracked in #82.
|
|
22
|
+
|
|
5
23
|
## v1.0.6 — 2026-06-09
|
|
6
24
|
|
|
7
25
|
Patch release. Fixes table/CSV column rendering for fields that are nested
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: netbox-super-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.7
|
|
4
4
|
Summary: Dynamic NetBox CLI generated from the live OpenAPI schema.
|
|
5
5
|
Project-URL: Homepage, https://github.com/thomaschristory/netbox-super-cli
|
|
6
6
|
Project-URL: Issues, https://github.com/thomaschristory/netbox-super-cli/issues
|
|
@@ -16,13 +16,14 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.13
|
|
17
17
|
Classifier: Topic :: System :: Networking
|
|
18
18
|
Requires-Python: >=3.12
|
|
19
|
+
Requires-Dist: click>=8.1
|
|
19
20
|
Requires-Dist: httpx>=0.27
|
|
20
21
|
Requires-Dist: platformdirs>=4.2
|
|
21
22
|
Requires-Dist: pydantic>=2.7
|
|
22
23
|
Requires-Dist: rich>=13.7
|
|
23
24
|
Requires-Dist: ruamel-yaml>=0.18
|
|
24
25
|
Requires-Dist: structlog>=24.1
|
|
25
|
-
Requires-Dist: typer
|
|
26
|
+
Requires-Dist: typer<0.26,>=0.12
|
|
26
27
|
Description-Content-Type: text/markdown
|
|
27
28
|
|
|
28
29
|
# netbox-super-cli (`nsc`)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "netbox-super-cli"
|
|
3
|
-
version = "1.0.
|
|
3
|
+
version = "1.0.7"
|
|
4
4
|
description = "Dynamic NetBox CLI generated from the live OpenAPI schema."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -18,7 +18,12 @@ classifiers = [
|
|
|
18
18
|
"Topic :: System :: Networking",
|
|
19
19
|
]
|
|
20
20
|
dependencies = [
|
|
21
|
-
|
|
21
|
+
# typer 0.26 vendored click as typer._click and dropped its public `click`
|
|
22
|
+
# dependency; nsc imports the standalone `click` directly and subclasses
|
|
23
|
+
# TyperGroup, so it stays on the <0.26 line (which uses standalone click)
|
|
24
|
+
# until that interop is migrated. See issue #82.
|
|
25
|
+
"typer>=0.12,<0.26",
|
|
26
|
+
"click>=8.1",
|
|
22
27
|
"rich>=13.7",
|
|
23
28
|
"httpx>=0.27",
|
|
24
29
|
"pydantic>=2.7",
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"""Packaging-metadata guards.
|
|
2
|
+
|
|
3
|
+
Protects against importing a third-party package directly while relying on
|
|
4
|
+
another dependency to supply it transitively. That is exactly how `click`
|
|
5
|
+
broke on fresh installs (issue #81): `nsc` imports `click` directly, but it
|
|
6
|
+
was only ever pulled in via `typer` — and typer 0.26 vendored click as
|
|
7
|
+
`typer._click` and dropped its public `click` dependency, so fresh
|
|
8
|
+
resolutions had no `click` and `import click` crashed.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import ast
|
|
14
|
+
import pathlib
|
|
15
|
+
import re
|
|
16
|
+
import sys
|
|
17
|
+
import tomllib
|
|
18
|
+
from importlib.metadata import packages_distributions
|
|
19
|
+
|
|
20
|
+
_REPO_ROOT = pathlib.Path(__file__).resolve().parents[1]
|
|
21
|
+
_NSC = _REPO_ROOT / "nsc"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _canonical(name: str) -> str:
|
|
25
|
+
return re.sub(r"[-_.]+", "-", name).strip().lower()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _declared_dependencies() -> set[str]:
|
|
29
|
+
data = tomllib.loads((_REPO_ROOT / "pyproject.toml").read_text(encoding="utf-8"))
|
|
30
|
+
deps: list[str] = data["project"]["dependencies"]
|
|
31
|
+
return {_canonical(re.split(r"[<>=!~\[; ]", dep, maxsplit=1)[0]) for dep in deps}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _top_level_imports(tree: ast.AST) -> set[str]:
|
|
35
|
+
names: set[str] = set()
|
|
36
|
+
for node in ast.walk(tree):
|
|
37
|
+
if isinstance(node, ast.Import):
|
|
38
|
+
names.update(alias.name.split(".")[0] for alias in node.names)
|
|
39
|
+
elif isinstance(node, ast.ImportFrom) and node.level == 0 and node.module:
|
|
40
|
+
names.add(node.module.split(".")[0])
|
|
41
|
+
return names
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def _directly_imported_modules() -> set[str]:
|
|
45
|
+
names: set[str] = set()
|
|
46
|
+
for path in _NSC.rglob("*.py"):
|
|
47
|
+
names |= _top_level_imports(ast.parse(path.read_text(encoding="utf-8")))
|
|
48
|
+
return names
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def test_click_is_a_declared_dependency() -> None:
|
|
52
|
+
# The concrete regression guard for issue #81: nsc imports click directly.
|
|
53
|
+
assert "click" in _directly_imported_modules()
|
|
54
|
+
assert _canonical("click") in _declared_dependencies()
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def test_every_direct_third_party_import_is_declared() -> None:
|
|
58
|
+
# Generalizes the guard: any top-level third-party module imported anywhere
|
|
59
|
+
# in nsc/ must resolve to a declared dependency — never a transitive freebie.
|
|
60
|
+
declared = _declared_dependencies()
|
|
61
|
+
dist_map = packages_distributions()
|
|
62
|
+
undeclared: dict[str, set[str]] = {}
|
|
63
|
+
for module in _directly_imported_modules():
|
|
64
|
+
if module == "nsc" or module in sys.stdlib_module_names:
|
|
65
|
+
continue
|
|
66
|
+
dists = dist_map.get(module)
|
|
67
|
+
if dists is None:
|
|
68
|
+
continue # not an installed distribution (e.g. a namespace shim)
|
|
69
|
+
if not any(_canonical(dist) in declared for dist in dists):
|
|
70
|
+
undeclared[module] = set(dists)
|
|
71
|
+
assert not undeclared, f"third-party imports missing from dependencies: {undeclared}"
|
|
@@ -646,9 +646,10 @@ wheels = [
|
|
|
646
646
|
|
|
647
647
|
[[package]]
|
|
648
648
|
name = "netbox-super-cli"
|
|
649
|
-
version = "1.0.
|
|
649
|
+
version = "1.0.7"
|
|
650
650
|
source = { editable = "." }
|
|
651
651
|
dependencies = [
|
|
652
|
+
{ name = "click" },
|
|
652
653
|
{ name = "httpx" },
|
|
653
654
|
{ name = "platformdirs" },
|
|
654
655
|
{ name = "pydantic" },
|
|
@@ -676,13 +677,14 @@ docs = [
|
|
|
676
677
|
|
|
677
678
|
[package.metadata]
|
|
678
679
|
requires-dist = [
|
|
680
|
+
{ name = "click", specifier = ">=8.1" },
|
|
679
681
|
{ name = "httpx", specifier = ">=0.27" },
|
|
680
682
|
{ name = "platformdirs", specifier = ">=4.2" },
|
|
681
683
|
{ name = "pydantic", specifier = ">=2.7" },
|
|
682
684
|
{ name = "rich", specifier = ">=13.7" },
|
|
683
685
|
{ name = "ruamel-yaml", specifier = ">=0.18" },
|
|
684
686
|
{ name = "structlog", specifier = ">=24.1" },
|
|
685
|
-
{ name = "typer", specifier = ">=0.12" },
|
|
687
|
+
{ name = "typer", specifier = ">=0.12,<0.26" },
|
|
686
688
|
]
|
|
687
689
|
|
|
688
690
|
[package.metadata.requires-dev]
|
|
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
|
{netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/contributing/adding-bundled-schemas.md
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
|
|
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
|
{netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_bulk_create_with_loop_fallback.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/profiles/single_profile.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/responses/dcim_devices_get.json
RENAMED
|
File without changes
|
{netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/responses/dcim_devices_list_p1.json
RENAMED
|
File without changes
|
{netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/responses/dcim_devices_list_p2.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/http/test_client_redaction_threading.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
|
|
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
|