Source code for aries_cloudagent.protocols.present_proof.v2_0.formats.handler

"""present-proof-v2 format handler - supports DIF and INDY."""
from abc import ABC, abstractclassmethod, abstractmethod
import logging

from typing import Tuple

from .....core.error import BaseError
from .....core.profile import Profile
from .....messaging.decorators.attach_decorator import AttachDecorator

from ..messages.pres import V20Pres
from ..messages.pres_format import V20PresFormat
from ..models.pres_exchange import V20PresExRecord

LOGGER = logging.getLogger(__name__)

PresFormatAttachment = Tuple[V20PresFormat, AttachDecorator]


[docs]class V20PresFormatHandlerError(BaseError): """Presentation exchange format error under present-proof protocol v2.0."""
[docs]class V20PresFormatHandler(ABC): """Base Presentation Exchange Handler.""" format: V20PresFormat.Format = None def __init__(self, profile: Profile): """Initialize PresExchange Handler.""" super().__init__() self._profile = profile @property def profile(self) -> Profile: """ Accessor for the current profile instance. Returns: The profile instance for this presentation exchange format """ return self._profile
[docs] @abstractmethod def get_format_identifier(self, message_type: str) -> str: """Get attachment format identifier for format and message combination. Args: message_type (str): Message type for which to return the format identifier Returns: str: Issue credential attachment format identifier """
[docs] @abstractmethod def get_format_data(self, message_type: str, data: dict) -> PresFormatAttachment: """Get presentation format and attach objects for use in pres_ex messages."""
[docs] @abstractclassmethod def validate_fields(cls, message_type: str, attachment_data: dict) -> None: """Validate attachment data for specific message type and format."""
[docs] @abstractmethod async def create_bound_request( self, pres_ex_record: V20PresExRecord, request_data: dict = None, ) -> PresFormatAttachment: """Create a presentation request bound to a proposal."""
[docs] @abstractmethod async def create_pres( self, pres_ex_record: V20PresExRecord, request_data: dict = None, ) -> PresFormatAttachment: """Create a presentation."""
[docs] @abstractmethod async def receive_pres(self, message: V20Pres, pres_ex_record: V20PresExRecord): """Receive a presentation, from message in context on manager creation."""
[docs] @abstractmethod async def verify_pres(self, pres_ex_record: V20PresExRecord) -> V20PresExRecord: """Verify a presentation."""