Refactor local InSAR asset and production workflows

This commit is contained in:
2026-06-21 12:30:21 +08:00
parent 65a8cc4eac
commit 71c524967c
88 changed files with 11165 additions and 3017 deletions
+53 -4
View File
@@ -22,21 +22,29 @@ router = APIRouter(prefix="/assets", tags=["assets"])
class AssetScanRequest(BaseModel):
inventory_types: List[str] = Field(default_factory=list)
root_ids: List[int] = Field(default_factory=list)
families: List[str] = Field(default_factory=list)
bind_orbits: bool = True
build_previews: bool = True
class ArchiveIntegrityAuditRequest(BaseModel):
families: List[str] = Field(default_factory=list)
source_formats: List[str] = Field(default_factory=list)
asset_ids: List[int] = Field(default_factory=list)
force: bool = False
limit: Optional[int] = Field(default=None, ge=0)
class S1UnpackRequest(BaseModel):
target_root: Optional[str] = None
overwrite: bool = False
min_disk_space_gb: Optional[float] = Field(default=None, ge=0)
delete_archive: Optional[bool] = None
class S1BatchUnpackRequest(BaseModel):
target_root: Optional[str] = None
overwrite: bool = False
min_disk_space_gb: Optional[float] = Field(default=None, ge=0)
delete_archive: Optional[bool] = None
scan_before_unpack: bool = True
@@ -89,7 +97,50 @@ async def run_asset_inventory_scan_now(
db,
inventory_types=payload.get("inventory_types") or None,
root_ids=payload.get("root_ids") or None,
families=payload.get("families") or None,
bind_orbits=bool(payload.get("bind_orbits", True)),
build_previews=bool(payload.get("build_previews", True)),
)
@router.post("/inventory/archive-integrity-audit", status_code=202)
async def run_archive_integrity_audit(
request: Optional[ArchiveIntegrityAuditRequest] = None,
admin_user: AuthUserORM = Depends(_require_admin),
):
_ = admin_user
payload = (request or ArchiveIntegrityAuditRequest()).model_dump()
try:
task_id = await task_service.create_task(
"AUDIT_SOURCE_ARCHIVE_INTEGRITY",
"Source archive integrity audit",
params=payload,
)
job_id = await job_queue_service.create_job(
"AUDIT_SOURCE_ARCHIVE_INTEGRITY",
payload=payload,
task_id=task_id,
)
return {"message": "Source archive integrity audit queued", "task_id": task_id, "job_id": job_id}
except ValueError as exc:
raise HTTPException(status_code=409, detail=str(exc)) from exc
@router.post("/inventory/archive-integrity-audit-now")
async def run_archive_integrity_audit_now(
request: Optional[ArchiveIntegrityAuditRequest] = None,
admin_user: AuthUserORM = Depends(_require_admin),
db: AsyncSession = Depends(get_db),
):
_ = admin_user
payload = (request or ArchiveIntegrityAuditRequest()).model_dump()
return await asset_inventory_service.audit_source_archive_integrity(
db,
families=payload.get("families") or None,
source_formats=payload.get("source_formats") or None,
asset_ids=payload.get("asset_ids") or None,
force=bool(payload.get("force", False)),
limit=payload.get("limit"),
)
@@ -186,8 +237,6 @@ async def unpack_sentinel1_source_asset(
}
if request_data.min_disk_space_gb is not None:
payload["min_disk_space_gb"] = request_data.min_disk_space_gb
if request_data.delete_archive is not None:
payload["delete_archive"] = request_data.delete_archive
try:
task_id = await task_service.create_task(
"UNPACK_SENTINEL1",