Source code for pjrpc.server.specs

import abc
import enum
import json
from typing import Any, Dict, Iterable, Mapping, Optional

from pjrpc.server import Method


[docs]class JSONEncoder(json.JSONEncoder): """ Schema JSON encoder. """
[docs] def default(self, o: Any) -> Any: if isinstance(o, enum.Enum): return o.value return super().default(o)
[docs]class BaseUI(abc.ABC): """ Base UI. """
[docs] @abc.abstractmethod def get_static_folder(self) -> str: """ Returns ui statics folder. """
[docs] @abc.abstractmethod def get_index_page(self, spec_url: str) -> str: """ Returns ui index webpage. :param spec_url: specification url. """
[docs]class Specification(abc.ABC): """ JSON-RPC specification. :param path: specification url path suffix :param ui: specification ui instance :param ui_path: specification ui url path suffix """ def __init__(self, path: str = '/spec.json', ui: Optional[BaseUI] = None, ui_path: Optional[str] = None): self._path = path self._ui = ui self._ui_path = ui_path @property def path(self) -> str: """ Returns specification url path. """ return self._path @property def ui(self) -> Optional[BaseUI]: """ Returns ui instance. """ return self._ui @property def ui_path(self) -> Optional[str]: """ Returns specification ui url path. """ return self._ui_path
[docs] @abc.abstractmethod def schema( self, path: str, methods: Iterable[Method] = (), methods_map: Mapping[str, Iterable[Method]] = {}, ) -> Dict[str, Any]: """ Returns specification schema. :param path: methods endpoint path :param methods: methods list the specification is generated for :param methods_map: methods map the specification is generated for. Each item is a mapping from a prefix to methods on which the methods will be served """