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

Ship the email templates as package_data #4052

Merged
merged 2 commits into from
Oct 17, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
2 changes: 1 addition & 1 deletion MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ recursive-include synapse/storage/schema *.sql
recursive-include synapse/storage/schema *.py

recursive-include docs *
recursive-include res *
recursive-include scripts *
recursive-include scripts-dev *
recursive-include synapse *.pyi
recursive-include tests *.py

recursive-include synapse/res *
recursive-include synapse/static *.css
recursive-include synapse/static *.gif
recursive-include synapse/static *.html
Expand Down
12 changes: 12 additions & 0 deletions changelog.d/4052.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Ship the example email templates as part of the package

**Note**: if you deploy your Synapse instance from a git checkout or a github
snapshot URL, then this means that the example email templates will no longer
be installed in `res/templates`. If you have email notifications enabled, you
should ensure that `email.template_dir` is either configured to point at a
directory where you have installed customised templates, or leave it unset to
use the default templates.

The configuration parser will try to detect the situation where
`email.template_dir` is incorrectly set to `res/templates` and do the right
thing, but will warn about this.
4 changes: 3 additions & 1 deletion docker/conf/homeserver.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,9 @@ email:
require_transport_security: False
notif_from: "{{ SYNAPSE_SMTP_FROM or "hostmaster@" + SYNAPSE_SERVER_NAME }}"
app_name: Matrix
template_dir: res/templates
# if template_dir is unset, uses the example templates that are part of
# the Synapse distribution.
#template_dir: res/templates
notif_template_html: notif_mail.html
notif_template_text: notif_mail.txt
notif_for_new_users: True
Expand Down
33 changes: 30 additions & 3 deletions synapse/config/emailconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,19 @@
# See the License for the specific language governing permissions and
# limitations under the License.

from __future__ import print_function

# This file can't be called email.py because if it is, we cannot:
import email.utils
import logging
import os
import sys
import textwrap

from ._base import Config

logger = logging.getLogger(__name__)


class EmailConfig(Config):
def read_config(self, config):
Expand All @@ -38,7 +46,6 @@ def read_config(self, config):
"smtp_host",
"smtp_port",
"notif_from",
"template_dir",
"notif_template_html",
"notif_template_text",
]
Expand All @@ -62,9 +69,27 @@ def read_config(self, config):
self.email_smtp_host = email_config["smtp_host"]
self.email_smtp_port = email_config["smtp_port"]
self.email_notif_from = email_config["notif_from"]
self.email_template_dir = email_config["template_dir"]
self.email_notif_template_html = email_config["notif_template_html"]
self.email_notif_template_text = email_config["notif_template_text"]

self.email_template_dir = email_config.get("template_dir")

# backwards-compatibility hack
if (
self.email_template_dir == "res/templates"
and not os.path.isfile(
os.path.join(self.email_template_dir, self.email_notif_template_text)
)
):
t = """\
WARNING: The email notifier is configured to look for templates in '%s', but no templates
could be found there. We will fall back to using the example templates; to get rid of this
warning, leave 'email.template_dir' unset.
""" % (self.email_template_dir,)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(I'd rather these big blocks of text were defined at the top of the file as constants, rather than stomping all over the indentation)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fair


print(textwrap.fill(t, width=80) + "\n", file=sys.stderr)
self.email_template_dir = None

self.email_notif_for_new_users = email_config.get(
"notif_for_new_users", True
)
Expand Down Expand Up @@ -113,7 +138,9 @@ def default_config(self, config_dir_path, server_name, **kwargs):
# require_transport_security: False
# notif_from: "Your Friendly %(app)s Home Server <[email protected]>"
# app_name: Matrix
# template_dir: res/templates
# # if template_dir is unset, uses the example templates that are part of
# # the Synapse distribution.
# #template_dir: res/templates
# notif_template_html: notif_mail.html
# notif_template_text: notif_mail.txt
# notif_for_new_users: True
Expand Down
5 changes: 4 additions & 1 deletion synapse/push/mailer.py
Original file line number Diff line number Diff line change
Expand Up @@ -528,7 +528,10 @@ def load_jinja2_templates(config):
"""
logger.info("loading jinja2")

loader = jinja2.FileSystemLoader(config.email_template_dir)
if config.email_template_dir:
loader = jinja2.FileSystemLoader(config.email_template_dir)
else:
loader = jinja2.PackageLoader('synapse', 'res/templates')
env = jinja2.Environment(loader=loader)
env.filters["format_ts"] = format_ts_filter
env.filters["mxc_to_http"] = _create_mxc_to_http_filter(config)
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.