Source code for cadrumo.application.operations.persistence.idempotency
"""Durable idempotency binding for one exact operation request."""from__future__importannotationsfrompydanticimportBaseModelfrom....core.hashingimportcontent_hash_hexfrom....core.identity.digestimportContentDigestfrom....core.modelsimportSTRICT_FROZEN_CONFIGfrom..modelsimportOperationDefinitionId,OperationId,OperationIdentity,OperationReference
[docs]classOperationIdempotencyClaim(BaseModel):"""Durable binding from one caller key to one exact operation request."""model_config=STRICT_FROZEN_CONFIGdefinition_id:OperationDefinitionIdsubject_ref:OperationReferencekey_digest:ContentDigestoperation_id:OperationIdrequest_reference:ContentDigest
[docs]@classmethoddefbind(cls,*,identity:OperationIdentity,idempotency_key:str,request_reference:ContentDigest,)->OperationIdempotencyClaim:"""Bind a caller key without retaining it in credential-free state."""returncls(definition_id=identity.definition_id,subject_ref=identity.subject_ref,key_digest=content_hash_hex({"schema_version":1,"definition_id":identity.definition_id,"subject_ref":identity.subject_ref,"idempotency_key":idempotency_key,}),operation_id=identity.operation_id,request_reference=request_reference,)