def main():
    root_logger = logging.getLogger()
    root_logger.setLevel(logging.WARNING)

    # The eventual destination is stdout with the above formatting
    errHandler = logging.StreamHandler(sys.stderr)
    formatter = log_handlers.ColorFormatter("%(levelname)s: %(message)s",
                                            errHandler.stream.isatty())
    errHandler.setFormatter(formatter)

    # Setup a buffer to store messages
    msgBuffer = log_handlers.InfBufferHandler(8192, target=errHandler)
    root_logger.addHandler(msgBuffer)

    # Also count each type of message
    counter = log_handlers.ErrorCounterHandler()
    root_logger.addHandler(counter)

    args = parse_args()

    if args.debug:
        root_logger.setLevel(logging.DEBUG)  # Update root logger

    general.read_config(args.database, args.config, args.ignore_missing)

    menustack.append(general.get_root_menu())

    should_save = curses.wrapper(gui_main)

    if should_save:
        general.enforce_dependent_values()
        for plugin in args.plugin:
            path, name = os.path.split(plugin)
            if path.startswith("/"):
                sys.path.insert(0, path)
            else:
                sys.path.insert(0, os.path.join(os.getcwd(), path))
            sys.path.append(os.path.dirname(sys.argv[0]))
            try:
                mod = importlib.import_module(name)
                mod.plugin_exec()
            except ImportError as err:
                logger.error("Could not import %s plugin: %s" % (name, err))
            except Exception as err:
                logger.warning("Problem encountered in %s plugin: %s" %
                               (name, repr(err)))
                import traceback
                traceback.print_tb(sys.exc_info()[2])

        general.write_config(args.config)
        if args.json is not None:
            config_json.write_config(args.json)

    # Flush all log messages on exit
    msgBuffer.close()

    error_count = counter.errors() + counter.criticals()

    if should_save:
        error_path = args.config + ".error"
        if error_count == 0:
            try:
                os.remove(error_path)
            except OSError:
                pass
        else:
            with open(error_path, 'w'):
                pass
            if args.json is not None:
                try:
                    os.remove(args.json)
                except OSError:
                    pass

    return error_count
Пример #2
0
def main():
    root_logger = logging.getLogger()
    root_logger.setLevel(logging.WARNING)

    # The eventual destination is stdout with the above formatting
    errHandler = logging.StreamHandler(sys.stderr)
    formatter = log_handlers.ColorFormatter("%(levelname)s: %(message)s",
                                            errHandler.stream.isatty())
    errHandler.setFormatter(formatter)

    # Setup a buffer to store messages
    msgBuffer = log_handlers.InfBufferHandler(8192, target=errHandler)
    root_logger.addHandler(msgBuffer)

    # Also count each type of message
    counter = log_handlers.ErrorCounterHandler()
    root_logger.addHandler(counter)

    args = parse_args()

    if args.debug:
        root_logger.setLevel(logging.DEBUG)  # Update root logger

    general.read_config(args.database, args.config, args.ignore_missing)

    menustack.append(general.get_root_menu())

    should_save = curses.wrapper(gui_main)

    if should_save:
        # Prior to calling plugins, ensure that values are consistent as
        # possible. After this call, there may still be inconsistencies
        # from selects enabling options with disabled dependencies. The
        # user generally does not need to know about bool inconsistencies,
        # but log them to INFO so they can see if we're seeing them.
        general.enforce_dependent_values("Inconsistency prior to plugins: ",
                                         error_level=logging.INFO)
        for plugin in args.plugin:
            path, name = os.path.split(plugin)
            if path.startswith("/"):
                sys.path.insert(0, path)
            else:
                sys.path.insert(0, os.path.join(os.getcwd(), path))
            sys.path.append(os.path.dirname(sys.argv[0]))
            try:
                mod = importlib.import_module(name)
                mod.plugin_exec()
            except ImportError as err:
                logger.error("Could not import %s plugin: %s" % (name, err))
            except Exception as err:
                logger.error("Problem encountered in %s plugin: %s" %
                             (name, repr(err)))
                import traceback
                traceback.print_tb(sys.exc_info()[2])

        # If any bool values are still inconsistent, force the user to fix
        general.enforce_dependent_values("Inconsistent values: ",
                                         error_level=logging.ERROR)
        general.write_config(args.config)
        if args.json is not None:
            config_json.write_config(args.json)
        if args.depfile is not None:
            general.write_depfile(args.depfile, args.config)

    # Flush all log messages on exit
    msgBuffer.close()

    error_count = counter.errors() + counter.criticals()

    if should_save:
        error_path = args.config + ".error"
        if error_count == 0:
            try:
                os.remove(error_path)
            except OSError:
                pass
        else:
            with open(error_path, 'w'):
                pass
            if args.json is not None:
                try:
                    os.remove(args.json)
                except OSError:
                    pass

    return error_count
Пример #3
0
def main():
    args = parse_args()

    if args.new:
        init_config(args.database, args.ignore_missing)
    else:
        read_config(args.database, args.config, args.ignore_missing)

    files = []
    setters = []

    for arg in args.args:
        key, value = parse_config_arg(arg)
        if key:
            set_config_if_prompt(key, value, True)
        else:
            logger.info("Reading %s" % arg)
            read_profile_file(arg)

    enforce_dependent_values()
    check_values_as_requested(args.args)

    for plugin in args.plugin:
        path, name = os.path.split(plugin)
        if path.startswith('/'):
            sys.path.insert(0, path)
        else:
            sys.path.insert(0, os.path.join(os.getcwd(), path))
        sys.path.append(os.path.dirname(sys.argv[0]))
        try:
            mod = importlib.import_module(name)
            mod.plugin_exec()
        except ImportError as err:
            logger.error("Could not import %s plugin: %s" % (name, err))
        except Exception as err:
            logger.error("Problem encountered in %s plugin: %s" % (name, repr(err)))
            import traceback
            traceback.print_tb(sys.exc_info()[2])

    write_config(args.config)
    if args.json is not None:
        config_json.write_config(args.json)

    error_count = counter.errors() + counter.criticals()

    error_path = args.config + ".error"
    if error_count == 0:
        try:
            os.remove(error_path)
        except OSError:
            pass
    else:
        with open(error_path, 'w'):
            pass
        if args.json is not None:
            try:
                os.remove(args.json)
            except OSError:
                pass

    return error_count
Пример #4
0
def main():
    args = parse_args()

    if args.new:
        init_config(args.database, args.ignore_missing)
    else:
        read_config(args.database, args.config, args.ignore_missing)

    files = []
    setters = []

    for arg in args.args:
        key, value = parse_config_arg(arg)
        if key:
            set_config_if_prompt(key, value, True)
        else:
            logger.info("Reading %s" % arg)
            read_profile_file(arg)

    # Prior to calling plugins, ensure that values are consistent as
    # possible. After this call, there may still be inconsistencies
    # from selects enabling options with disabled dependencies. The
    # user generally does not need to know about bool inconsistencies,
    # but log them to INFO so they can see if we're seeing them.
    enforce_dependent_values("Inconsistency prior to plugins: ",
                             error_level=logging.INFO)

    for plugin in args.plugin:
        path, name = os.path.split(plugin)
        if path.startswith('/'):
            sys.path.insert(0, path)
        else:
            sys.path.insert(0, os.path.join(os.getcwd(), path))
        sys.path.append(os.path.dirname(sys.argv[0]))
        try:
            mod = importlib.import_module(name)
            mod.plugin_exec()
        except ImportError as err:
            logger.error("Could not import %s plugin: %s" % (name, err))
        except Exception as err:
            logger.error("Problem encountered in %s plugin: %s" %
                         (name, repr(err)))
            import traceback
            traceback.print_tb(sys.exc_info()[2])

    # If any bool values are still inconsistent, force the user to fix
    enforce_dependent_values("Inconsistent values: ",
                             error_level=logging.ERROR)
    check_values_as_requested(args.args)

    write_config(args.config)
    if args.json is not None:
        config_json.write_config(args.json)
    if args.depfile is not None:
        write_depfile(args.depfile, args.config)

    error_count = counter.errors() + counter.criticals()

    error_path = args.config + ".error"
    if error_count == 0:
        try:
            os.remove(error_path)
        except OSError:
            pass
    else:
        with open(error_path, 'w'):
            pass
        if args.json is not None:
            try:
                os.remove(args.json)
            except OSError:
                pass

    return error_count