Source code for aries_cloudagent.protocols.actionmenu.routes
"""Action menu admin routes."""
import logging
from aiohttp import web
from aiohttp_apispec import docs, request_schema
from marshmallow import fields, Schema
from ...connections.models.connection_record import ConnectionRecord
from ...messaging.valid import UUIDFour
from ...storage.error import StorageNotFoundError
from .messages.menu import Menu
from .messages.menu_request import MenuRequest
from .messages.perform import Perform
from .models.menu_option import MenuOptionSchema
from .util import retrieve_connection_menu, save_connection_menu
LOGGER = logging.getLogger(__name__)
[docs]class PerformRequestSchema(Schema):
"""Request schema for performing a menu action."""
name = fields.Str(description="Menu option name", example="Query")
params = fields.Dict(
description=("Input parameter values"),
required=False,
keys=fields.Str(example="parameter"), # marshmallow/apispec v3.0 ignores
values=fields.Str(example=UUIDFour.EXAMPLE),
)
[docs]class MenuJsonSchema(Schema):
"""Matches MenuSchema but without the inherited AgentMessage properties."""
title = fields.Str(required=False, description="Menu title", example="My Menu",)
description = fields.Str(
required=False,
description="Introductory text for the menu",
example="User preferences for window settings",
)
errormsg = fields.Str(
required=False,
description="Optional error message to display in menu header",
example="Error: item not present",
)
options = fields.List(
fields.Nested(MenuOptionSchema),
required=True,
description="List of menu options",
)
[docs]class SendMenuSchema(Schema):
"""Request schema for sending a menu to a connection."""
menu = fields.Nested(
MenuJsonSchema(), required=True, description="Menu to send to connection",
)
[docs]async def register(app: web.Application):
"""Register routes."""
app.add_routes(
[
web.post("/action-menu/{id}/close", actionmenu_close),
web.post("/action-menu/{id}/fetch", actionmenu_fetch),
web.post("/action-menu/{id}/perform", actionmenu_perform),
web.post("/action-menu/{id}/request", actionmenu_request),
web.post("/connections/{id}/send-menu", actionmenu_send),
]
)