feat(provenance): govern source snapshots and data inputs
This commit is contained in:
@@ -13,6 +13,7 @@ from shapely.validation import make_valid
|
||||
|
||||
from app.core.errors import AppError
|
||||
from app.models import Area, Dataset, DatasetVersion
|
||||
from app.services.derived_dataset_governance_service import DerivedDatasetGovernanceService
|
||||
from app.services.raster_service import extract_raster_metadata
|
||||
from app.services.storage_service import StorageService
|
||||
|
||||
@@ -334,7 +335,10 @@ class RasterOperationsService:
|
||||
dataset_type="raster",
|
||||
source=f"operation:{operation_name}",
|
||||
dataset_role="derived",
|
||||
source_name=source_dataset.source_name,
|
||||
# The source identity of this artifact is the server-owned
|
||||
# derived-operation registry entry. The parent remains explicit
|
||||
# in provenance and the lineage edge below.
|
||||
source_name="derived",
|
||||
source_metadata=source_dataset.source_metadata,
|
||||
provenance_metadata=provenance,
|
||||
imported_at=datetime.now(timezone.utc),
|
||||
@@ -360,22 +364,31 @@ class RasterOperationsService:
|
||||
resolution_json=metadata_payload.get("resolution"),
|
||||
bands_json={"dtype": metadata_payload.get("dtype")} if metadata_payload.get("dtype") is not None else None,
|
||||
metadata_json=metadata_payload,
|
||||
status="ready",
|
||||
status="validating",
|
||||
)
|
||||
db.add(derived_dataset)
|
||||
db.add(
|
||||
DatasetVersion(
|
||||
dataset_id=derived_dataset.id,
|
||||
version=1,
|
||||
storage_path=derived_dataset.storage_path,
|
||||
source_version=derived_dataset.source_version,
|
||||
observed_at=derived_dataset.observed_at,
|
||||
valid_from=derived_dataset.valid_from,
|
||||
valid_to=derived_dataset.valid_to,
|
||||
checksum_sha256=derived_dataset.checksum_sha256,
|
||||
source_metadata=derived_dataset.source_metadata,
|
||||
provenance_metadata=derived_dataset.provenance_metadata,
|
||||
)
|
||||
dataset_version = DatasetVersion(
|
||||
dataset_id=derived_dataset.id,
|
||||
version=1,
|
||||
storage_path=derived_dataset.storage_path,
|
||||
source_version=derived_dataset.source_version,
|
||||
observed_at=derived_dataset.observed_at,
|
||||
valid_from=derived_dataset.valid_from,
|
||||
valid_to=derived_dataset.valid_to,
|
||||
checksum_sha256=derived_dataset.checksum_sha256,
|
||||
source_metadata=derived_dataset.source_metadata,
|
||||
provenance_metadata=derived_dataset.provenance_metadata,
|
||||
)
|
||||
db.add(dataset_version)
|
||||
DerivedDatasetGovernanceService.govern_raster(
|
||||
db,
|
||||
dataset=derived_dataset,
|
||||
dataset_version=dataset_version,
|
||||
raster_metadata=metadata_payload,
|
||||
source_key="derived",
|
||||
operation=operation_name,
|
||||
parent_dataset=source_dataset,
|
||||
operation_parameters=metadata_payload.get("operation_parameters"),
|
||||
)
|
||||
db.commit()
|
||||
db.refresh(derived_dataset)
|
||||
|
||||
Reference in New Issue
Block a user