feat: support UNC source archive inventory
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query
|
||||
@@ -39,6 +40,11 @@ class S1BatchUnpackRequest(BaseModel):
|
||||
scan_before_unpack: bool = True
|
||||
|
||||
|
||||
class SourceMaterializeRequest(BaseModel):
|
||||
target_root: Optional[str] = None
|
||||
overwrite: bool = False
|
||||
|
||||
|
||||
@router.get("/inventory/status")
|
||||
async def get_asset_inventory_status(
|
||||
current_user: AuthUserORM = Depends(_get_current_user),
|
||||
@@ -199,6 +205,35 @@ async def unpack_sentinel1_source_asset(
|
||||
return {"message": "Sentinel-1 unpack task queued", "task_id": task_id, "job_id": job_id}
|
||||
|
||||
|
||||
@router.post("/sources/{asset_id}/materialize")
|
||||
async def materialize_source_asset(
|
||||
asset_id: int,
|
||||
request: Optional[SourceMaterializeRequest] = None,
|
||||
admin_user: AuthUserORM = Depends(_require_admin),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
_ = admin_user
|
||||
asset = await db.get(SourceProductAssetORM, asset_id)
|
||||
if asset is None:
|
||||
raise HTTPException(status_code=404, detail="Source product asset not found.")
|
||||
request_data = request or SourceMaterializeRequest()
|
||||
try:
|
||||
result = asset_inventory_service.materialize_source_asset(
|
||||
asset,
|
||||
target_root=request_data.target_root,
|
||||
overwrite=bool(request_data.overwrite),
|
||||
)
|
||||
except Exception as exc:
|
||||
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
||||
metadata = dict(asset.metadata_json or {})
|
||||
metadata["last_materialized_dir"] = result.get("safe_dir") or result.get("target_dir")
|
||||
metadata["last_materialized_at"] = datetime.utcnow().isoformat()
|
||||
metadata["last_materialized_status"] = result.get("status")
|
||||
asset.metadata_json = metadata
|
||||
await db.commit()
|
||||
return {"message": "Source asset materialized", "result": result}
|
||||
|
||||
|
||||
@router.post("/inventory/unpack-sentinel1", status_code=202)
|
||||
async def run_sentinel1_unpack_batch(
|
||||
request: Optional[S1BatchUnpackRequest] = None,
|
||||
|
||||
Reference in New Issue
Block a user