Source code for minos.api_gateway.common.rest.loader

# Copyright (C) 2020 Clariteia SL
#
# This file is part of minos framework.
#
# Minos framework can not be copied and/or distributed without the express
# permission of Clariteia SL.
import functools

from aiohttp import (
    web,
)

from ..configuration import (
    MinosConfig,
)
from ..importlib import (
    import_module,
)


[docs]class RestRoutesLoader: """ Rest Interface Handler Rest Interface for aiohttp web handling. """ __slots__ = "_endpoints", "_app", "_config"
[docs] def __init__(self, endpoints: dict, config: MinosConfig, app: web.Application = web.Application()): self._endpoints = endpoints self._app = app self._config = config self.load_routes()
[docs] def load_routes(self): """Load routes from config file.""" for item in self._endpoints: callable_f = self.resolve_callable(item.controller, item.action) self._app.router.add_route(item.method, item.route, callable_f)
[docs] def resolve_callable(self, controller: str, action: str): """Load controller class and action method. :param controller: Controller string. Example: "tests.service.CommandTestService.CommandService" :param action: Config instance. Example: "get_order" :return: A class method callable instance. """ object_class = import_module(controller) instance_class = object_class() class_method = getattr(instance_class, action) partial = functools.partial(class_method, config=self._config) return partial
[docs] def get_app(self): """Return rest application instance. :return: A `web.Application` instance. """ return self._app