netbox-super-cli 1.0.7__tar.gz → 1.0.8__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.7 → netbox_super_cli-1.0.8}/CHANGELOG.md +16 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/PKG-INFO +1 -1
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/guides/output-formats.md +6 -3
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/_version.py +1 -1
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/flatten.py +6 -2
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/pyproject.toml +1 -1
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_flatten.py +29 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/uv.lock +1 -1
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/agents-md-sync.yml +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/bench.yml +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/claude.yml +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/docs.yml +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/e2e.yml +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/lint.yml +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/release.yml +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/test.yml +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.gitignore +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.pre-commit-config.yaml +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.python-version +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/AGENTS.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/CLAUDE.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/LICENSE +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/README.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/architecture/caching.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/architecture/command-generation.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/architecture/http-client.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/architecture/overview.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/architecture/schema-loading.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/contributing/adding-bundled-schemas.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/contributing/branching.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/contributing/development.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/contributing/release-process.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/getting-started/concepts.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/getting-started/first-run.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/getting-started/install.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/guides/ci-and-automation.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/guides/managing-profiles.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/guides/using-with-ai-agents.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/guides/working-with-plugins.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/guides/writes-and-safety.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/index.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/reference/cli.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/reference/config.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/reference/exit-codes.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/reference/schemas.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/justfile +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/mkdocs.yml +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/__main__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/aliases/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/aliases/resolver.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/auth/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/auth/verify.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/builder/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/builder/build.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cache/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cache/store.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/aliases_commands.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/app.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/cache_commands.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/commands_dump.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/config_commands.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/globals.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/handlers.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/init_commands.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/login_commands.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/profiles_commands.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/registration.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/runtime.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/skill_commands.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/writes/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/writes/apply.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/writes/bulk.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/writes/coercion.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/writes/confirmation.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/writes/input.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/writes/preflight.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/config/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/config/loader.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/config/models.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/config/settings.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/config/writer.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/http/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/http/audit.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/http/client.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/http/errors.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/http/retry.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/model/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/model/command_model.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/_console.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/csv_.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/errors.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/explain.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/headers.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/json_.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/jsonl.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/render.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/table.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/yaml_.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schema/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schema/hashing.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schema/loader.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schema/models.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schema/source.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schemas/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schemas/bundled/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schemas/bundled/manifest.yaml +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schemas/bundled/netbox-4.5.10.json.gz +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schemas/bundled/netbox-4.6.0.json.gz +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/skill/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/scripts/gen_docs.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/scripts/sync_agents_md.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/skills/netbox-super-cli/SKILL.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/aliases/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/aliases/test_resolver.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/auth/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/auth/test_verify.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/benchmarks/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/benchmarks/test_startup.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/builder/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/builder/test_build.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/builder/test_default_columns.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/builder/test_redaction_marking.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/builder/test_request_body_shape.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cache/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cache/test_prune.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cache/test_store.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_aliases_commands.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_app_smoke.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_cache_commands.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_commands_dump.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_completion_smoke.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_config_commands.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_explain.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_globals_color.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_handlers.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_init_commands.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_login_commands.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_meta_subcommands_under_broken_config.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_ndjson_input.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_profiles_commands.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_registration.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_respx_integration.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_runtime.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_runtime_color.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_skill_commands.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_stdin_sniffer.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_writes_respx.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/test_apply.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/test_bulk.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/test_confirmation.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/test_handler_helpers.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/test_handlers_audit.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/test_input.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/test_preflight.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/config/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/config/test_loader.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/config/test_models.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/config/test_writer_atomicity.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/config/test_writer_dotted_paths.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/config/test_writer_roundtrip.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/conftest.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/README.md +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/conftest.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/docker-compose.yml +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_audit_redaction.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_auth_error_envelope.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_bulk_create_with_loop_fallback.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_full_cycle.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_login.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_ndjson.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_preflight_blocks_apply.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_validation_error_envelope_from_netbox.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/wait_for_netbox.sh +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/fixtures/profiles/single_profile.yaml +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/fixtures/responses/auth_401.json +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/fixtures/responses/circuits_providers_list.json +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/fixtures/responses/dcim_devices_get.json +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/fixtures/responses/dcim_devices_list_p1.json +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/fixtures/responses/dcim_devices_list_p2.json +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/http/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/http/test_audit.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/http/test_audit_redaction.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/http/test_client.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/http/test_client_redaction_threading.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/http/test_errors.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/http/test_retry.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/model/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/model/test_command_model.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/model/test_request_body_shape.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_console.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_csv.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_errors.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_errors_aliases.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_errors_color.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_explain.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_explain_color.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_input_error_envelope.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_json.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_jsonl.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_render_dispatch.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_table.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_table_color.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_yaml.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/schema/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/schema/test_hashing.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/schema/test_loader.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/schema/test_models.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/schema/test_source.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/schema/test_source_ttl.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/scripts/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/scripts/test_gen_docs.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/skill/__init__.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/skill/test_bundle.py +0 -0
- {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/test_packaging.py +0 -0
|
@@ -2,6 +2,22 @@
|
|
|
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.8 — 2026-06-10
|
|
6
|
+
|
|
7
|
+
Patch release. Table/CSV columns for choice fields now show their human label
|
|
8
|
+
(issue #85).
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **Choice-field columns render their `label`** (issue #85). A `--columns` (or
|
|
13
|
+
`columns:` config) entry pointing to a NetBox choice field — `status` and
|
|
14
|
+
other `{value, label}` dicts — previously showed raw JSON in `table`/`csv`
|
|
15
|
+
because choice fields carry no `display`. The nested-object collapse now uses
|
|
16
|
+
the precedence `display` → `label` → compact JSON, so `status` renders
|
|
17
|
+
`Active` (FK objects like `role` still use `display`). The machine value stays
|
|
18
|
+
reachable via the dotted path `status.value` → `active`, and `json`/`jsonl`/
|
|
19
|
+
`yaml` keep the full structure.
|
|
20
|
+
|
|
5
21
|
## v1.0.7 — 2026-06-09
|
|
6
22
|
|
|
7
23
|
Patch release. Fixes a hard crash on fresh installs caused by an undeclared
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: netbox-super-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.8
|
|
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
|
|
@@ -48,9 +48,12 @@ across NetBox versions and plugin changes.
|
|
|
48
48
|
A column may name a nested field directly or drill in with a dotted path:
|
|
49
49
|
|
|
50
50
|
- A dotted path selects the leaf scalar: `status.value`, `site.name`.
|
|
51
|
-
- A bare nested object (`site`, `role`,
|
|
52
|
-
`display`
|
|
53
|
-
|
|
51
|
+
- A bare nested object collapses to its human label: FK objects (`site`, `role`,
|
|
52
|
+
`tenant`) use their `display` field — `role` renders `Router`, not an empty
|
|
53
|
+
cell — and choice fields (`status`, …) use their `label` — `status` renders
|
|
54
|
+
`Active`. The precedence is `display` → `label` → compact JSON for objects with
|
|
55
|
+
neither. The machine value of a choice stays reachable via the dotted path
|
|
56
|
+
(`status.value` → `active`).
|
|
54
57
|
- A list of objects renders as its members' labels joined with `, ` (e.g.
|
|
55
58
|
`tags` → `prod, edge`); an empty list renders blank.
|
|
56
59
|
|
|
@@ -37,8 +37,12 @@ def _select(record: dict[str, Any], path: str) -> Any:
|
|
|
37
37
|
|
|
38
38
|
def _displayify(value: Any) -> Any:
|
|
39
39
|
if isinstance(value, dict):
|
|
40
|
-
display
|
|
41
|
-
|
|
40
|
+
# FK objects carry `display`; choice fields carry `label` (status, etc.).
|
|
41
|
+
for key in ("display", "label"):
|
|
42
|
+
candidate = value.get(key)
|
|
43
|
+
if isinstance(candidate, str):
|
|
44
|
+
return candidate
|
|
45
|
+
return json.dumps(value, separators=(",", ":"))
|
|
42
46
|
if isinstance(value, list):
|
|
43
47
|
return ", ".join(_as_cell(v) for v in value)
|
|
44
48
|
return value
|
|
@@ -43,6 +43,35 @@ def test_flatten_pick_nested_object_without_display_falls_back_to_json() -> None
|
|
|
43
43
|
assert flatten({"obj": {"a": 1}}, columns=["obj"]) == {"obj": '{"a":1}'}
|
|
44
44
|
|
|
45
45
|
|
|
46
|
+
def test_flatten_pick_choice_field_renders_label() -> None:
|
|
47
|
+
record = {"status": {"value": "active", "label": "Active"}}
|
|
48
|
+
assert flatten(record, columns=["status"]) == {"status": "Active"}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def test_flatten_pick_display_takes_precedence_over_label() -> None:
|
|
52
|
+
record = {"x": {"display": "Disp", "label": "Lab"}}
|
|
53
|
+
assert flatten(record, columns=["x"]) == {"x": "Disp"}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def test_flatten_pick_choice_field_value_still_available_via_dotted_path() -> None:
|
|
57
|
+
record = {"status": {"value": "active", "label": "Active"}}
|
|
58
|
+
assert flatten(record, columns=["status.value"]) == {"status.value": "active"}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_flatten_pick_joins_list_of_choice_fields_via_label() -> None:
|
|
62
|
+
record = {"vals": [{"label": "A"}, {"label": "B"}]}
|
|
63
|
+
assert flatten(record, columns=["vals"]) == {"vals": "A, B"}
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def test_flatten_pick_non_string_label_falls_back_to_json() -> None:
|
|
67
|
+
assert flatten({"x": {"label": 7}}, columns=["x"]) == {"x": '{"label":7}'}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def test_flatten_pick_joins_mixed_display_and_label_list() -> None:
|
|
71
|
+
record = {"items": [{"display": "D1"}, {"label": "L1"}]}
|
|
72
|
+
assert flatten(record, columns=["items"]) == {"items": "D1, L1"}
|
|
73
|
+
|
|
74
|
+
|
|
46
75
|
def test_flatten_pick_resolves_dotted_path_into_nested_object() -> None:
|
|
47
76
|
assert flatten({"role": {"name": "Router"}}, columns=["role.name"]) == {"role.name": "Router"}
|
|
48
77
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.7 → netbox_super_cli-1.0.8}/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
|
{netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/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.7 → netbox_super_cli-1.0.8}/tests/fixtures/profiles/single_profile.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/fixtures/responses/dcim_devices_get.json
RENAMED
|
File without changes
|
{netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/fixtures/responses/dcim_devices_list_p1.json
RENAMED
|
File without changes
|
{netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/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.7 → netbox_super_cli-1.0.8}/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
|