mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-02 21:44:52 -04:00
Allow using several custom template directories (#10587)
Allow using several directories in read_templates.
This commit is contained in:
parent
a933c2c7d8
commit
ae2714c1f3
7 changed files with 97 additions and 26 deletions
|
@ -237,13 +237,14 @@ class Config:
|
|||
def read_templates(
|
||||
self,
|
||||
filenames: List[str],
|
||||
custom_template_directory: Optional[str] = None,
|
||||
custom_template_directories: Optional[Iterable[str]] = None,
|
||||
) -> List[jinja2.Template]:
|
||||
"""Load a list of template files from disk using the given variables.
|
||||
|
||||
This function will attempt to load the given templates from the default Synapse
|
||||
template directory. If `custom_template_directory` is supplied, that directory
|
||||
is tried first.
|
||||
template directory. If `custom_template_directories` is supplied, any directory
|
||||
in this list is tried (in the order they appear in the list) before trying
|
||||
Synapse's default directory.
|
||||
|
||||
Files read are treated as Jinja templates. The templates are not rendered yet
|
||||
and have autoescape enabled.
|
||||
|
@ -251,8 +252,8 @@ class Config:
|
|||
Args:
|
||||
filenames: A list of template filenames to read.
|
||||
|
||||
custom_template_directory: A directory to try to look for the templates
|
||||
before using the default Synapse template directory instead.
|
||||
custom_template_directories: A list of directory to try to look for the
|
||||
templates before using the default Synapse template directory instead.
|
||||
|
||||
Raises:
|
||||
ConfigError: if the file's path is incorrect or otherwise cannot be read.
|
||||
|
@ -260,20 +261,26 @@ class Config:
|
|||
Returns:
|
||||
A list of jinja2 templates.
|
||||
"""
|
||||
search_directories = [self.default_template_dir]
|
||||
search_directories = []
|
||||
|
||||
# The loader will first look in the custom template directory (if specified) for the
|
||||
# given filename. If it doesn't find it, it will use the default template dir instead
|
||||
if custom_template_directory:
|
||||
# Check that the given template directory exists
|
||||
if not self.path_exists(custom_template_directory):
|
||||
raise ConfigError(
|
||||
"Configured template directory does not exist: %s"
|
||||
% (custom_template_directory,)
|
||||
)
|
||||
# The loader will first look in the custom template directories (if specified)
|
||||
# for the given filename. If it doesn't find it, it will use the default
|
||||
# template dir instead.
|
||||
if custom_template_directories is not None:
|
||||
for custom_template_directory in custom_template_directories:
|
||||
# Check that the given template directory exists
|
||||
if not self.path_exists(custom_template_directory):
|
||||
raise ConfigError(
|
||||
"Configured template directory does not exist: %s"
|
||||
% (custom_template_directory,)
|
||||
)
|
||||
|
||||
# Search the custom template directory as well
|
||||
search_directories.insert(0, custom_template_directory)
|
||||
# Search the custom template directory as well
|
||||
search_directories.append(custom_template_directory)
|
||||
|
||||
# Append the default directory at the end of the list so Jinja can fallback on it
|
||||
# if a template is missing from any custom directory.
|
||||
search_directories.append(self.default_template_dir)
|
||||
|
||||
# TODO: switch to synapse.util.templates.build_jinja_env
|
||||
loader = jinja2.FileSystemLoader(search_directories)
|
||||
|
|
|
@ -88,5 +88,5 @@ class AccountValidityConfig(Config):
|
|||
"account_previously_renewed.html",
|
||||
invalid_token_template_filename,
|
||||
],
|
||||
account_validity_template_dir,
|
||||
(td for td in (account_validity_template_dir,) if td),
|
||||
)
|
||||
|
|
|
@ -257,7 +257,9 @@ class EmailConfig(Config):
|
|||
registration_template_success_html,
|
||||
add_threepid_template_success_html,
|
||||
],
|
||||
template_dir,
|
||||
(
|
||||
td for td in (template_dir,) if td
|
||||
), # Filter out template_dir if not provided
|
||||
)
|
||||
|
||||
# Render templates that do not contain any placeholders
|
||||
|
@ -297,7 +299,7 @@ class EmailConfig(Config):
|
|||
self.email_notif_template_text,
|
||||
) = self.read_templates(
|
||||
[notif_template_html, notif_template_text],
|
||||
template_dir,
|
||||
(td for td in (template_dir,) if td),
|
||||
)
|
||||
|
||||
self.email_notif_for_new_users = email_config.get(
|
||||
|
@ -320,7 +322,7 @@ class EmailConfig(Config):
|
|||
self.account_validity_template_text,
|
||||
) = self.read_templates(
|
||||
[expiry_template_html, expiry_template_text],
|
||||
template_dir,
|
||||
(td for td in (template_dir,) if td),
|
||||
)
|
||||
|
||||
subjects_config = email_config.get("subjects", {})
|
||||
|
|
|
@ -63,7 +63,7 @@ class SSOConfig(Config):
|
|||
"sso_auth_success.html",
|
||||
"sso_auth_bad_user.html",
|
||||
],
|
||||
self.sso_template_dir,
|
||||
(td for td in (self.sso_template_dir,) if td),
|
||||
)
|
||||
|
||||
# These templates have no placeholders, so render them here
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue