示例#1
0
文件: __init__.py 项目: TurpIF/KHome
def get_socket(module_name, nb_try=5):
    """
    Return a socket connected to the module named *module_name*.
    The socket is transformed by the makefile function and has to be use as a
    file object.
    """
    for i in xrange(nb_try):
        try:
            sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
            sock.connect(path.socket_file(module_name))
        except socket.error as e:
            logger.exception(e)
            logger.error('Cannot connect to `%s` module. (%d / %d)',
                    module_name, i + 1, nb_try)
            time.sleep(0.5)
        else:
            return sock.makefile('rw')
    logger.error('Cannot connect to `%s` module.', module_name)
    return kill()
示例#2
0
文件: __init__.py 项目: TurpIF/KHome
    def __call__(self, *args, **kwargs):
        obj = super(BaseMeta, self).__call__(*args, **kwargs)
        cls = type(obj)

        # Handle module name
        if not hasattr(obj, 'module_name'):
            if not hasattr(cls, 'module_name'):
                setattr(obj, 'module_name', cls.__name__)
            else:
                setattr(obj, 'module_name', cls.module_name)

        if obj.module_name in type(self).ls_name:
            raise NameError('Module with same name already exist')
        type(self).ls_name.add(obj.module_name)

        # Handle module socket (server side)
        setattr(obj, 'module_socket', path.socket_file(obj.module_name))
        try:
          os.remove(obj.module_socket)
        except OSError:
            pass
        endpoint = ServerEndpoint(reactor, obj.module_socket)
        endpoint.listen(connection.Factory(obj))

        # Handle module fields
        from khome.fields import Base as Field
        ls_fields = []
        for f_cls in cls.__dict__.keys():
            f_cls = getattr(cls, f_cls)
            if isinstance(f_cls, type) and issubclass(f_cls, Field):
                field = f_cls()
                setattr(obj, field.field_name, prop_field(field))
                setattr(field, 'module', obj)
                ls_fields += [field]
        setattr(obj, 'module_fields', ls_fields)

        # Logger
        setattr(obj, 'logger', logging.getLogger(obj.module_name))
        #setup_logger(obj.logger)

        _lauched_modules.append(obj)
        return obj
示例#3
0
def connect(module_name, nb_try=5):
    """
    Return a socket connected to the module named *module_name*.
    Try this *nb_try* times. If it's unsuccessful, raise a
    RuntimeError.
    The socket is transformed by the makefile function and has to
    be use as a file object.
    """
    for i in xrange(nb_try):
        try:
            sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
            sock.connect(path.socket_file(module_name))
        except socket.error as e:
            logging.exception(e)
            logging.error('Cannot connect to `%s` module. (%d / %d)',
                          module_name, i + 1, nb_try)
            time.sleep(0.5)
        else:
            return sock.makefile('rw')
    raise RuntimeError('Cannot connect to `%s` module.' % module_name)
示例#4
0
文件: remote.py 项目: jmcomets/KHome
def connect(module_name, nb_try=5):
    """
    Return a socket connected to the module named *module_name*.
    Try this *nb_try* times. If it's unsuccessful, raise a
    RuntimeError.
    The socket is transformed by the makefile function and has to
    be use as a file object.
    """
    for i in xrange(nb_try):
        try:
            sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
            sock.connect(path.socket_file(module_name))
        except socket.error as e:
            logging.exception(e)
            logging.error('Cannot connect to `%s` module. (%d / %d)',
                    module_name, i + 1, nb_try)
            time.sleep(0.5)
        else:
            return sock.makefile('rw')
    raise RuntimeError('Cannot connect to `%s` module.' % module_name)
示例#5
0
文件: __init__.py 项目: TurpIF/KHome
def is_ready(module_name):
    """
    Return if the module *module_name* is ready.
    This is detected by watching the socket file of the module.
    """
    return os.path.exists(path.socket_file(module_name))
示例#6
0
 def __init__(self):
     name = type(self).__name__
     fields = type(self).__fields__
     for f in fields:
         f.module = self
     Abstract.__init__(self, name, path.socket_file(name), fields)