fix: address code review — use modern type hints and Callable annotation

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-03-05 22:03:30 +00:00
parent 62d7ad7e9e
commit c8bc4afc93
4 changed files with 38 additions and 4 deletions
+2 -2
View File
@@ -1450,7 +1450,7 @@ def claim_file(request: Request, file_id: int, db: DbSession):
@router.post("/files/bulk-claim")
@require_login
def bulk_claim_files(request: Request, file_ids: List[int], db: DbSession):
def bulk_claim_files(request: Request, file_ids: list[int], db: DbSession):
"""
Claim multiple unowned documents for the current user.
@@ -1496,7 +1496,7 @@ def bulk_claim_files(request: Request, file_ids: List[int], db: DbSession):
@router.post("/files/assign-owner")
@require_login
def assign_owner(request: Request, db: DbSession, owner_id: str = Query(...), file_ids: List[int] | None = None):
def assign_owner(request: Request, db: DbSession, owner_id: str = Query(...), file_ids: list[int] | None = None):
"""
Admin-only: assign an owner to documents.
+2 -1
View File
@@ -16,6 +16,7 @@ the bundled static list.
import logging
import subprocess # noqa: S404 — only used with fixed args, no user input
from typing import Callable
logger = logging.getLogger(__name__)
@@ -407,7 +408,7 @@ def get_embedding_models() -> list[str]:
# Registry — maps setting keys to their provider functions
# ---------------------------------------------------------------------------
SUGGESTION_PROVIDERS: dict[str, callable] = {
SUGGESTION_PROVIDERS: dict[str, Callable[[], list[str]]] = {
"aws_region": get_aws_regions,
"azure_region": get_azure_regions,
"tesseract_language": get_tesseract_languages,
+32
View File
@@ -726,6 +726,38 @@ curl "http://<your-instance>/api/users/search?q=risti&limit=5"
}
```
---
### Settings Suggestions (Autocomplete)
**GET** `/api/settings/{key}/suggestions`
Return dynamic autocomplete suggestions for a setting. Providers attempt to
resolve values from cloud SDKs or installed tools and fall back to curated
static lists when unavailable.
**Supported keys**: `aws_region`, `azure_region`, `tesseract_language`,
`easyocr_languages`, `embedding_model`
**Query Parameters**:
- `q` (optional): Substring to filter suggestions (case-insensitive)
- `limit` (optional): Maximum results to return (default: 10, max: 50)
```bash
curl "http://<your-instance>/api/settings/aws_region/suggestions?q=east&limit=5"
```
**Response**:
```json
{
"key": "aws_region",
"suggestions": ["ap-east-1", "ap-northeast-1", "ap-southeast-1", "us-east-1", "us-east-2"]
}
```
**Error Responses**:
- `404`: No suggestion provider registered for the given key
### File Preview
**GET** `/api/files/{file_id}/preview`
+2 -1
View File
@@ -48,7 +48,8 @@ Settings are organized into logical categories for easy navigation:
- **Dropdown**: Predefined option lists (e.g., PDF/A format, S3 storage class, S3 ACL)
- **Multi-select**: Comma-separated selections from a list (e.g., OCR providers)
- **Model Picker**: Free-text with suggested model names (e.g., AI model selection)
- **User Autocomplete**: Typeahead search for existing user identifiers (e.g., default owner assignment)
- **User Autocomplete**: Typeahead search for existing user identifiers (e.g., default owner assignment), fetches from `GET /api/users/search`
- **Autocomplete**: Typeahead search with dynamic suggestions fetched from `GET /api/settings/{key}/suggestions`. Used for AWS/Azure regions, OCR language codes, and embedding models. Providers attempt dynamic resolution (e.g., boto3 for AWS regions, `tesseract --list-langs` for Tesseract) and fall back to curated static lists if the SDK or tool is unavailable.
- **List**: Comma-separated values (notification URLs, CORS origins)
### Sensitive Data