Example #1
0
        def callback_wrapper():

            # 必须要确定,这次调用就是这个timer引起的
            if self.timer == timer:
                self.timer = None
                result = safe_call(callback)
                if repeat and not self.timer:
                    # 之所以还要判断timer,是因为callback中可能设置了新的回调
                    self.set(interval, callback, repeat, True)
                return result
Example #2
0
        def callback_wrapper():

            # 必须要确定,这次调用就是这个timer引起的
            if self.timer == timer:
                self.timer = None
                result = safe_call(callback)
                if repeat and not self.timer:
                    # 之所以还要判断timer,是因为callback中可能设置了新的回调
                    self.set(interval, callback, repeat, True)
                return result
Example #3
0
def main():
    modules = []
    log = get_logger("Main", [stdout])
    msg = "Module '%s' %s() returned code: %s"

    try:
        # Load modules
        for filename in listdir(get_base_dir() + sep + MODULES):
            if "__" in filename:
                continue
            name = filename.split(".py")[0]

            try:
                # Import file in dir
                mod = importlib.import_module(MODULES + "." + name)
                class_name = default_class(name)
                cls = getattr(mod, class_name, None)
                if cls is None:
                    log.error("Module '%s' doesn't have class: %s" % (filename, class_name))
                module = cls(modules)
                # Store to loaded or unload it
                if module.enable:
                    modules.append(module)
                    log.info("Module '%s' loaded from %s" % (module.name, filename))
                else:
                    code = module.unload()
                    log.info(
                        "Module '%s' was loaded from %s but is disabled, returned code: %s"
                        % (module.name, filename, code)
                    )
            except ImportError as ie:
                log.error("Module '%s' failed to import: %s" % (filename, ie))
                raise ie

        # Check if any loaded
        total = len(modules)
        if total == 0:
            raise Exception("No module loaded!")
        log.info("Loaded %s modules" % total)

        # Run each module
        while True:
            for module in frozenset(modules):
                # Run if its time
                if module.is_interval():
                    code = module.run()
                    if code < 0:
                        raise Exception(msg % (module.name, "run", code))
                    log.debug(msg % (module.name, "run", code))
                    module.last_time = time()

                # Remove if no interval
                if module.interval == 0:
                    code = safe_call(module.unload, log, None, None, False)
                    log.debug(msg % (module.name, "unload", code))

                sleep(0.5)
    finally:
        # Attempt to unload modules
        for module in frozenset(modules):
            code = safe_call(module.unload, log, None, None, False)
            log.info(msg % (module.name, "unload", code))
Example #4
0
                        raise Exception(msg % (module.name, "run", code))
                    log.debug(msg % (module.name, "run", code))
                    module.last_time = time()

                # Remove if no interval
                if module.interval == 0:
                    code = safe_call(module.unload, log, None, None, False)
                    log.debug(msg % (module.name, "unload", code))

                sleep(0.5)
    finally:
        # Attempt to unload modules
        for module in frozenset(modules):
            code = safe_call(module.unload, log, None, None, False)
            log.info(msg % (module.name, "unload", code))


if __name__ == "__main__":
    try:
        # open(get_base_dir() + sep + LOG_FILENAME, "w").close() # Clear log
        error_log = get_logger("Init", [stderr])
        error_flag = Event()
        safe_call(main, error_log, error_flag, None, False)
        if error_flag.is_set() and not flag_verbose_mode():
            show_message(error_log, logging.ERROR, "Error at main")
    except Exception as e:
        if not flag_verbose_mode():
            show_message(None, logging.ERROR, "Error at main: %s" % e)
        raise e
    exit()