Source code for cadrumo.application.modelo.verification_preconditions
"""Typed, locale-neutral precondition projections for modelo verification."""from__future__importannotationsfromcollections.abcimportIterable,MappingfromdecimalimportDecimalfrompydanticimportBaseModel,model_validatorfrom...core.errors.hierarchyimportpydantic_validation_boundaryfrom...core.identity.hex_idsimportCalculationRevisionIdfrom...core.modelsimportSTRICT_FROZEN_CONFIGfrom...core.operator_action_enumsimportActionEvidenceProvenancefrom...domain.modelos.verification_reportimport(ModeloVerificationFinding,ModeloVerificationFindingSeverity,VerificationReport,)from.preconditionsimportModeloPreconditionFailure,build_modelo_precondition_failure
[docs]classVerificationFindingPreconditionProjection(BaseModel):"""Pair one report fact with its exact application precondition identity."""model_config=STRICT_FROZEN_CONFIGfinding:ModeloVerificationFindingprecondition_failure:ModeloPreconditionFailure|None=None@model_validator(mode="after")@pydantic_validation_boundarydef_require_a_failure_only_for_blocking_findings(self)->VerificationFindingPreconditionProjection:is_blocking=self.finding.severityisModeloVerificationFindingSeverity.BLOCKINGifnotis_blockingandself.precondition_failureisnotNone:raiseValueError("warning verification findings cannot carry a precondition failure")ifis_blockingandself.precondition_failureisNone:raiseValueError("blocking verification findings require a precondition failure")ifself.precondition_failureisnotNoneandself.precondition_failure.subject_leaf_key!="modelo.work.verify":raiseValueError("verification finding preconditions must identify the verify leaf")returnself
[docs]classModeloVerificationResult(BaseModel):"""Persisted report facts paired with transient application decisions."""model_config=STRICT_FROZEN_CONFIGreport:VerificationReportfinding_preconditions:tuple[VerificationFindingPreconditionProjection,...]@model_validator(mode="after")@pydantic_validation_boundarydef_require_exact_report_finding_projection(self)->ModeloVerificationResult:iftuple(projection.findingforprojectioninself.finding_preconditions)!=self.report.findings:raiseValueError("verification preconditions must project the report findings in order")returnself
[docs]defbuild_verification_precondition_failure(*,calculation_revision_id:CalculationRevisionId,work_unit_id:str,condition_id:str,scenario_id:str,evidence_id:str,evidence_values:Mapping[str,str|int|bool|Decimal],provenance:ActionEvidenceProvenance,action_id:str|None=None,)->ModeloPreconditionFailure:"""Build one verify failure with the common persisted addressing facts."""returnbuild_modelo_precondition_failure(subject_leaf_key="modelo.work.verify",condition_id=condition_id,scenario_id=scenario_id,evidence_id=evidence_id,evidence_values={"calculation_revision_id":calculation_revision_id,"work_unit_id":work_unit_id,**evidence_values,},provenance=provenance,action_id=action_id,action_argument_values={}ifaction_idisnotNoneelseNone,)
[docs]defproject_verification_findings(findings:Iterable[ModeloVerificationFinding],*,failures_by_finding_id:Mapping[int,ModeloPreconditionFailure],)->tuple[VerificationFindingPreconditionProjection,...]:"""Project findings by constructor identity; never classify from rendered text."""matched_ids:set[int]=set()projections:list[VerificationFindingPreconditionProjection]=[]forfindinginfindings:failure=failures_by_finding_id.get(id(finding))iffailureisnotNone:matched_ids.add(id(finding))projections.append(VerificationFindingPreconditionProjection(finding=finding,precondition_failure=failure,),)ifmatched_ids!=set(failures_by_finding_id):raiseValueError("verification precondition identity must match an in-flight finding")returntuple(projections)