feat(provenance): govern source snapshots and data inputs
This commit is contained in:
@@ -32,6 +32,14 @@ from .source_catalog import (
|
||||
SourceCatalogProbeReport,
|
||||
SourceCatalogProbeSummary,
|
||||
)
|
||||
from .source_registry import (
|
||||
DatasetProvenanceRead,
|
||||
DatasetLineageEdgeRead,
|
||||
DatasetQuarantineRead,
|
||||
SourceRegistryDetailRead,
|
||||
SourceRegistryRead,
|
||||
SourceSnapshotRead,
|
||||
)
|
||||
from .grb_refresh import GrbRefreshLayerPlan, GrbRefreshPlan, GrbRefreshPlanSummary
|
||||
from .grb import GrbAcquireRequest, GrbAcquisitionResult, GrbProductRead
|
||||
from .official_vector import (
|
||||
@@ -207,6 +215,12 @@ __all__ = [
|
||||
"SourceCatalogProbeItem",
|
||||
"SourceCatalogProbeReport",
|
||||
"SourceCatalogProbeSummary",
|
||||
"SourceRegistryRead",
|
||||
"SourceRegistryDetailRead",
|
||||
"SourceSnapshotRead",
|
||||
"DatasetLineageEdgeRead",
|
||||
"DatasetQuarantineRead",
|
||||
"DatasetProvenanceRead",
|
||||
"GrbRefreshLayerPlan",
|
||||
"GrbRefreshPlan",
|
||||
"GrbRefreshPlanSummary",
|
||||
@@ -271,6 +285,10 @@ __all__ = [
|
||||
"FloodHazardSelectionSummary",
|
||||
"BathymetryProfileAcquireRequest",
|
||||
"BathymetryProfileAcquisitionResult",
|
||||
"BathymetryRasterMetric",
|
||||
"BathymetryRasterSelectionRequest",
|
||||
"BathymetryRasterSelectionResponse",
|
||||
"BathymetryRasterSelectionSummary",
|
||||
"BathymetryPartitionFinalizeRequest",
|
||||
"BathymetryPartitionFinalizationResult",
|
||||
"BathymetrySourceProbeRead",
|
||||
|
||||
@@ -35,6 +35,16 @@ class DatasetCreateResponse(BaseModel):
|
||||
reference_layer_name: str | None = None
|
||||
source_metadata: dict | None = None
|
||||
provenance_metadata: dict | None = None
|
||||
ingest_key: str | None = None
|
||||
source_registry_id: UUID | None = None
|
||||
source_snapshot_id: UUID | None = None
|
||||
data_contract_key: str | None = None
|
||||
data_contract_version: str | None = None
|
||||
validation_status: str | None = None
|
||||
validation_report_json: dict | None = None
|
||||
provenance_status: str | None = None
|
||||
lineage_status: str | None = None
|
||||
quarantine_status: str | None = None
|
||||
imported_at: datetime | None = None
|
||||
temporal_series_key: str | None = None
|
||||
observed_at: datetime | None = None
|
||||
@@ -97,6 +107,15 @@ class DatasetVersionRead(BaseModel):
|
||||
checksum_sha256: str | None = None
|
||||
source_metadata: dict | None = None
|
||||
provenance_metadata: dict | None = None
|
||||
ingest_key: str | None = None
|
||||
source_registry_id: UUID | None = None
|
||||
source_snapshot_id: UUID | None = None
|
||||
data_contract_key: str | None = None
|
||||
data_contract_version: str | None = None
|
||||
validation_status: str | None = None
|
||||
validation_report_json: dict | None = None
|
||||
provenance_status: str | None = None
|
||||
lineage_status: str | None = None
|
||||
created_at: datetime | None = None
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
@@ -144,6 +144,8 @@ class YoloPreflightChecks(BaseModel):
|
||||
accelerator_ready: bool | None = None
|
||||
model_path_set: bool | None = None
|
||||
model_file_exists: bool | None = None
|
||||
model_provenance_manifest_path: str | None = None
|
||||
model_provenance_valid: bool | None = None
|
||||
model_load_requested: bool
|
||||
model_load_ok: bool | None = None
|
||||
manifest_path_set: bool | None = None
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from uuid import UUID
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class SourceRegistryRead(BaseModel):
|
||||
"""Read-only, server-owned source-authority definition."""
|
||||
|
||||
id: UUID
|
||||
source_key: str
|
||||
display_name: str
|
||||
classification: str
|
||||
authority_name: str
|
||||
authority_scope_json: dict
|
||||
provider_adapter_key: str | None = None
|
||||
source_url: str | None = None
|
||||
license_name: str
|
||||
license_url: str | None = None
|
||||
usage_restrictions: str
|
||||
default_crs: str
|
||||
default_units: str
|
||||
spatial_resolution_json: dict
|
||||
temporal_coverage_json: dict
|
||||
geographic_coverage_json: dict
|
||||
expected_geometry_types_json: list
|
||||
expected_attributes_json: dict
|
||||
usage_policy_json: dict
|
||||
freshness_status: str
|
||||
ingest_status: str
|
||||
known_limitations_json: list
|
||||
registry_metadata_json: dict
|
||||
created_at: datetime | None = None
|
||||
updated_at: datetime | None = None
|
||||
snapshot_count: int = 0
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class SourceSnapshotRead(BaseModel):
|
||||
"""Immutable version/snapshot evidence attached to an imported dataset."""
|
||||
|
||||
id: UUID
|
||||
source_registry_id: UUID
|
||||
snapshot_key: str
|
||||
source_version: str | None = None
|
||||
snapshot_at: datetime | None = None
|
||||
fetched_at: datetime | None = None
|
||||
source_url: str | None = None
|
||||
checksum_sha256: str | None = None
|
||||
crs: str | None = None
|
||||
units: str | None = None
|
||||
spatial_resolution_json: dict
|
||||
temporal_coverage_json: dict
|
||||
geographic_coverage_json: dict
|
||||
observed_schema_json: dict
|
||||
freshness_status: str
|
||||
ingest_status: str
|
||||
known_limitations_json: list
|
||||
snapshot_metadata_json: dict
|
||||
created_at: datetime | None = None
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class SourceRegistryDetailRead(BaseModel):
|
||||
source: SourceRegistryRead
|
||||
snapshots: list[SourceSnapshotRead]
|
||||
|
||||
|
||||
class DatasetLineageEdgeRead(BaseModel):
|
||||
id: UUID
|
||||
parent_dataset_id: UUID
|
||||
child_dataset_id: UUID
|
||||
parent_dataset_version_id: UUID | None = None
|
||||
child_dataset_version_id: UUID | None = None
|
||||
relation_type: str
|
||||
transformation_name: str
|
||||
transformation_version: str | None = None
|
||||
parameters_json: dict | None = None
|
||||
input_checksum_sha256: str | None = None
|
||||
output_checksum_sha256: str | None = None
|
||||
created_at: datetime | None = None
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class DatasetQuarantineRead(BaseModel):
|
||||
id: UUID
|
||||
dataset_id: UUID | None = None
|
||||
dataset_version_id: UUID | None = None
|
||||
source_snapshot_id: UUID | None = None
|
||||
stage: str
|
||||
reason_code: str
|
||||
details_json: dict | None = None
|
||||
artifact_path: str | None = None
|
||||
artifact_checksum_sha256: str | None = None
|
||||
status: str
|
||||
created_at: datetime | None = None
|
||||
resolved_at: datetime | None = None
|
||||
resolved_by: str | None = None
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class DatasetProvenanceRead(BaseModel):
|
||||
dataset_id: UUID
|
||||
source: SourceRegistryRead | None = None
|
||||
snapshot: SourceSnapshotRead | None = None
|
||||
data_contract_key: str | None = None
|
||||
data_contract_version: str | None = None
|
||||
validation_status: str | None = None
|
||||
validation_report_json: dict | None = None
|
||||
provenance_status: str | None = None
|
||||
lineage_status: str | None = None
|
||||
quarantine_status: str | None = None
|
||||
lineage: list[DatasetLineageEdgeRead] = Field(default_factory=list)
|
||||
quarantines: list[DatasetQuarantineRead] = Field(default_factory=list)
|
||||
Reference in New Issue
Block a user