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)
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)
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)
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)
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)