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

Commit

Permalink
Pass config_dir_path and data_dir_path into Config.read_config. (#5522)
Browse files Browse the repository at this point in the history
  • Loading branch information
anoadragon453 committed Feb 13, 2020
2 parents c968e97 + c3c6b00 commit 634f6a6
Show file tree
Hide file tree
Showing 35 changed files with 104 additions and 67 deletions.
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 @@ -217,7 +219,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 @@ -229,10 +231,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 @@ -283,14 +297,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 @@ -301,20 +329,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 @@ -325,7 +343,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 @@ -368,35 +386,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 @@ -410,8 +430,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 @@ -431,8 +451,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 @@ -22,7 +22,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 @@ -77,7 +77,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

0 comments on commit 634f6a6

Please sign in to comment.