Source code for cadrumo.application.operations.capabilities
"""Validated capability declarations for registered operation definitions."""from__future__importannotationsfromenumimportStrEnumfrompydanticimportBaseModel,model_validatorfrom...core.errors.hierarchyimportpydantic_validation_boundaryfrom...core.modelsimportSTRICT_FROZEN_CONFIGfrom...core.operationsimport(OperationCancellation,OperationClosePolicy,OperationDeadline,OperationDurability,OperationEffect,)
[docs]classOperationReplayPolicy(StrEnum):"""Idempotency and restart behavior declared by an operation definition."""NONE="none"IDEMPOTENT_SUBMIT="idempotent_submit"RESUMABLE="resumable"
[docs]classOperationBaselinePolicy(StrEnum):"""Binding required between an operation and domain-owned baseline state."""NONE="none"REQUEST_BOUND="request_bound"EXACT_APPROVAL="exact_approval"
[docs]classOperationSensitiveInputPolicy(StrEnum):"""Whether sensitive operands are absent or resolved through secure custody."""NONE="none"SECURE_REFERENCE="secure_reference"
[docs]classOperationRequestStoragePolicy(StrEnum):"""Exclusive durable location for one operation's validated request."""SECURE_REFERENCE="secure_reference"CREDENTIAL_FREE_JOURNAL="credential_free_journal"
[docs]classOperationConflictScope(StrEnum):"""Lease scope used to exclude conflicting operation owners."""NONE="none"DEFINITION_SUBJECT="definition_subject"
[docs]classOperationCapabilities(BaseModel):"""Complete, immutable capabilities of one registered operation type."""model_config=STRICT_FROZEN_CONFIGdurability:OperationDurabilitycancellation:OperationCancellationdeadline:OperationDeadlinereplay:OperationReplayPolicybaseline:OperationBaselinePolicyrequest_storage:OperationRequestStoragePolicysensitive_input:OperationSensitiveInputPolicyconflict_scope:OperationConflictScopeowned_resources:frozenset[OperationOwnedResource]permitted_effects:frozenset[OperationEffect]close_policy:OperationClosePolicy@model_validator(mode="after")@pydantic_validation_boundarydef_validate_combinations(self)->OperationCapabilities:self._validate_durability()self._validate_stopping()self._validate_close_policy()if(self.request_storageisOperationRequestStoragePolicy.CREDENTIAL_FREE_JOURNALandself.sensitive_inputisnotOperationSensitiveInputPolicy.NONE):raiseValueError("credential-free journal requests cannot declare sensitive request input")returnselfdef_validate_durability(self)->None:ifnotself.permitted_effects:raiseValueError("operation capabilities must declare at least one permitted effect")ifself.durabilityisOperationDurability.EPHEMERAL:ifself.permitted_effects!=frozenset({OperationEffect.NONE}):raiseValueError("ephemeral operations may permit only the none effect")ifself.replayisnotOperationReplayPolicy.NONE:raiseValueError("ephemeral operations cannot promise durable replay")ifself.conflict_scopeisnotOperationConflictScope.NONE:raiseValueError("ephemeral operations cannot declare a durable lease scope")else:ifself.conflict_scopeisOperationConflictScope.NONE:raiseValueError("recorded and resumable operations require a conflict scope")resumable=self.durabilityisOperationDurability.RESUMABLEifresumable!=(self.replayisOperationReplayPolicy.RESUMABLE):raiseValueError("resumable durability and replay capability must be declared together")def_validate_stopping(self)->None:ifself.cancellationisOperationCancellation.CONTAINEDandnotself.owned_resources:raiseValueError("contained cancellation requires a supervisor-owned resource")ifself.deadlineisOperationDeadline.COOPERATIVEandself.cancellationisOperationCancellation.UNSUPPORTED:raiseValueError("cooperative deadlines require a cancellable executor")ifself.deadlineisOperationDeadline.ENFORCED:ifself.cancellationisnotOperationCancellation.CONTAINED:raiseValueError("enforced deadlines require contained cancellation")ifnotself.owned_resources:raiseValueError("enforced deadlines require a supervisor-owned resource")def_validate_close_policy(self)->None:if(self.close_policyisOperationClosePolicy.REQUEST_CANCELandself.cancellationisOperationCancellation.UNSUPPORTED):raiseValueError("request-cancel close policy requires a cancellable executor")