Download apps/cases/api/folder_scan_api.py from jun2024/fachuan: direct link, hf CLI and curl.
- Browser
- Download file 3.21 kB
-
https://huggingface.co/spaces/jun2024/fachuan/resolve/main/apps/cases/api/folder_scan_api.py
- Command line
-
hf download hf://spaces/jun2024/fachuan/apps/cases/api/folder_scan_api.py
-
curl -L -o folder_scan_api.py https://huggingface.co/spaces/jun2024/fachuan/resolve/main/apps/cases/api/folder_scan_api.py
3.21 kB
| """案件文件夹自动捕获 API。""" | |
| from __future__ import annotations | |
| from uuid import UUID | |
| from django.http import HttpRequest | |
| from ninja import Router | |
| from apps.cases.schemas import ( | |
| CaseFolderScanStageIn, | |
| CaseFolderScanStageOut, | |
| CaseFolderScanStartIn, | |
| CaseFolderScanStartOut, | |
| CaseFolderScanStatusOut, | |
| CaseFolderScanSubfolderListOut, | |
| ) | |
| from apps.cases.services.case.case_access_policy import CaseAccessPolicy | |
| from apps.cases.services.case.case_query_service import CaseQueryService | |
| from apps.cases.services.material.folder_scan_service import CaseFolderScanService | |
| from apps.core.infrastructure.throttling import rate_limit_from_settings | |
| from apps.core.security import get_request_access_context | |
| router = Router() | |
| def _get_service() -> CaseFolderScanService: | |
| return CaseFolderScanService() | |
| def _require_case_access(request: HttpRequest, case_id: int) -> None: | |
| ctx = get_request_access_context(request) | |
| CaseQueryService(access_policy=CaseAccessPolicy()).get_case( | |
| case_id=case_id, | |
| user=ctx.user, | |
| org_access=ctx.org_access, | |
| perm_open_access=ctx.perm_open_access, | |
| ) | |
| def start_case_scan(request: HttpRequest, case_id: int, payload: CaseFolderScanStartIn) -> dict[str, str]: | |
| _require_case_access(request, case_id) | |
| ctx = get_request_access_context(request) | |
| session = _get_service().start_scan( | |
| case_id=case_id, | |
| started_by=ctx.user, | |
| rescan=bool(payload.rescan), | |
| scan_subfolder=str(payload.scan_subfolder or ""), | |
| enable_recognition=bool(payload.enable_recognition), | |
| ) | |
| return { | |
| "session_id": str(session.id), | |
| "status": str(session.status), | |
| "task_id": str(session.task_id or ""), | |
| } | |
| def list_case_scan_subfolders(request: HttpRequest, case_id: int) -> dict[str, object]: | |
| _require_case_access(request, case_id) | |
| return _get_service().list_scan_subfolders(case_id=case_id) | |
| def get_case_scan_status(request: HttpRequest, case_id: int, session_id: UUID) -> dict[str, object]: | |
| _require_case_access(request, case_id) | |
| service = _get_service() | |
| session = service.get_session(case_id=case_id, session_id=session_id) | |
| return service.build_status_payload(session=session) | |
| def stage_case_scan( | |
| request: HttpRequest, | |
| case_id: int, | |
| session_id: UUID, | |
| payload: CaseFolderScanStageIn, | |
| ) -> dict[str, object]: | |
| _require_case_access(request, case_id) | |
| ctx = get_request_access_context(request) | |
| return _get_service().stage_to_attachments( | |
| case_id=case_id, | |
| session_id=session_id, | |
| items=[item.model_dump() for item in payload.items], | |
| user=ctx.user, | |
| org_access=ctx.org_access, | |
| perm_open_access=ctx.perm_open_access, | |
| ) | |