feat: add D-InSAR source bundle distribution

This commit is contained in:
2026-05-11 11:08:53 +08:00
parent 6893041a9f
commit 508ca5641a
11 changed files with 1150 additions and 63 deletions
+33 -8
View File
@@ -50,7 +50,7 @@ from .timeseries_service import (
timeseries_service,
)
from .unpack_service import run_unpack_task
from ..copier import run_ps_copy_items, run_dinsar_copy_items
from ..copier import run_ps_copy_items, run_dinsar_copy_items, run_dinsar_source_bundle_items
from ..ai_service import (
train_quality_model,
predict_quality,
@@ -116,6 +116,16 @@ def _normalize_copy_statuses(raw_statuses: Any) -> List[str]:
return normalized or ["COMPLETED"]
def _normalize_positive_int(value: Any) -> Optional[int]:
if value in (None, ""):
return None
try:
parsed = int(value)
except (TypeError, ValueError):
return None
return parsed if parsed > 0 else None
def _dedupe_existing_dirs(paths: Any) -> List[str]:
ordered: List[str] = []
for raw_path in paths or []:
@@ -289,6 +299,9 @@ async def _handle_copy_data(job: SystemJobORM) -> None:
copy_statuses = _normalize_copy_statuses(payload.get("copy_statuses"))
include_orbit_files = bool(payload.get("include_orbit_files"))
export_zip = bool(payload.get("export_zip"))
package_mode = str(payload.get("package_mode") or ("task_zip" if export_zip else "task_folder")).strip().lower()
skip_existing = payload.get("skip_existing") is not False
max_items = _normalize_positive_int(payload.get("max_items"))
if not batch_id:
raise ValueError("COPY_DATA requires batch_id payload.")
@@ -377,13 +390,25 @@ async def _handle_copy_data(job: SystemJobORM) -> None:
raise ValueError(
f"No D-InSAR items matched copy statuses: {', '.join(copy_statuses)}"
)
await run_dinsar_copy_items(
job.task_id,
items,
dest_dir,
include_orbit_files=include_orbit_files,
export_zip=export_zip,
)
if package_mode in {"source_bundle", "bundle", "dedupe_source"}:
await run_dinsar_source_bundle_items(
job.task_id,
items,
dest_dir,
include_orbit_files=include_orbit_files,
skip_existing=skip_existing,
max_items=max_items,
)
else:
await run_dinsar_copy_items(
job.task_id,
items,
dest_dir,
include_orbit_files=include_orbit_files,
export_zip=(package_mode == "task_zip" or export_zip),
skip_existing=skip_existing,
max_items=max_items,
)
return
raise ValueError(f"Unknown COPY_DATA file_type: {file_type}")