Fix raster upload metadata mapping
This commit is contained in:
@@ -145,6 +145,43 @@ class DatasetService:
|
||||
crs_assumed=metadata_json.get("crs_assumed"),
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _extract_raster_bounds_json(metadata_json: dict[str, Any]) -> dict[str, float] | None:
|
||||
existing = metadata_json.get("bounds_json")
|
||||
if isinstance(existing, dict):
|
||||
return existing
|
||||
bounds = metadata_json.get("bounds")
|
||||
if isinstance(bounds, (list, tuple)) and len(bounds) == 4:
|
||||
return {
|
||||
"minx": float(bounds[0]),
|
||||
"miny": float(bounds[1]),
|
||||
"maxx": float(bounds[2]),
|
||||
"maxy": float(bounds[3]),
|
||||
}
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def _extract_raster_resolution_json(metadata_json: dict[str, Any]) -> dict[str, float] | None:
|
||||
existing = metadata_json.get("resolution_json")
|
||||
if isinstance(existing, dict):
|
||||
return existing
|
||||
resolution = metadata_json.get("resolution")
|
||||
if isinstance(resolution, (list, tuple)) and len(resolution) >= 2:
|
||||
return {"x": float(resolution[0]), "y": float(resolution[1])}
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def _extract_raster_bands_json(metadata_json: dict[str, Any]) -> dict[str, Any] | None:
|
||||
existing = metadata_json.get("bands_json")
|
||||
if isinstance(existing, dict):
|
||||
return existing
|
||||
bands_json: dict[str, Any] = {}
|
||||
if metadata_json.get("band_count") is not None:
|
||||
bands_json["band_count"] = int(metadata_json["band_count"])
|
||||
if metadata_json.get("dtype") is not None:
|
||||
bands_json["dtype"] = metadata_json["dtype"]
|
||||
return bands_json or None
|
||||
|
||||
@staticmethod
|
||||
async def upload_dataset(
|
||||
db: Session,
|
||||
@@ -222,6 +259,14 @@ class DatasetService:
|
||||
StorageService.remove_dataset_file(storage_info["storage_path"])
|
||||
raise
|
||||
|
||||
bounds_json = metadata.get("bounds_json") if isinstance(metadata, dict) else None
|
||||
resolution_json = metadata.get("resolution_json") if isinstance(metadata, dict) else None
|
||||
bands_json = metadata.get("bands_json") if isinstance(metadata, dict) else None
|
||||
if canonical_type == "raster" and isinstance(metadata, dict):
|
||||
bounds_json = DatasetService._extract_raster_bounds_json(metadata)
|
||||
resolution_json = DatasetService._extract_raster_resolution_json(metadata)
|
||||
bands_json = DatasetService._extract_raster_bands_json(metadata)
|
||||
|
||||
dataset = Dataset(
|
||||
id=dataset_id,
|
||||
project_id=project_id,
|
||||
@@ -242,9 +287,9 @@ class DatasetService:
|
||||
size_bytes=storage_info["size_bytes"],
|
||||
checksum_sha256=storage_info["checksum_sha256"],
|
||||
crs=metadata.get("crs") if isinstance(metadata, dict) else None,
|
||||
bounds_json=metadata.get("bounds_json") if isinstance(metadata, dict) else None,
|
||||
resolution_json=metadata.get("resolution_json") if isinstance(metadata, dict) else None,
|
||||
bands_json=metadata.get("bands_json") if isinstance(metadata, dict) else None,
|
||||
bounds_json=bounds_json,
|
||||
resolution_json=resolution_json,
|
||||
bands_json=bands_json,
|
||||
metadata_json=metadata,
|
||||
status=status,
|
||||
)
|
||||
@@ -317,11 +362,19 @@ class DatasetService:
|
||||
dataset.status = "failed"
|
||||
raise
|
||||
|
||||
bounds_json = metadata.get("bounds_json") if isinstance(metadata, dict) else dataset.bounds_json
|
||||
resolution_json = metadata.get("resolution_json") if isinstance(metadata, dict) else dataset.resolution_json
|
||||
bands_json = metadata.get("bands_json") if isinstance(metadata, dict) else dataset.bands_json
|
||||
if DatasetService._is_raster_type(dataset.dataset_type) and isinstance(metadata, dict):
|
||||
bounds_json = DatasetService._extract_raster_bounds_json(metadata)
|
||||
resolution_json = DatasetService._extract_raster_resolution_json(metadata)
|
||||
bands_json = DatasetService._extract_raster_bands_json(metadata)
|
||||
|
||||
dataset.crs = metadata.get("crs") if isinstance(metadata, dict) else dataset.crs
|
||||
dataset.bounds_json = metadata.get("bounds_json") if isinstance(metadata, dict) else dataset.bounds_json
|
||||
dataset.bounds_json = bounds_json
|
||||
dataset.metadata_json = metadata
|
||||
dataset.resolution_json = metadata.get("resolution_json") if isinstance(metadata, dict) else dataset.resolution_json
|
||||
dataset.bands_json = metadata.get("bands_json") if isinstance(metadata, dict) else dataset.bands_json
|
||||
dataset.resolution_json = resolution_json
|
||||
dataset.bands_json = bands_json
|
||||
|
||||
db.add(dataset)
|
||||
db.commit()
|
||||
|
||||
Reference in New Issue
Block a user