# netbox-sdk v0.0.7

netbox-sdk v0.0.7

| Field |Value |
| --- | --- |
| Canonical URL | https://emersonfelipesp.com/netbox-sdk/releases/v0.0.7 |
| GitHub URL | https://github.com/emersonfelipesp/netbox-sdk/releases/tag/v0.0.7 |
| Tag | v0.0.7 |
| State | stable |
| Author | emersonfelipesp |
| Created | 2026-03-30 15:48 UTC |
| Published | 2026-03-30 15:49 UTC |
| Target | main |
| Synced | 2026-08-25 18:36 UTC |
| Assets | 0 |

## Release notes

# netbox-sdk v0.0.7

**Release date:** 2026-03-30  
**Commit:** [`864a07c`](https://github.com/emersonfelipesp/netbox-sdk/commit/864a07cff6aaa4ea058b9b3d5b51fdc322421687) (merge of PR [#10](https://github.com/emersonfelipesp/netbox-sdk/pull/10))

This release focuses on **SDK quality**: shared error types, structured logging across SDK/CLI/TUI, tighter HTTP and config error handling, generated OpenAPI module documentation, and **CI lockfile** alignment after the version bump.

---

## Installation

```bash
pip install "netbox-sdk==0.0.7"
# optional extras
pip install "netbox-sdk[cli,tui,demo]==0.0.7"
```

With **uv**:

```bash
uv add "netbox-sdk==0.0.7"
```

---

## Highlights

### Centralized exceptions (`netbox_sdk.exceptions`)

- **`RequestError`** — HTTP-layer failures (moved from `client`; still importable from `netbox_sdk.client` and `netbox_sdk`).
- **`ContentError`**, **`AllocationError`**, **`ParameterValidationError`** — facade-level errors (previously defined only in `facade`).
- **`JsonPayloadError`** — invalid or conflicting `--body-json` / `--body-file` usage (subclass of `ValueError`).

This makes it easier for callers and tests to branch on failure type without parsing message strings.

### Logging

- **Dual file logging roots** in `logging_runtime`: both `netbox_cli` and `netbox_sdk` trees attach to the same rotating JSON log file, so `logging.getLogger("netbox_sdk....")` records persist like CLI/TUI logs.
- **Module-level loggers** added or expanded across SDK modules (`config`, `schema`, `http_cache`, `services`, `plugin_discovery`, `django_models.store`, etc.), CLI (`dynamic`, `runtime`, `support`), and TUI (`app`, `django_model_app`, `graphql_app`, `ssl_verify_support`).
- **Policy** documented in `netbox_sdk/CLAUDE.md` and `netbox_tui/CLAUDE.md`: no secrets in logs; prefer structured `extra` (e.g. `nbx_event`, `request_path`, `http_method`).

### HTTP, payloads, and discovery

- **`NetBoxApiClient`**: more precise typing (`CacheEntry`, `aiohttp.ClientSession` under `TYPE_CHECKING`); safer OpenAPI version parsing; `create_token` only reads `key` when JSON body is an object.
- **`load_json_payload`**: **`FileNotFoundError`** for missing `--body-file`; **`JSONDecodeError`** preserved for malformed inline JSON (security tests); logging on decode/read issues.
- **`plugin_discovery`**: logs DEBUG for request/JSON failures; catches typed transport errors plus a final **`Exception`** path with DEBUG + `exc_info` so strict test mocks do not break the TUI.
- **`http_ssl`**: accurate return type for `connector_for_config`; narrowed import guard when classifying TLS errors.

### CLI runtime

- **`_VERIFY_REQUEST_ERRORS`** for status checks (`RuntimeError`, `OSError`, `aiohttp.ClientError`) with ERROR logs before re-raise where appropriate.
- Demo token repair: narrower catches for refresh/save with structured logging.
- **`dynamic`**: return types **`ApiResponse`** / **`ApiResponse | None`**; registration and dispatch logging.

### TUI

- **`graphql_app`**: parse failures narrowed to **`TypeError`**, **`ValueError`**, **`json.JSONDecodeError`** with DEBUG logging.
- **`django_model_app`**: DEBUG/WARNING logs instead of silent **`pass`** in several optional UI paths.
- **`ssl_verify_support`**: logs when syncing SSL choice to CLI runtime cache fails.

### Codegen and bundled OpenAPI artifacts

- **`scripts/generate_typed_sdk.py`**: module docstring for generated typed bindings; docstrings on generated app/endpoint/root classes; **`_prepend_models_module_doc`** after datamodel-codegen.
- **Committed `models/v4_*` and `typed_versions/v4_*`**: top-level module docstrings for generated files.

### Packaging and CI

- **`pyproject.toml` / `netbox_sdk.__version__`**: **0.0.7**.
- **`uv.lock`**: refreshed so **`uv sync --locked`** (used in GitHub Actions) succeeds after the version bump.
- **Ruff format**: `http_cache.py` adjusted for pre-commit.

---

## Upgrade notes

- Imports such as `from netbox_sdk import RequestError` and `from netbox_sdk.client import RequestError` continue to work.
- Code that relied on **`load_json_payload`** raising only **`ValueError`** for missing files should expect **`FileNotFoundError`** for a non-existent `--body-file` path.
- Mutual exclusion and wrong-shape payloads may raise **`JsonPayloadError`** (still a **`ValueError`** subclass where applicable).

---

## Verification (upstream CI)

For commit **`864a07cff6aaa4ea058b9b3d5b51fdc322421687`**, the following workflows completed successfully:

- Lint and Format  
- Tests  
- Security Tests  
- Main Post-Merge Validation  
- Build and deploy documentation  
- Dependabot Updates (workflow run associated with the push)

---

## Links

- **PyPI:** https://pypi.org/project/netbox-sdk/  
- **Documentation:** https://emersonfelipesp.github.io/netbox-sdk/  
- **Repository:** https://github.com/emersonfelipesp/netbox-sdk  
- **Full changelog (compare):** https://github.com/emersonfelipesp/netbox-sdk/compare/v0.0.6...v0.0.7  

---

## Thanks

Thanks to everyone reporting issues and trying the SDK, CLI, and Textual TUIs. Feedback on logging noise levels and exception ergonomics is welcome for the next patch release.

## Assets

No binary assets attached.

Source archives:

| Format |URL |
| --- | --- |
| zip | https://api.github.com/repos/emersonfelipesp/netbox-sdk/zipball/v0.0.7 |
| tar.gz | https://api.github.com/repos/emersonfelipesp/netbox-sdk/tarball/v0.0.7 |
