362 lines
9.6 KiB
Python
362 lines
9.6 KiB
Python
# [DEF:DatasetReviewSchemas:Module]
|
|
#
|
|
# @COMPLEXITY: 3
|
|
# @SEMANTICS: dataset_review, schemas, pydantic, session, profile, findings
|
|
# @PURPOSE: Defines API schemas for the dataset review orchestration flow.
|
|
# @LAYER: API
|
|
# @RELATION: DEPENDS_ON -> [DatasetReviewModels]
|
|
|
|
# [SECTION: IMPORTS]
|
|
from datetime import datetime
|
|
from typing import List, Optional, Any
|
|
from pydantic import BaseModel, Field
|
|
from src.models.dataset_review import (
|
|
SessionStatus,
|
|
SessionPhase,
|
|
ReadinessState,
|
|
RecommendedAction,
|
|
SessionCollaboratorRole,
|
|
BusinessSummarySource,
|
|
ConfidenceState,
|
|
FindingArea,
|
|
FindingSeverity,
|
|
ResolutionState,
|
|
SemanticSourceType,
|
|
TrustLevel,
|
|
SemanticSourceStatus,
|
|
FieldKind,
|
|
FieldProvenance,
|
|
CandidateMatchType,
|
|
CandidateStatus,
|
|
FilterSource,
|
|
FilterConfidenceState,
|
|
FilterRecoveryStatus,
|
|
VariableKind,
|
|
MappingStatus,
|
|
MappingMethod,
|
|
MappingWarningLevel,
|
|
ApprovalState,
|
|
ClarificationStatus,
|
|
QuestionState,
|
|
AnswerKind,
|
|
PreviewStatus,
|
|
LaunchStatus,
|
|
ArtifactType,
|
|
ArtifactFormat
|
|
)
|
|
# [/SECTION]
|
|
|
|
# [DEF:SessionCollaboratorDto:Class]
|
|
class SessionCollaboratorDto(BaseModel):
|
|
user_id: str
|
|
role: SessionCollaboratorRole
|
|
added_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:SessionCollaboratorDto:Class]
|
|
|
|
# [DEF:DatasetProfileDto:Class]
|
|
class DatasetProfileDto(BaseModel):
|
|
profile_id: str
|
|
session_id: str
|
|
dataset_name: str
|
|
schema_name: Optional[str] = None
|
|
database_name: Optional[str] = None
|
|
business_summary: str
|
|
business_summary_source: BusinessSummarySource
|
|
description: Optional[str] = None
|
|
dataset_type: Optional[str] = None
|
|
is_sqllab_view: bool
|
|
completeness_score: Optional[float] = None
|
|
confidence_state: ConfidenceState
|
|
has_blocking_findings: bool
|
|
has_warning_findings: bool
|
|
manual_summary_locked: bool
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:DatasetProfileDto:Class]
|
|
|
|
# [DEF:ValidationFindingDto:Class]
|
|
class ValidationFindingDto(BaseModel):
|
|
finding_id: str
|
|
session_id: str
|
|
area: FindingArea
|
|
severity: FindingSeverity
|
|
code: str
|
|
title: str
|
|
message: str
|
|
resolution_state: ResolutionState
|
|
resolution_note: Optional[str] = None
|
|
caused_by_ref: Optional[str] = None
|
|
created_at: datetime
|
|
resolved_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:ValidationFindingDto:Class]
|
|
|
|
# [DEF:SemanticSourceDto:Class]
|
|
class SemanticSourceDto(BaseModel):
|
|
source_id: str
|
|
session_id: str
|
|
source_type: SemanticSourceType
|
|
source_ref: str
|
|
source_version: str
|
|
display_name: str
|
|
trust_level: TrustLevel
|
|
schema_overlap_score: Optional[float] = None
|
|
status: SemanticSourceStatus
|
|
created_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:SemanticSourceDto:Class]
|
|
|
|
# [DEF:SemanticCandidateDto:Class]
|
|
class SemanticCandidateDto(BaseModel):
|
|
candidate_id: str
|
|
field_id: str
|
|
source_id: Optional[str] = None
|
|
candidate_rank: int
|
|
match_type: CandidateMatchType
|
|
confidence_score: float
|
|
proposed_verbose_name: Optional[str] = None
|
|
proposed_description: Optional[str] = None
|
|
proposed_display_format: Optional[str] = None
|
|
status: CandidateStatus
|
|
created_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:SemanticCandidateDto:Class]
|
|
|
|
# [DEF:SemanticFieldEntryDto:Class]
|
|
class SemanticFieldEntryDto(BaseModel):
|
|
field_id: str
|
|
session_id: str
|
|
field_name: str
|
|
field_kind: FieldKind
|
|
verbose_name: Optional[str] = None
|
|
description: Optional[str] = None
|
|
display_format: Optional[str] = None
|
|
provenance: FieldProvenance
|
|
source_id: Optional[str] = None
|
|
confidence_rank: Optional[int] = None
|
|
is_locked: bool
|
|
has_conflict: bool
|
|
needs_review: bool
|
|
last_changed_by: str
|
|
user_feedback: Optional[str] = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
candidates: List[SemanticCandidateDto] = []
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:SemanticFieldEntryDto:Class]
|
|
|
|
# [DEF:ImportedFilterDto:Class]
|
|
class ImportedFilterDto(BaseModel):
|
|
filter_id: str
|
|
session_id: str
|
|
filter_name: str
|
|
display_name: Optional[str] = None
|
|
raw_value: Any
|
|
normalized_value: Optional[Any] = None
|
|
source: FilterSource
|
|
confidence_state: FilterConfidenceState
|
|
requires_confirmation: bool
|
|
recovery_status: FilterRecoveryStatus
|
|
notes: Optional[str] = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:ImportedFilterDto:Class]
|
|
|
|
# [DEF:TemplateVariableDto:Class]
|
|
class TemplateVariableDto(BaseModel):
|
|
variable_id: str
|
|
session_id: str
|
|
variable_name: str
|
|
expression_source: str
|
|
variable_kind: VariableKind
|
|
is_required: bool
|
|
default_value: Optional[Any] = None
|
|
mapping_status: MappingStatus
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:TemplateVariableDto:Class]
|
|
|
|
# [DEF:ExecutionMappingDto:Class]
|
|
class ExecutionMappingDto(BaseModel):
|
|
mapping_id: str
|
|
session_id: str
|
|
filter_id: str
|
|
variable_id: str
|
|
mapping_method: MappingMethod
|
|
raw_input_value: Any
|
|
effective_value: Optional[Any] = None
|
|
transformation_note: Optional[str] = None
|
|
warning_level: Optional[MappingWarningLevel] = None
|
|
requires_explicit_approval: bool
|
|
approval_state: ApprovalState
|
|
approved_by_user_id: Optional[str] = None
|
|
approved_at: Optional[datetime] = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:ExecutionMappingDto:Class]
|
|
|
|
# [DEF:ClarificationOptionDto:Class]
|
|
class ClarificationOptionDto(BaseModel):
|
|
option_id: str
|
|
question_id: str
|
|
label: str
|
|
value: str
|
|
is_recommended: bool
|
|
display_order: int
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:ClarificationOptionDto:Class]
|
|
|
|
# [DEF:ClarificationAnswerDto:Class]
|
|
class ClarificationAnswerDto(BaseModel):
|
|
answer_id: str
|
|
question_id: str
|
|
answer_kind: AnswerKind
|
|
answer_value: Optional[str] = None
|
|
answered_by_user_id: str
|
|
impact_summary: Optional[str] = None
|
|
created_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:ClarificationAnswerDto:Class]
|
|
|
|
# [DEF:ClarificationQuestionDto:Class]
|
|
class ClarificationQuestionDto(BaseModel):
|
|
question_id: str
|
|
clarification_session_id: str
|
|
topic_ref: str
|
|
question_text: str
|
|
why_it_matters: str
|
|
current_guess: Optional[str] = None
|
|
priority: int
|
|
state: QuestionState
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
options: List[ClarificationOptionDto] = []
|
|
answer: Optional[ClarificationAnswerDto] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:ClarificationQuestionDto:Class]
|
|
|
|
# [DEF:ClarificationSessionDto:Class]
|
|
class ClarificationSessionDto(BaseModel):
|
|
clarification_session_id: str
|
|
session_id: str
|
|
status: ClarificationStatus
|
|
current_question_id: Optional[str] = None
|
|
resolved_count: int
|
|
remaining_count: int
|
|
summary_delta: Optional[str] = None
|
|
started_at: datetime
|
|
updated_at: datetime
|
|
completed_at: Optional[datetime] = None
|
|
questions: List[ClarificationQuestionDto] = []
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:ClarificationSessionDto:Class]
|
|
|
|
# [DEF:CompiledPreviewDto:Class]
|
|
class CompiledPreviewDto(BaseModel):
|
|
preview_id: str
|
|
session_id: str
|
|
preview_status: PreviewStatus
|
|
compiled_sql: Optional[str] = None
|
|
preview_fingerprint: str
|
|
compiled_by: str
|
|
error_code: Optional[str] = None
|
|
error_details: Optional[str] = None
|
|
compiled_at: Optional[datetime] = None
|
|
created_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:CompiledPreviewDto:Class]
|
|
|
|
# [DEF:DatasetRunContextDto:Class]
|
|
class DatasetRunContextDto(BaseModel):
|
|
run_context_id: str
|
|
session_id: str
|
|
dataset_ref: str
|
|
environment_id: str
|
|
preview_id: str
|
|
sql_lab_session_ref: str
|
|
effective_filters: Any
|
|
template_params: Any
|
|
approved_mapping_ids: List[str]
|
|
semantic_decision_refs: List[str]
|
|
open_warning_refs: List[str]
|
|
launch_status: LaunchStatus
|
|
launch_error: Optional[str] = None
|
|
created_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:DatasetRunContextDto:Class]
|
|
|
|
# [DEF:SessionSummary:Class]
|
|
class SessionSummary(BaseModel):
|
|
session_id: str
|
|
user_id: str
|
|
environment_id: str
|
|
source_kind: str
|
|
source_input: str
|
|
dataset_ref: str
|
|
dataset_id: Optional[int] = None
|
|
readiness_state: ReadinessState
|
|
recommended_action: RecommendedAction
|
|
status: SessionStatus
|
|
current_phase: SessionPhase
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
last_activity_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:SessionSummary:Class]
|
|
|
|
# [DEF:SessionDetail:Class]
|
|
class SessionDetail(SessionSummary):
|
|
collaborators: List[SessionCollaboratorDto] = []
|
|
profile: Optional[DatasetProfileDto] = None
|
|
findings: List[ValidationFindingDto] = []
|
|
semantic_sources: List[SemanticSourceDto] = []
|
|
semantic_fields: List[SemanticFieldEntryDto] = []
|
|
imported_filters: List[ImportedFilterDto] = []
|
|
template_variables: List[TemplateVariableDto] = []
|
|
execution_mappings: List[ExecutionMappingDto] = []
|
|
clarification_sessions: List[ClarificationSessionDto] = []
|
|
previews: List[CompiledPreviewDto] = []
|
|
run_contexts: List[DatasetRunContextDto] = []
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:SessionDetail:Class]
|
|
|
|
# [/DEF:DatasetReviewSchemas:Module] |