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.
Files changed (222) hide show
  1. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/CHANGELOG.md +16 -0
  2. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/PKG-INFO +1 -1
  3. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/guides/output-formats.md +6 -3
  4. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/_version.py +1 -1
  5. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/flatten.py +6 -2
  6. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/pyproject.toml +1 -1
  7. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_flatten.py +29 -0
  8. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/uv.lock +1 -1
  9. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/agents-md-sync.yml +0 -0
  10. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/bench.yml +0 -0
  11. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/claude.yml +0 -0
  12. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/docs.yml +0 -0
  13. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/e2e.yml +0 -0
  14. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/lint.yml +0 -0
  15. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/release.yml +0 -0
  16. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.github/workflows/test.yml +0 -0
  17. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.gitignore +0 -0
  18. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.pre-commit-config.yaml +0 -0
  19. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/.python-version +0 -0
  20. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/AGENTS.md +0 -0
  21. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/CLAUDE.md +0 -0
  22. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/LICENSE +0 -0
  23. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/README.md +0 -0
  24. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/architecture/caching.md +0 -0
  25. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/architecture/command-generation.md +0 -0
  26. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/architecture/http-client.md +0 -0
  27. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/architecture/overview.md +0 -0
  28. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/architecture/schema-loading.md +0 -0
  29. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/contributing/adding-bundled-schemas.md +0 -0
  30. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/contributing/branching.md +0 -0
  31. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/contributing/development.md +0 -0
  32. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/contributing/release-process.md +0 -0
  33. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/getting-started/concepts.md +0 -0
  34. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/getting-started/first-run.md +0 -0
  35. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/getting-started/install.md +0 -0
  36. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/guides/ci-and-automation.md +0 -0
  37. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/guides/managing-profiles.md +0 -0
  38. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/guides/using-with-ai-agents.md +0 -0
  39. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/guides/working-with-plugins.md +0 -0
  40. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/guides/writes-and-safety.md +0 -0
  41. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/index.md +0 -0
  42. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/reference/cli.md +0 -0
  43. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/reference/config.md +0 -0
  44. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/reference/exit-codes.md +0 -0
  45. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/docs/reference/schemas.md +0 -0
  46. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/justfile +0 -0
  47. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/mkdocs.yml +0 -0
  48. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/__init__.py +0 -0
  49. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/__main__.py +0 -0
  50. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/aliases/__init__.py +0 -0
  51. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/aliases/resolver.py +0 -0
  52. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/auth/__init__.py +0 -0
  53. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/auth/verify.py +0 -0
  54. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/builder/__init__.py +0 -0
  55. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/builder/build.py +0 -0
  56. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cache/__init__.py +0 -0
  57. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cache/store.py +0 -0
  58. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/__init__.py +0 -0
  59. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/aliases_commands.py +0 -0
  60. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/app.py +0 -0
  61. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/cache_commands.py +0 -0
  62. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/commands_dump.py +0 -0
  63. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/config_commands.py +0 -0
  64. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/globals.py +0 -0
  65. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/handlers.py +0 -0
  66. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/init_commands.py +0 -0
  67. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/login_commands.py +0 -0
  68. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/profiles_commands.py +0 -0
  69. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/registration.py +0 -0
  70. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/runtime.py +0 -0
  71. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/skill_commands.py +0 -0
  72. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/writes/__init__.py +0 -0
  73. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/writes/apply.py +0 -0
  74. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/writes/bulk.py +0 -0
  75. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/writes/coercion.py +0 -0
  76. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/writes/confirmation.py +0 -0
  77. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/writes/input.py +0 -0
  78. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/cli/writes/preflight.py +0 -0
  79. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/config/__init__.py +0 -0
  80. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/config/loader.py +0 -0
  81. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/config/models.py +0 -0
  82. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/config/settings.py +0 -0
  83. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/config/writer.py +0 -0
  84. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/http/__init__.py +0 -0
  85. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/http/audit.py +0 -0
  86. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/http/client.py +0 -0
  87. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/http/errors.py +0 -0
  88. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/http/retry.py +0 -0
  89. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/model/__init__.py +0 -0
  90. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/model/command_model.py +0 -0
  91. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/__init__.py +0 -0
  92. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/_console.py +0 -0
  93. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/csv_.py +0 -0
  94. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/errors.py +0 -0
  95. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/explain.py +0 -0
  96. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/headers.py +0 -0
  97. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/json_.py +0 -0
  98. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/jsonl.py +0 -0
  99. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/render.py +0 -0
  100. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/table.py +0 -0
  101. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/output/yaml_.py +0 -0
  102. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schema/__init__.py +0 -0
  103. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schema/hashing.py +0 -0
  104. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schema/loader.py +0 -0
  105. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schema/models.py +0 -0
  106. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schema/source.py +0 -0
  107. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schemas/__init__.py +0 -0
  108. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schemas/bundled/__init__.py +0 -0
  109. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schemas/bundled/manifest.yaml +0 -0
  110. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schemas/bundled/netbox-4.5.10.json.gz +0 -0
  111. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/schemas/bundled/netbox-4.6.0.json.gz +0 -0
  112. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/nsc/skill/__init__.py +0 -0
  113. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/scripts/gen_docs.py +0 -0
  114. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/scripts/sync_agents_md.py +0 -0
  115. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/skills/netbox-super-cli/SKILL.md +0 -0
  116. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/__init__.py +0 -0
  117. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/aliases/__init__.py +0 -0
  118. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/aliases/test_resolver.py +0 -0
  119. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/auth/__init__.py +0 -0
  120. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/auth/test_verify.py +0 -0
  121. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/benchmarks/__init__.py +0 -0
  122. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/benchmarks/test_startup.py +0 -0
  123. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/builder/__init__.py +0 -0
  124. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/builder/test_build.py +0 -0
  125. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/builder/test_default_columns.py +0 -0
  126. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/builder/test_redaction_marking.py +0 -0
  127. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/builder/test_request_body_shape.py +0 -0
  128. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cache/__init__.py +0 -0
  129. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cache/test_prune.py +0 -0
  130. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cache/test_store.py +0 -0
  131. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/__init__.py +0 -0
  132. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_aliases_commands.py +0 -0
  133. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_app_smoke.py +0 -0
  134. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_cache_commands.py +0 -0
  135. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_commands_dump.py +0 -0
  136. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_completion_smoke.py +0 -0
  137. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_config_commands.py +0 -0
  138. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_explain.py +0 -0
  139. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_globals_color.py +0 -0
  140. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_handlers.py +0 -0
  141. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_init_commands.py +0 -0
  142. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_login_commands.py +0 -0
  143. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_meta_subcommands_under_broken_config.py +0 -0
  144. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_ndjson_input.py +0 -0
  145. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_profiles_commands.py +0 -0
  146. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_registration.py +0 -0
  147. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_respx_integration.py +0 -0
  148. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_runtime.py +0 -0
  149. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_runtime_color.py +0 -0
  150. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_skill_commands.py +0 -0
  151. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_stdin_sniffer.py +0 -0
  152. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/test_writes_respx.py +0 -0
  153. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/__init__.py +0 -0
  154. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/test_apply.py +0 -0
  155. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/test_bulk.py +0 -0
  156. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/test_confirmation.py +0 -0
  157. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/test_handler_helpers.py +0 -0
  158. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/test_handlers_audit.py +0 -0
  159. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/test_input.py +0 -0
  160. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/cli/writes/test_preflight.py +0 -0
  161. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/config/__init__.py +0 -0
  162. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/config/test_loader.py +0 -0
  163. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/config/test_models.py +0 -0
  164. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/config/test_writer_atomicity.py +0 -0
  165. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/config/test_writer_dotted_paths.py +0 -0
  166. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/config/test_writer_roundtrip.py +0 -0
  167. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/conftest.py +0 -0
  168. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/README.md +0 -0
  169. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/__init__.py +0 -0
  170. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/conftest.py +0 -0
  171. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/docker-compose.yml +0 -0
  172. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_audit_redaction.py +0 -0
  173. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_auth_error_envelope.py +0 -0
  174. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_bulk_create_with_loop_fallback.py +0 -0
  175. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_full_cycle.py +0 -0
  176. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_login.py +0 -0
  177. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_ndjson.py +0 -0
  178. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_preflight_blocks_apply.py +0 -0
  179. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/test_validation_error_envelope_from_netbox.py +0 -0
  180. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/e2e/wait_for_netbox.sh +0 -0
  181. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/fixtures/profiles/single_profile.yaml +0 -0
  182. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/fixtures/responses/auth_401.json +0 -0
  183. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/fixtures/responses/circuits_providers_list.json +0 -0
  184. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/fixtures/responses/dcim_devices_get.json +0 -0
  185. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/fixtures/responses/dcim_devices_list_p1.json +0 -0
  186. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/fixtures/responses/dcim_devices_list_p2.json +0 -0
  187. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/http/__init__.py +0 -0
  188. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/http/test_audit.py +0 -0
  189. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/http/test_audit_redaction.py +0 -0
  190. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/http/test_client.py +0 -0
  191. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/http/test_client_redaction_threading.py +0 -0
  192. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/http/test_errors.py +0 -0
  193. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/http/test_retry.py +0 -0
  194. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/model/__init__.py +0 -0
  195. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/model/test_command_model.py +0 -0
  196. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/model/test_request_body_shape.py +0 -0
  197. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/__init__.py +0 -0
  198. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_console.py +0 -0
  199. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_csv.py +0 -0
  200. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_errors.py +0 -0
  201. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_errors_aliases.py +0 -0
  202. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_errors_color.py +0 -0
  203. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_explain.py +0 -0
  204. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_explain_color.py +0 -0
  205. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_input_error_envelope.py +0 -0
  206. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_json.py +0 -0
  207. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_jsonl.py +0 -0
  208. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_render_dispatch.py +0 -0
  209. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_table.py +0 -0
  210. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_table_color.py +0 -0
  211. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/output/test_yaml.py +0 -0
  212. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/schema/__init__.py +0 -0
  213. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/schema/test_hashing.py +0 -0
  214. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/schema/test_loader.py +0 -0
  215. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/schema/test_models.py +0 -0
  216. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/schema/test_source.py +0 -0
  217. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/schema/test_source_ttl.py +0 -0
  218. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/scripts/__init__.py +0 -0
  219. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/scripts/test_gen_docs.py +0 -0
  220. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/skill/__init__.py +0 -0
  221. {netbox_super_cli-1.0.7 → netbox_super_cli-1.0.8}/tests/skill/test_bundle.py +0 -0
  222. {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.7
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`, `tenant`, `status`) collapses to its
52
- `display` label — `role` renders `Router`, not an empty cell. An object with
53
- no `display` field falls back to compact JSON.
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
 
@@ -1,3 +1,3 @@
1
1
  """Single source of truth for the package version."""
2
2
 
3
- __version__ = "1.0.7"
3
+ __version__ = "1.0.8"
@@ -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 = value.get("display")
41
- return display if isinstance(display, str) else json.dumps(value, separators=(",", ":"))
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "netbox-super-cli"
3
- version = "1.0.7"
3
+ version = "1.0.8"
4
4
  description = "Dynamic NetBox CLI generated from the live OpenAPI schema."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -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
 
@@ -646,7 +646,7 @@ wheels = [
646
646
 
647
647
  [[package]]
648
648
  name = "netbox-super-cli"
649
- version = "1.0.7"
649
+ version = "1.0.8"
650
650
  source = { editable = "." }
651
651
  dependencies = [
652
652
  { name = "click" },