示例#1
0
文件: base.py 项目: rubaha96/ebonite
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
        """
示例#2
0
    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)()