diff --git a/synapse/config/_base.py b/synapse/config/_base.py
index 6870af10e8..1426436dcb 100644
--- a/synapse/config/_base.py
+++ b/synapse/config/_base.py
@@ -50,6 +50,16 @@ class Config(object):
)
return cls.abspath(file_path)
+ @staticmethod
+ def ensure_directory(dir_path):
+ if not os.path.exists(dir_path):
+ os.makedirs(dir_path)
+ if not os.path.isdir(dir_path):
+ raise ConfigError(
+ "%s is not a directory" % (dir_path,)
+ )
+ return dir_path
+
@classmethod
def read_file(cls, file_path, config_name):
cls.check_file(file_path, config_name)
@@ -57,6 +67,10 @@ class Config(object):
return file_stream.read()
@staticmethod
+ def default_path(name):
+ return os.path.abspath(os.path.join(os.path.curdir, name))
+
+ @staticmethod
def read_config_file(file_path):
with open(file_path) as file_stream:
return yaml.load(file_stream)
diff --git a/synapse/config/repository.py b/synapse/config/repository.py
index 743bc26474..6eec930a03 100644
--- a/synapse/config/repository.py
+++ b/synapse/config/repository.py
@@ -20,6 +20,7 @@ class ContentRepositoryConfig(Config):
def __init__(self, args):
super(ContentRepositoryConfig, self).__init__(args)
self.max_upload_size = self.parse_size(args.max_upload_size)
+ self.media_store_path = self.ensure_directory(args.media_store_path)
def parse_size(self, string):
sizes = {"K": 1024, "M": 1024 * 1024}
@@ -37,3 +38,6 @@ class ContentRepositoryConfig(Config):
db_group.add_argument(
"--max-upload-size", default="1M"
)
+ db_group.add_argument(
+ "--media-store-path", default=cls.default_path("media_store")
+ )
|