Module mydata_did.v1_0.routes.mydata_did_operations_routes
Expand source code
import json
import logging
from aiohttp import web
from aiohttp_apispec import (
    docs,
    querystring_schema,
    response_schema,
    match_info_schema,
)
from aries_cloudagent.messaging.models.base import BaseModelError
from aries_cloudagent.storage.error import StorageError
from aries_cloudagent.storage.base import BaseStorage
from aries_cloudagent.storage.indy import IndyStorage
from aries_cloudagent.storage.record import StorageRecord
from ..manager import ADAManager, ADAManagerError
from ..routes.maps.tag_maps import (
    TAGS_MYDATA_DID_OPERATIONS_LABEL
)
from .openapi import (
    SendReadDIDMessageMatchInfoSchema,
    MyDataDIDRemoteRecordsQueryStringSchema,
    MyDataDIDRemoteRecordResponseSchema
)
LOGGER = logging.getLogger(__name__)
PAGINATION_PAGE_SIZE = 10
@docs(
    tags=[TAGS_MYDATA_DID_OPERATIONS_LABEL],
    summary="Send read-did didcomm message to MyData DID registry",
)
@match_info_schema(SendReadDIDMessageMatchInfoSchema())
async def send_read_did_message_to_mydata_did_registry(request: web.BaseRequest):
    """
    Request handler for sending read-did didcomm message to MyData DID registry
    """
    # Context
    context = request.app["request_context"]
    # did:mydata identifier
    did = request.match_info["did"]
    result = {}
    try:
        # Initialize MyData DID manager
        mydata_did_manager = ADAManager(context=context)
        # Send read-did message to MyData DID registry
        transaction_record = await mydata_did_manager.send_read_did_message(did=did)
        if transaction_record:
            temp_record = transaction_record.serialize()
            temp_messages_list = []
            for message in temp_record.get("messages_list", []):
                temp_messages_list.append(json.loads(message))
                temp_record["messages_list"] = temp_messages_list
            result = temp_record
        else:
            raise web.HTTPInternalServerError(reason="Failed to send read-did message")
    except ADAManagerError as err:
        raise web.HTTPBadRequest(reason=err.roll_up) from err
    return web.json_response(result)
@docs(
    tags=[TAGS_MYDATA_DID_OPERATIONS_LABEL],
    summary="Fetch MyData DID remote records.",
)
@querystring_schema(MyDataDIDRemoteRecordsQueryStringSchema())
@response_schema(MyDataDIDRemoteRecordResponseSchema(many=True), 200)
async def mydata_did_remote_records_list(request: web.BaseRequest):
    """
    Request handler for fetching MyData DID remote records
    """
    # Context
    context = request.app["request_context"]
    # Query string parameters
    tag_filter = {}
    if "did" in request.query and request.query["did"] != "":
        tag_filter["did"] = request.query["did"]
    if "sov_verkey" in request.query and request.query["sov_verkey"] != "":
        tag_filter["sov_verkey"] = request.query["sov_verkey"]
    if "status" in request.query and request.query["status"] != "":
        tag_filter["status"] = request.query["status"]
    results = []
    try:
        # Storage
        storage: IndyStorage = await context.inject(BaseStorage)
        # Search remote records
        remote_records: StorageRecord = await storage.search_records(
            type_filter=ADAManager.RECORD_TYPE_MYDATA_DID_REMOTE, tag_query=tag_filter
        ).fetch_all()
        for remote_record in remote_records:
            results.append(
                {
                    "did": remote_record.tags.get("did"),
                    "sov_verkey": remote_record.tags.get("sov_verkey"),
                    "status": remote_record.tags.get("status"),
                    "diddoc": json.loads(remote_record.value),
                }
            )
    except (StorageError, BaseModelError) as err:
        raise web.HTTPBadRequest(reason=err.roll_up) from err
    return web.json_response(results)
Functions
async def mydata_did_remote_records_list(request: aiohttp.web_request.BaseRequest)- 
Request handler for fetching MyData DID remote records
Expand source code
@docs( tags=[TAGS_MYDATA_DID_OPERATIONS_LABEL], summary="Fetch MyData DID remote records.", ) @querystring_schema(MyDataDIDRemoteRecordsQueryStringSchema()) @response_schema(MyDataDIDRemoteRecordResponseSchema(many=True), 200) async def mydata_did_remote_records_list(request: web.BaseRequest): """ Request handler for fetching MyData DID remote records """ # Context context = request.app["request_context"] # Query string parameters tag_filter = {} if "did" in request.query and request.query["did"] != "": tag_filter["did"] = request.query["did"] if "sov_verkey" in request.query and request.query["sov_verkey"] != "": tag_filter["sov_verkey"] = request.query["sov_verkey"] if "status" in request.query and request.query["status"] != "": tag_filter["status"] = request.query["status"] results = [] try: # Storage storage: IndyStorage = await context.inject(BaseStorage) # Search remote records remote_records: StorageRecord = await storage.search_records( type_filter=ADAManager.RECORD_TYPE_MYDATA_DID_REMOTE, tag_query=tag_filter ).fetch_all() for remote_record in remote_records: results.append( { "did": remote_record.tags.get("did"), "sov_verkey": remote_record.tags.get("sov_verkey"), "status": remote_record.tags.get("status"), "diddoc": json.loads(remote_record.value), } ) except (StorageError, BaseModelError) as err: raise web.HTTPBadRequest(reason=err.roll_up) from err return web.json_response(results) async def send_read_did_message_to_mydata_did_registry(request: aiohttp.web_request.BaseRequest)- 
Request handler for sending read-did didcomm message to MyData DID registry
Expand source code
@docs( tags=[TAGS_MYDATA_DID_OPERATIONS_LABEL], summary="Send read-did didcomm message to MyData DID registry", ) @match_info_schema(SendReadDIDMessageMatchInfoSchema()) async def send_read_did_message_to_mydata_did_registry(request: web.BaseRequest): """ Request handler for sending read-did didcomm message to MyData DID registry """ # Context context = request.app["request_context"] # did:mydata identifier did = request.match_info["did"] result = {} try: # Initialize MyData DID manager mydata_did_manager = ADAManager(context=context) # Send read-did message to MyData DID registry transaction_record = await mydata_did_manager.send_read_did_message(did=did) if transaction_record: temp_record = transaction_record.serialize() temp_messages_list = [] for message in temp_record.get("messages_list", []): temp_messages_list.append(json.loads(message)) temp_record["messages_list"] = temp_messages_list result = temp_record else: raise web.HTTPInternalServerError(reason="Failed to send read-did message") except ADAManagerError as err: raise web.HTTPBadRequest(reason=err.roll_up) from err return web.json_response(result)