Download apps/pdf_splitting/tasks.py from jun2024/fc: direct link, hf CLI and curl.
- Browser
- Download file 2.61 kB
-
https://huggingface.co/spaces/jun2024/fc/resolve/main/apps/pdf_splitting/tasks.py
- Command line
-
hf download hf://spaces/jun2024/fc/apps/pdf_splitting/tasks.py
-
curl -L -o tasks.py https://huggingface.co/spaces/jun2024/fc/resolve/main/apps/pdf_splitting/tasks.py
2.61 kB
| from __future__ import annotations | |
| import logging | |
| from uuid import UUID | |
| from apps.core.services.storage_service import normalize_to_media_rel | |
| from apps.pdf_splitting.models import PdfSplitJob, PdfSplitJobStatus, PdfSplitMode | |
| from apps.pdf_splitting.services import PdfSplitJobService, PdfSplitService | |
| from apps.pdf_splitting.services.storage import PdfSplitStorage | |
| logger = logging.getLogger("apps.pdf_splitting") | |
| def execute_pdf_split_job(job_id: str) -> None: | |
| job_service = PdfSplitJobService() | |
| split_service = PdfSplitService() | |
| job_uuid = UUID(job_id) | |
| try: | |
| job = job_service.get_job(job_uuid) | |
| job.refresh_from_db(fields=["split_mode"]) | |
| # 手动拆分模式跳过后台分析,直接进入待复核状态 | |
| if job.split_mode == PdfSplitMode.MANUAL_SPLIT: | |
| PdfSplitJob.objects.filter(id=job.id).update( | |
| status=PdfSplitJobStatus.REVIEW_REQUIRED, | |
| progress=100, | |
| ) | |
| return | |
| split_service.analyze_job(job) | |
| job.refresh_from_db(fields=["split_mode", "status", "cancel_requested"]) | |
| if ( | |
| job.split_mode == PdfSplitMode.PAGE_SPLIT | |
| and job.status == PdfSplitJobStatus.REVIEW_REQUIRED | |
| and not job.cancel_requested | |
| ): | |
| split_service.export_job(job) | |
| storage = PdfSplitStorage(job.id) | |
| job.refresh_from_db(fields=["status", "cancel_requested"]) | |
| if job.cancel_requested: | |
| return | |
| job_service.mark_completed( | |
| job_id=job_uuid, | |
| export_zip_relpath=normalize_to_media_rel(storage.export_zip_path.as_posix()), | |
| ) | |
| except Exception as exc: | |
| logger.exception("pdf_split_job_failed", extra={"job_id": job_id}) | |
| job_service.mark_failed(job_id=job_uuid, error_message=str(exc)) | |
| def export_pdf_split_job(job_id: str) -> None: | |
| job_service = PdfSplitJobService() | |
| split_service = PdfSplitService() | |
| job_uuid = UUID(job_id) | |
| try: | |
| job = job_service.get_job(job_uuid) | |
| split_service.export_job(job) | |
| storage = PdfSplitStorage(job.id) | |
| job.refresh_from_db(fields=["status", "cancel_requested"]) | |
| if job.cancel_requested: | |
| return | |
| job_service.mark_completed( | |
| job_id=job_uuid, export_zip_relpath=normalize_to_media_rel(storage.export_zip_path.as_posix()) | |
| ) | |
| except Exception as exc: | |
| logger.exception("pdf_split_export_failed", extra={"job_id": job_id}) | |
| job_service.mark_failed(job_id=job_uuid, error_message=str(exc)) | |