Source code for cadrumo.adapters.persistence.profile._review_package_keypair
"""Secure-object singleton keypair persistence shared by profile adapters.The mint-or-load-winner transaction belongs to the persistence adapter: itknows secure-object namespaces, create-only revisions, and the storage rowrepresentation. Application modules receive typed capabilities instead ofdepending on any of those adapter details."""from__future__importannotationsfromcollections.abcimportCallablefrompydanticimportBaseModelfrom....core.external_constantsimportUTF_8_ENCODINGfrom....core.secure_object_writeimportABSENT_SECURE_OBJECT_REVISION_IDfrom....core.time.utcimportUtcInstantfrom..storage.errorsimportSecureObjectRevisionConflictErrorfrom..storage.secure_object_namespacesimportSecureObjectNamespaceDefinitionfrom..storage.sql.secure_objectsimportSecureObjectRepository
[docs]defensure_singleton_keypair[KeypairT:BaseModel](*,repository:SecureObjectRepository,namespace:SecureObjectNamespaceDefinition,object_key:str,model_type:type[KeypairT],generate:Callable[[],KeypairT],bucket_id_of:Callable[[KeypairT],str],created_at_of:Callable[[KeypairT],UtcInstant],expected_bucket_id:str,mismatch_error:Callable[[],Exception],write_provenance:str,)->KeypairT:"""Return a bucket singleton, minting once and returning a race winner. Core types: :class:`~cadrumo.adapters.persistence.storage.sql.secure_objects.SecureObjectRepository`. """def_validated(payload:bytes)->KeypairT:keypair=model_type.model_validate_json(payload)ifbucket_id_of(keypair)!=expected_bucket_id:raisemismatch_error()returnkeypairexisting=repository.load(namespace.namespace,object_key,expected_class=namespace.sensitivity,max_supported_version=namespace.schema_version,)ifexistingisnotNone:return_validated(existing.payload)keypair=generate()try:repository.save(namespace=namespace.namespace,object_key=object_key,classification=namespace.sensitivity,schema_version=namespace.schema_version,written_at=created_at_of(keypair),payload=keypair.model_dump_json().encode(UTF_8_ENCODING),write_provenance=write_provenance,expected_revision_id=ABSENT_SECURE_OBJECT_REVISION_ID,)exceptSecureObjectRevisionConflictError:winner=repository.load(namespace.namespace,object_key,expected_class=namespace.sensitivity,max_supported_version=namespace.schema_version,)ifwinnerisNone:raisereturn_validated(winner.payload)returnkeypair