Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Pass config_dir_path and data_dir_path into Config.read_config. #5522

Merged
merged 3 commits into from
Jun 24, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/5522.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Pass config_dir_path and data_dir_path into Config.read_config.
104 changes: 70 additions & 34 deletions synapse/config/_base.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# -*- coding: utf-8 -*-
# Copyright 2014-2016 OpenMarket Ltd
# Copyright 2017-2018 New Vector Ltd
# Copyright 2019 The Matrix.org Foundation C.I.C.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -216,7 +218,7 @@ def load_config(cls, description, argv):
"--keys-directory",
metavar="DIRECTORY",
help="Where files such as certs and signing keys are stored when"
" their location is given explicitly in the config."
" their location is not given explicitly in the config."
" Defaults to the directory containing the last config file",
)

Expand All @@ -228,10 +230,22 @@ def load_config(cls, description, argv):

config_files = find_config_files(search_paths=config_args.config_path)

if not config_files:
config_parser.error("Must supply a config file.")

if config_args.keys_directory:
config_dir_path = config_args.keys_directory
else:
config_dir_path = os.path.dirname(config_files[-1])
config_dir_path = os.path.abspath(config_dir_path)
data_dir_path = os.getcwd()

config_dict = obj.read_config_files(
config_files, keys_directory=config_args.keys_directory
config_files, config_dir_path=config_dir_path, data_dir_path=data_dir_path
)
obj.parse_config_dict(
config_dict, config_dir_path=config_dir_path, data_dir_path=data_dir_path
)
obj.parse_config_dict(config_dict)

obj.invoke_all("read_arguments", config_args)

Expand Down Expand Up @@ -282,14 +296,28 @@ def load_or_generate_config(cls, description, argv):
metavar="DIRECTORY",
help=(
"Specify where additional config files such as signing keys and log"
" config should be stored. Defaults to the same directory as the main"
" config should be stored. Defaults to the same directory as the last"
" config file."
),
)
config_args, remaining_args = config_parser.parse_known_args(argv)

config_files = find_config_files(search_paths=config_args.config_path)

if not config_files:
config_parser.error(
"Must supply a config file.\nA config file can be automatically"
' generated using "--generate-config -H SERVER_NAME'
' -c CONFIG-FILE"'
)

if config_args.config_directory:
config_dir_path = config_args.config_directory
else:
config_dir_path = os.path.dirname(config_files[-1])
config_dir_path = os.path.abspath(config_dir_path)
data_dir_path = os.getcwd()

generate_missing_configs = config_args.generate_missing_configs

obj = cls()
Expand All @@ -300,20 +328,10 @@ def load_or_generate_config(cls, description, argv):
"Please specify either --report-stats=yes or --report-stats=no\n\n"
+ MISSING_REPORT_STATS_SPIEL
)
if not config_files:
config_parser.error(
"Must supply a config file.\nA config file can be automatically"
' generated using "--generate-config -H SERVER_NAME'
' -c CONFIG-FILE"'
)

(config_path,) = config_files
if not cls.path_exists(config_path):
print("Generating config file %s" % (config_path,))
if config_args.config_directory:
config_dir_path = config_args.config_directory
else:
config_dir_path = os.path.dirname(config_path)
config_dir_path = os.path.abspath(config_dir_path)

server_name = config_args.server_name
if not server_name:
Expand All @@ -324,7 +342,7 @@ def load_or_generate_config(cls, description, argv):

config_str = obj.generate_config(
config_dir_path=config_dir_path,
data_dir_path=os.getcwd(),
data_dir_path=data_dir_path,
server_name=server_name,
report_stats=(config_args.report_stats == "yes"),
generate_secrets=True,
Expand Down Expand Up @@ -367,35 +385,37 @@ def load_or_generate_config(cls, description, argv):
obj.invoke_all("add_arguments", parser)
args = parser.parse_args(remaining_args)

if not config_files:
config_parser.error(
"Must supply a config file.\nA config file can be automatically"
' generated using "--generate-config -H SERVER_NAME'
' -c CONFIG-FILE"'
)

config_dict = obj.read_config_files(
config_files, keys_directory=config_args.config_directory
config_files, config_dir_path=config_dir_path, data_dir_path=data_dir_path
)

if generate_missing_configs:
obj.generate_missing_files(config_dict)
return None

obj.parse_config_dict(config_dict)
obj.parse_config_dict(
config_dict, config_dir_path=config_dir_path, data_dir_path=data_dir_path
)
obj.invoke_all("read_arguments", args)

return obj

def read_config_files(self, config_files, keys_directory=None):
def read_config_files(self, config_files, config_dir_path, data_dir_path):
"""Read the config files into a dict

Args:
config_files (iterable[str]): A list of the config files to read

config_dir_path (str): The path where the config files are kept. Used to
create filenames for things like the log config and the signing key.

data_dir_path (str): The path where the data files are kept. Used to create
filenames for things like the database and media store.

Returns: dict
"""
if not keys_directory:
keys_directory = os.path.dirname(config_files[-1])

self.config_dir_path = os.path.abspath(keys_directory)
# FIXME: get rid of this
self.config_dir_path = config_dir_path

# first we read the config files into a dict
specified_config = {}
Expand All @@ -409,8 +429,8 @@ def read_config_files(self, config_files, keys_directory=None):
raise ConfigError(MISSING_SERVER_NAME)
server_name = specified_config["server_name"]
config_string = self.generate_config(
config_dir_path=self.config_dir_path,
data_dir_path=os.getcwd(),
config_dir_path=config_dir_path,
data_dir_path=data_dir_path,
server_name=server_name,
generate_secrets=False,
)
Expand All @@ -430,8 +450,24 @@ def read_config_files(self, config_files, keys_directory=None):
)
return config

def parse_config_dict(self, config_dict):
self.invoke_all("read_config", config_dict)
def parse_config_dict(self, config_dict, config_dir_path, data_dir_path):
"""Read the information from the config dict into this Config object.

Args:
config_dict (dict): Configuration data, as read from the yaml

config_dir_path (str): The path where the config files are kept. Used to
create filenames for things like the log config and the signing key.

data_dir_path (str): The path where the data files are kept. Used to create
filenames for things like the database and media store.
"""
self.invoke_all(
"read_config",
config_dict,
config_dir_path=config_dir_path,
data_dir_path=data_dir_path,
)

def generate_missing_files(self, config_dict):
self.invoke_all("generate_files", config_dict)
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@


class ApiConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
self.room_invite_state_types = config.get(
"room_invite_state_types",
[
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/appservice.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@


class AppServiceConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
self.app_service_config_files = config.get("app_service_config_files", [])
self.notify_appservices = config.get("notify_appservices", True)
self.track_appservice_user_ips = config.get("track_appservice_user_ips", False)
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/captcha.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@


class CaptchaConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
self.recaptcha_private_key = config.get("recaptcha_private_key")
self.recaptcha_public_key = config.get("recaptcha_public_key")
self.enable_registration_captcha = config.get(
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/cas.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class CasConfig(Config):
cas_server_url: URL of CAS server
"""

def read_config(self, config):
def read_config(self, config, **kwargs):
cas_config = config.get("cas_config", None)
if cas_config:
self.cas_enabled = cas_config.get("enabled", True)
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/consent_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def __init__(self):
self.user_consent_at_registration = False
self.user_consent_policy_name = "Privacy Policy"

def read_config(self, config):
def read_config(self, config, **kwargs):
consent_config = config.get("user_consent")
if consent_config is None:
return
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@


class DatabaseConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
self.event_cache_size = self.parse_size(config.get("event_cache_size", "10K"))

self.database_config = config.get("database")
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/emailconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@


class EmailConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
# TODO: We should separate better the email configuration from the notification
# and account validity config.

Expand Down
2 changes: 1 addition & 1 deletion synapse/config/groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@


class GroupsConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
self.enable_group_creation = config.get("enable_group_creation", False)
self.group_creation_prefix = config.get("group_creation_prefix", "")

Expand Down
2 changes: 1 addition & 1 deletion synapse/config/jwt_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@


class JWTConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
jwt_config = config.get("jwt_config", None)
if jwt_config:
self.jwt_enabled = jwt_config.get("enabled", False)
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/key.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ class TrustedKeyServer(object):


class KeyConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
# the signing key can be specified inline or in a separate file
if "signing_key" in config:
self.signing_key = read_signing_keys([config["signing_key"]])
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@


class LoggingConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
self.verbosity = config.get("verbose", 0)
self.no_redirect_stdio = config.get("no_redirect_stdio", False)
self.log_config = self.abspath(config.get("log_config"))
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@


class MetricsConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
self.enable_metrics = config.get("enable_metrics", False)
self.report_stats = config.get("report_stats", None)
self.metrics_port = config.get("metrics_port")
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/password.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class PasswordConfig(Config):
"""Password login configuration
"""

def read_config(self, config):
def read_config(self, config, **kwargs):
password_config = config.get("password_config", {})
if password_config is None:
password_config = {}
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/password_auth_providers.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@


class PasswordAuthProviderConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
self.password_providers = []
providers = []

Expand Down
2 changes: 1 addition & 1 deletion synapse/config/push.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@


class PushConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
push_config = config.get("push", {})
self.push_include_content = push_config.get("include_content", True)

Expand Down
2 changes: 1 addition & 1 deletion synapse/config/ratelimiting.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def __init__(self, **kwargs):


class RatelimitConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):

# Load the new-style messages config if it exists. Otherwise fall back
# to the old method.
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/registration.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def __init__(self, config, synapse_config):


class RegistrationConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
self.enable_registration = bool(
strtobool(str(config.get("enable_registration", False)))
)
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ def parse_thumbnail_requirements(thumbnail_sizes):


class ContentRepositoryConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
self.max_upload_size = self.parse_size(config.get("max_upload_size", "10M"))
self.max_image_pixels = self.parse_size(config.get("max_image_pixels", "32M"))
self.max_spider_size = self.parse_size(config.get("max_spider_size", "10M"))
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/room_directory.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@


class RoomDirectoryConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
self.enable_room_list_search = config.get("enable_room_list_search", True)

alias_creation_rules = config.get("alias_creation_rules")
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/saml2_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@


class SAML2Config(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
self.saml2_enabled = False

saml2_config = config.get("saml2_config")
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@


class ServerConfig(Config):
def read_config(self, config):
def read_config(self, config, **kwargs):
self.server_name = config["server_name"]
self.server_context = config.get("server_context", None)

Expand Down
2 changes: 1 addition & 1 deletion synapse/config/server_notices_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ def __init__(self):
self.server_notices_mxid_avatar_url = None
self.server_notices_room_name = None

def read_config(self, config):
def read_config(self, config, **kwargs):
c = config.get("server_notices")
if c is None:
return
Expand Down
Loading