121 lines
3.5 KiB
Python
121 lines
3.5 KiB
Python
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)
|