from abc import abstractmethod from typing import Dict, List from pyjackson import deserialize from pyjackson.errors import DeserializationError, SerializationError from ebonite.config import Config, Core, Param from ebonite.runtime.interface import ExecutionError, Interface, InterfaceLoader from ebonite.runtime.utils import registering_type from ebonite.utils.log import rlogger _ServerBase = registering_type('server') class Server(_ServerBase): """ Base class for Ebonite servers """ additional_sources: List[str] = [] additional_binaries: List[str] = [] additional_envs: Dict[str, str] = {} additional_options: Dict[str, str] = {} @staticmethod def get(class_path) -> 'Server': """ Gets a fresh instance of given server implementation :param class_path: full name of server implementation :return: server object """
def to_dict(self): return serialize(self) @classmethod def from_dict(cls, d: dict): return deserialize(d, cls) @staticmethod def from_interface(interface: Interface): import ebonite return InterfaceDescriptor( [InterfaceMethodDescriptor.from_signature(name, interface.exposed_method_signature(name)) for name in interface.exposed_methods()], ebonite.__version__) _InterfaceLoaderBase = registering_type('loader') class InterfaceLoader(_InterfaceLoaderBase): """ Base class for loaders of :class:`Interface` """ @abstractmethod def load(self) -> Interface: pass # pragma: no cover @staticmethod def get(class_path) -> 'InterfaceLoader': return _InterfaceLoaderBase.get(class_path)()