Esempio n. 1
0
def _init_application(config_path):
    global _application, _application_config_path
    with _application_lock:
        if _application is not None:
            return
        _application_config_path = config_path
        configuration = config.load([config_path] if config_path else [],
                                    ignore_missing_paths=False)
        filename = os.path.expanduser(configuration.get("logging", "config"))
        debug = configuration.getboolean("logging", "debug")
        logger = log.start("radicale", filename, debug)
        _application = Application(configuration, logger)
Esempio n. 2
0
def application(environ, start_response):
    global _application
    if _application is None:
        with _application_lock:
            if _application is None:
                config_paths = []
                if os.environ.get("RADICALE_CONFIG"):
                    config_paths.append(os.environ["RADICALE_CONFIG"])
                configuration = config.load(config_paths,
                                            ignore_missing_paths=False)
                filename = os.path.expanduser(
                    configuration.get("logging", "config"))
                debug = configuration.getboolean("logging", "debug")
                logger = log.start("radicale", filename, debug)
                _application = Application(configuration, logger)
    return _application(environ, start_response)
Esempio n. 3
0
def application(environ, start_response):
    global _application
    if _application is None:
        with _application_lock:
            if _application is None:
                config_paths = []
                if os.environ.get("RADICALE_CONFIG"):
                    config_paths.append(os.environ["RADICALE_CONFIG"])
                configuration = config.load(config_paths,
                                            ignore_missing_paths=False)
                filename = os.path.expanduser(configuration.get("logging",
                                                                "config"))
                debug = configuration.getboolean("logging", "debug")
                logger = log.start("radicale", filename, debug)
                _application = Application(configuration, logger)
    return _application(environ, start_response)
Esempio n. 4
0
def run():
    """Run Radicale as a standalone server."""
    # Get command-line arguments
    parser = argparse.ArgumentParser(usage="radicale [OPTIONS]")

    parser.add_argument("--version", action="version", version=VERSION)
    parser.add_argument("--verify-storage",
                        action="store_true",
                        help="check the storage for errors and exit")
    parser.add_argument("-C",
                        "--config",
                        help="use a specific configuration file")

    groups = {}
    for section, values in config.INITIAL_CONFIG.items():
        group = parser.add_argument_group(section)
        groups[group] = []
        for option, data in values.items():
            kwargs = data.copy()
            long_name = "--{0}-{1}".format(section, option.replace("_", "-"))
            args = kwargs.pop("aliases", [])
            args.append(long_name)
            kwargs["dest"] = "{0}_{1}".format(section, option)
            groups[group].append(kwargs["dest"])
            del kwargs["value"]
            if "internal" in kwargs:
                del kwargs["internal"]

            if kwargs["type"] == bool:
                del kwargs["type"]
                kwargs["action"] = "store_const"
                kwargs["const"] = "True"
                opposite_args = kwargs.pop("opposite", [])
                opposite_args.append("--no{0}".format(long_name[1:]))
                group.add_argument(*args, **kwargs)

                kwargs["const"] = "False"
                kwargs["help"] = "do not {0} (opposite of {1})".format(
                    kwargs["help"], long_name)
                group.add_argument(*opposite_args, **kwargs)
            else:
                group.add_argument(*args, **kwargs)

    args = parser.parse_args()
    if args.config is not None:
        config_paths = [args.config] if args.config else []
        ignore_missing_paths = False
    else:
        config_paths = [
            "/etc/radicale/config",
            os.path.expanduser("~/.config/radicale/config")
        ]
        if "RADICALE_CONFIG" in os.environ:
            config_paths.append(os.environ["RADICALE_CONFIG"])
        ignore_missing_paths = True
    try:
        configuration = config.load(config_paths,
                                    ignore_missing_paths=ignore_missing_paths)
    except Exception as e:
        print("ERROR: Invalid configuration: %s" % e, file=sys.stderr)
        if args.logging_debug:
            raise
        exit(1)

    # Update Radicale configuration according to arguments
    for group, actions in groups.items():
        section = group.title
        for action in actions:
            value = getattr(args, action)
            if value is not None:
                configuration.set(section, action.split("_", 1)[1], value)

    if args.verify_storage:
        # Write to stderr when storage verification is requested
        configuration["logging"]["config"] = ""

    # Start logging
    filename = os.path.expanduser(configuration.get("logging", "config"))
    debug = configuration.getboolean("logging", "debug")
    try:
        logger = log.start("radicale", filename, debug)
    except Exception as e:
        print("ERROR: Failed to start logger: %s" % e, file=sys.stderr)
        if debug:
            raise
        exit(1)

    if args.verify_storage:
        logger.info("Verifying storage")
        try:
            Collection = storage.load(configuration, logger)
            if not Collection.verify():
                logger.error("Storage verifcation failed")
                exit(1)
        except Exception as e:
            logger.error(
                "An exception occurred during storage verification: "
                "%s",
                e,
                exc_info=True)
            exit(1)
        return

    try:
        serve(configuration, logger)
    except Exception as e:
        logger.error("An exception occurred during server startup: %s",
                     e,
                     exc_info=True)
        exit(1)
Esempio n. 5
0
def run():
    """Run Radicale as a standalone server."""
    # Get command-line arguments
    parser = argparse.ArgumentParser(usage="radicale [OPTIONS]")

    parser.add_argument("--version", action="version", version=VERSION)
    parser.add_argument("--verify-storage", action="store_true",
                        help="check the storage for errors and exit")
    parser.add_argument(
        "-C", "--config", help="use a specific configuration file")

    groups = {}
    for section, values in config.INITIAL_CONFIG.items():
        group = parser.add_argument_group(section)
        groups[group] = []
        for option, data in values.items():
            kwargs = data.copy()
            long_name = "--{0}-{1}".format(
                section, option.replace("_", "-"))
            args = kwargs.pop("aliases", [])
            args.append(long_name)
            kwargs["dest"] = "{0}_{1}".format(section, option)
            groups[group].append(kwargs["dest"])
            del kwargs["value"]
            if "internal" in kwargs:
                del kwargs["internal"]

            if kwargs["type"] == bool:
                del kwargs["type"]
                kwargs["action"] = "store_const"
                kwargs["const"] = "True"
                opposite_args = kwargs.pop("opposite", [])
                opposite_args.append("--no{0}".format(long_name[1:]))
                group.add_argument(*args, **kwargs)

                kwargs["const"] = "False"
                kwargs["help"] = "do not {0} (opposite of {1})".format(
                    kwargs["help"], long_name)
                group.add_argument(*opposite_args, **kwargs)
            else:
                group.add_argument(*args, **kwargs)

    args = parser.parse_args()
    if args.config is not None:
        config_paths = [args.config] if args.config else []
        ignore_missing_paths = False
    else:
        config_paths = ["/etc/radicale/config",
                        os.path.expanduser("~/.config/radicale/config")]
        if "RADICALE_CONFIG" in os.environ:
            config_paths.append(os.environ["RADICALE_CONFIG"])
        ignore_missing_paths = True
    try:
        configuration = config.load(config_paths,
                                    ignore_missing_paths=ignore_missing_paths)
    except Exception as e:
        print("ERROR: Invalid configuration: %s" % e, file=sys.stderr)
        if args.logging_debug:
            raise
        exit(1)

    # Update Radicale configuration according to arguments
    for group, actions in groups.items():
        section = group.title
        for action in actions:
            value = getattr(args, action)
            if value is not None:
                configuration.set(section, action.split('_', 1)[1], value)

    if args.verify_storage:
        # Write to stderr when storage verification is requested
        configuration["logging"]["config"] = ""

    # Start logging
    filename = os.path.expanduser(configuration.get("logging", "config"))
    debug = configuration.getboolean("logging", "debug")
    try:
        logger = log.start("radicale", filename, debug)
    except Exception as e:
        print("ERROR: Failed to start logger: %s" % e, file=sys.stderr)
        if debug:
            raise
        exit(1)

    if args.verify_storage:
        logger.info("Verifying storage")
        try:
            Collection = storage.load(configuration, logger)
            with Collection.acquire_lock("r"):
                if not Collection.verify():
                    logger.error("Storage verifcation failed")
                    exit(1)
        except Exception as e:
            logger.error("An exception occurred during storage verification: "
                         "%s", e, exc_info=True)
            exit(1)
        return

    try:
        serve(configuration, logger)
    except Exception as e:
        logger.error("An exception occurred during server startup: %s", e,
                     exc_info=True)
        exit(1)