Source code for aries_cloudagent.protocols.endorse_transaction.v1_0.handlers.transaction_request_handler

"""Transaction request handler."""

from .....messaging.base_handler import (
    BaseHandler,
    BaseResponder,
    HandlerException,
    RequestContext,
)

from .....storage.error import StorageError

from ..manager import TransactionManager, TransactionManagerError
from ..messages.transaction_request import TransactionRequest
from ..models.transaction_record import TransactionRecord


[docs]class TransactionRequestHandler(BaseHandler): """Handler class for transaction request."""
[docs] async def handle(self, context: RequestContext, responder: BaseResponder): """ Handle transaction request. Args: context: Request context responder: Responder callback """ self._logger.debug(f"TransactionRequestHandler called with context {context}") assert isinstance(context.message, TransactionRequest) if not context.connection_ready: raise HandlerException("No connection established") mgr = TransactionManager(context.profile) try: transaction = await mgr.receive_request( context.message, context.connection_record.connection_id ) except TransactionManagerError as err: self._logger.exception(err) return # Automatically endorse transaction if flag is set if context.settings.get("endorser.auto_endorse"): try: ( transaction, endorsed_transaction_response, ) = await mgr.create_endorse_response( transaction=transaction, state=TransactionRecord.STATE_TRANSACTION_ENDORSED, ) await responder.send_reply( endorsed_transaction_response, connection_id=transaction.connection_id, ) except (StorageError, TransactionManagerError) as err: self._logger.exception(err)