# Module: loader_http_client ## Purpose HTTP client for downloading/uploading model files via the Loader service, and for querying the Annotations service API (user AI settings, media path resolution). ## Public Interface ### Class: LoadResult Simple result wrapper. | Field | Type | Description | |-------|------|-------------| | `err` | str or None | Error message if operation failed | | `data` | bytes or None | Response payload on success | ### Class: LoaderHttpClient | Method | Signature | Access | Description | |--------|-----------|--------|-------------| | `__init__` | `(str base_url)` | public | Stores base URL, strips trailing slash | | `load_big_small_resource` | `(str filename, str directory) -> LoadResult` | cdef | POST to `/load/{filename}` with JSON body, returns raw bytes | | `upload_big_small_resource` | `(bytes content, str filename, str directory) -> LoadResult` | cdef | POST to `/upload/{filename}` with multipart file | | `fetch_user_ai_settings` | `(str user_id, str bearer_token) -> object` | cpdef | GET `/api/users/{user_id}/ai-settings`, returns parsed JSON dict or None | | `fetch_media_path` | `(str media_id, str bearer_token) -> object` | cpdef | GET `/api/media/{media_id}`, returns `path` string from response or None | ## Internal Logic Model load/upload methods wrap all exceptions into `LoadResult(err=str(e))`. Errors are logged via loguru but never raised. `fetch_user_ai_settings` and `fetch_media_path` (added in AZ-174) call the Annotations service API with Bearer auth. On non-200 response or exception, they return None. ## Dependencies - **External**: `requests`, `loguru` - **Internal**: none (leaf module) ## Consumers - `inference` — downloads ONNX/TensorRT models, uploads converted TensorRT engines - `main` — instantiates two clients: one for Loader (`LOADER_URL`), one for Annotations (`ANNOTATIONS_URL`). Uses `fetch_user_ai_settings` and `fetch_media_path` on the annotations client. ## Data Models - `LoadResult` — operation result with error-or-data semantics ## Configuration - `base_url` — provided at construction time, sourced from env vars in `main.py` ## External Integrations | Integration | Protocol | Endpoint Pattern | |-------------|----------|-----------------| | Loader service | HTTP POST | `/load/{filename}` (download), `/upload/{filename}` (upload) | | Annotations service | HTTP GET | `/api/users/{user_id}/ai-settings`, `/api/media/{media_id}` | ## Security Bearer token forwarded in Authorization header for Annotations service calls. ## Tests - `tests/test_az174_db_driven_config.py` — tests `_resolve_media_for_detect` which exercises `fetch_user_ai_settings` and `fetch_media_path`