From 6324b7a95e7aed88f4729b1cc8baaf87eb298f39 Mon Sep 17 00:00:00 2001 From: grigo Date: Fri, 26 Jun 2026 12:30:19 +0300 Subject: [PATCH] added formulas --- .../routers/__pycache__/jobs.cpython-313.pyc | Bin 3106 -> 3357 bytes api/app/routers/jobs.py | 4 ++- api/tests/test_jobs_and_propagation.py | 26 ++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/api/app/routers/__pycache__/jobs.cpython-313.pyc b/api/app/routers/__pycache__/jobs.cpython-313.pyc index 134ea2f4728773459ae499cdd481b4040d437353..9de86364847a1c72ed267c399aa7dd76ffa7a7ab 100644 GIT binary patch delta 739 zcmZ1^F;|N3GcPX}0}!;j+GR;{Zsa?_$YjSn`2yn$zC5OAUXTn3gfdOu!6c^;%?IH! zFqkqySQ=1)L_wG$E`LS?hCJp_rXbFV8$@JG86hfc8DUCOfJzk@LYcwxJTUn@mQa?- zx0p!|avjYVbAmEmE$z&%s zYc4&Y5GY293n#a;r3dhd^hb3@&EUAqt9YGPeL+xz+Z{#i6>jUjR(fqHyR2h(gyp)T z>qSM^4zqr%POAxNSGZ+Q7&W-u;1cN9>eQMLdYMc5I+xyzlKB-gD^{@1uHVebUd5;( z541p&3F1uVto)>6P|PbR6zKvfpwm(lQ;Lj%OvA~mIqVqqH^1VLVr0~t%*th>stpuI zQOyfd9iLcKl9`s6TvB8Ml((6j#udV$4`gYI7g*N2#rjdLOFTN(Sk5>m{^byOawvWHbawv zA&(`(IYjw(h*xykjM;sRP=bBj_FQ;H0LO#R8rIPDm9Hb3Q*Vr0~w z#BHOh0Wy*aNGK>2ffe(D6vrnPm1L$RCYKah0;Q}bCvt~y=m1%o;zeeY_j1qB2Dzq4 z9z=kQ1*=-gPy|u}F@?h>H$SB`C)KXVd2$1fk+2-2zzpLL3_xmu$rljy!D;eQo)8w0 F4giGlX)gc( diff --git a/api/app/routers/jobs.py b/api/app/routers/jobs.py index f4d235c..93f2ff2 100644 --- a/api/app/routers/jobs.py +++ b/api/app/routers/jobs.py @@ -23,7 +23,9 @@ def _artifact_path(job_id: str) -> Path: status_code=status.HTTP_409_CONFLICT, detail={"code": "JOB_NOT_READY", "detail": "Job is not finished yet"}, ) - uri = (record.get("result") or {}).get("uri") + result = record.get("result") or {} + data = result.get("data") if isinstance(result.get("data"), dict) else {} + uri = result.get("uri") or data.get("uri") if not uri: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, diff --git a/api/tests/test_jobs_and_propagation.py b/api/tests/test_jobs_and_propagation.py index a0245e6..4075c86 100644 --- a/api/tests/test_jobs_and_propagation.py +++ b/api/tests/test_jobs_and_propagation.py @@ -1,6 +1,7 @@ from __future__ import annotations from pathlib import Path +from types import SimpleNamespace import pytest import rasterio @@ -8,6 +9,7 @@ import rasterio from app.core import coverage as coverage_core from app.core.antenna import AntennaPattern, gain from app.core.coverage import compute_coverage +from app.routers import jobs as jobs_router from app.core.surface import SurfaceProfile, SurfaceSample from app.core.vegetation import WORLDCOVER_P833, p833_coefficients_for_class from app.models.coverage import CoverageRequest @@ -24,6 +26,30 @@ def test_jobs_store_roundtrip() -> None: assert response.result == {"ok": True} +def test_job_artifact_path_supports_nested_coverage_uri( + monkeypatch: pytest.MonkeyPatch, + tmp_path: Path, +) -> None: + artifact = tmp_path / "coverage.png" + artifact.write_bytes(b"png") + job_id = jobs.create_job("coverage", {"model": "fspl"}) + jobs.update_job( + job_id, + status="done", + result={ + "kind": "coverage", + "data": {"kind": "coverage_raster", "uri": str(artifact)}, + }, + ) + monkeypatch.setattr( + jobs_router, + "get_settings", + lambda: SimpleNamespace(jobs_output_path=tmp_path), + ) + + assert jobs_router._artifact_path(job_id) == artifact.resolve() + + def test_coverage_fspl_geojson() -> None: request = _coverage_request(format="geojson", radius_m=5000, range_step_m=500) result = compute_coverage(request)