Source code for minos.plugins.graphql.routers

from __future__ import (
    annotations,
)

from typing import (
    Callable,
)

from minos.networks import (
    EnrouteDecorator,
    HttpEnrouteDecorator,
    HttpRouter,
)

from .builders import (
    GraphQLSchemaBuilder,
)
from .decorators import (
    GraphQlEnrouteDecorator,
)
from .handlers import (
    GraphQlHandler,
)


[docs]class GraphQlHttpRouter(HttpRouter): """GraphQl Http Router class.""" def _filter_routes(self, routes: dict[EnrouteDecorator, Callable]) -> dict[EnrouteDecorator, Callable]: routes = { decorator: callback for decorator, callback in routes.items() if isinstance(decorator, GraphQlEnrouteDecorator) } schema = GraphQLSchemaBuilder.build(routes) handler = GraphQlHandler(schema) service_name = self._config.get_name().lower() return { HttpEnrouteDecorator(f"/{service_name}/graphql", "POST"): handler.execute_operation, HttpEnrouteDecorator(f"/{service_name}/graphql/schema", "GET"): handler.get_schema, }