@@ -334,7 +334,6 @@ async def receive_offer(self) -> V10CredentialExchange:
334334 cred_ex_record .credential_definition_id = cred_def_id
335335
336336 await cred_ex_record .save (self .context , reason = "receive credential offer" )
337-
338337 return cred_ex_record
339338
340339 async def create_request (
@@ -352,75 +351,78 @@ async def create_request(
352351 A tuple (credential exchange record, credential request message)
353352
354353 """
355- if cred_ex_record .state != V10CredentialExchange .STATE_OFFER_RECEIVED :
356- raise CredentialManagerError (
357- f"Credential exchange { cred_ex_record .credential_exchange_id } "
358- f"in { cred_ex_record .state } state "
359- f"(must be { V10CredentialExchange .STATE_OFFER_RECEIVED } )"
360- )
354+ try :
355+ if cred_ex_record .state != V10CredentialExchange .STATE_OFFER_RECEIVED :
356+ raise CredentialManagerError (
357+ f"Credential exchange { cred_ex_record .credential_exchange_id } "
358+ f"in { cred_ex_record .state } state "
359+ f"(must be { V10CredentialExchange .STATE_OFFER_RECEIVED } )"
360+ )
361+
362+ credential_definition_id = cred_ex_record .credential_definition_id
363+ credential_offer = cred_ex_record .credential_offer
361364
362- credential_definition_id = cred_ex_record .credential_definition_id
363- credential_offer = cred_ex_record .credential_offer
365+ async def _create ():
366+ ledger : BaseLedger = await self .context .inject (BaseLedger )
367+ async with ledger :
368+ credential_definition = await ledger .get_credential_definition (
369+ credential_definition_id
370+ )
364371
365- async def _create ():
366- ledger : BaseLedger = await self .context .inject (BaseLedger )
367- async with ledger :
368- credential_definition = await ledger .get_credential_definition (
369- credential_definition_id
372+ holder : BaseHolder = await self .context .inject (BaseHolder )
373+ request_json , metadata_json = await holder .create_credential_request (
374+ credential_offer , credential_definition , holder_did
375+ )
376+ return {
377+ "request" : json .loads (request_json ),
378+ "metadata" : json .loads (metadata_json ),
379+ }
380+
381+ if cred_ex_record .credential_request :
382+ self ._logger .warning (
383+ "create_request called multiple times for v1.0 credential exchange: %s" ,
384+ cred_ex_record .credential_exchange_id ,
385+ )
386+ else :
387+ if "nonce" not in credential_offer :
388+ raise CredentialManagerError ("Missing nonce in credential offer" )
389+ nonce = credential_offer ["nonce" ]
390+ cache_key = (
391+ f"credential_request::{ credential_definition_id } ::{ holder_did } ::{ nonce } "
370392 )
393+ cred_req_result = None
394+ cache : BaseCache = await self .context .inject (BaseCache , required = False )
395+ if cache :
396+ async with cache .acquire (cache_key ) as entry :
397+ if entry .result :
398+ cred_req_result = entry .result
399+ else :
400+ cred_req_result = await _create ()
401+ await entry .set_result (cred_req_result , 3600 )
402+ if not cred_req_result :
403+ cred_req_result = await _create ()
371404
372- holder : BaseHolder = await self .context .inject (BaseHolder )
373- request_json , metadata_json = await holder .create_credential_request (
374- credential_offer , credential_definition , holder_did
375- )
376- return {
377- "request" : json .loads (request_json ),
378- "metadata" : json .loads (metadata_json ),
379- }
405+ (
406+ cred_ex_record .credential_request ,
407+ cred_ex_record .credential_request_metadata ,
408+ ) = (cred_req_result ["request" ], cred_req_result ["metadata" ])
380409
381- if cred_ex_record . credential_request :
382- self . _logger . warning (
383- "create_request called multiple times for v1.0 credential exchange: %s" ,
384- cred_ex_record . credential_exchange_id ,
410+ credential_request_message = CredentialRequest (
411+ requests_attach = [
412+ CredentialRequest . wrap_indy_cred_req ( cred_ex_record . credential_request )
413+ ]
385414 )
386- else :
387- if "nonce" not in credential_offer :
388- raise CredentialManagerError ("Missing nonce in credential offer" )
389- nonce = credential_offer ["nonce" ]
390- cache_key = (
391- f"credential_request::{ credential_definition_id } ::{ holder_did } ::{ nonce } "
415+ credential_request_message ._thread = {"thid" : cred_ex_record .thread_id }
416+ credential_request_message .assign_trace_decorator (
417+ self .context .settings , cred_ex_record .trace
392418 )
393- cred_req_result = None
394- cache : BaseCache = await self .context .inject (BaseCache , required = False )
395- if cache :
396- async with cache .acquire (cache_key ) as entry :
397- if entry .result :
398- cred_req_result = entry .result
399- else :
400- cred_req_result = await _create ()
401- await entry .set_result (cred_req_result , 3600 )
402- if not cred_req_result :
403- cred_req_result = await _create ()
404-
405- (
406- cred_ex_record .credential_request ,
407- cred_ex_record .credential_request_metadata ,
408- ) = (cred_req_result ["request" ], cred_req_result ["metadata" ])
409-
410- credential_request_message = CredentialRequest (
411- requests_attach = [
412- CredentialRequest .wrap_indy_cred_req (cred_ex_record .credential_request )
413- ]
414- )
415- credential_request_message ._thread = {"thid" : cred_ex_record .thread_id }
416- credential_request_message .assign_trace_decorator (
417- self .context .settings , cred_ex_record .trace
418- )
419-
420- cred_ex_record .state = V10CredentialExchange .STATE_REQUEST_SENT
421- await cred_ex_record .save (self .context , reason = "create credential request" )
422419
423- return (cred_ex_record , credential_request_message )
420+ cred_ex_record .state = V10CredentialExchange .STATE_REQUEST_SENT
421+ await cred_ex_record .save (self .context , reason = "create credential request" )
422+ return (cred_ex_record , credential_request_message )
423+ except Exception as ex :
424+ print ('EXCEPTION!' )
425+ print (ex )
424426
425427 async def receive_request (self ):
426428 """
0 commit comments