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

Commit

Permalink
Merge pull request #4052 from matrix-org/rav/ship_resources_as_packag…
Browse files Browse the repository at this point in the history
…e_data

Ship the email templates as package_data
  • Loading branch information
richvdh authored Oct 17, 2018
2 parents 24bc15e + c8f2c19 commit f1bfe61
Show file tree
Hide file tree
Showing 13 changed files with 53 additions and 6 deletions.
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
36 changes: 33 additions & 3 deletions synapse/config/emailconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,25 @@
# 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__)

TEMPLATE_DIR_WARNING = """\
WARNING: The email notifier is configured to look for templates in '%(template_dir)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.
"""


class EmailConfig(Config):
def read_config(self, config):
Expand All @@ -38,7 +52,6 @@ def read_config(self, config):
"smtp_host",
"smtp_port",
"notif_from",
"template_dir",
"notif_template_html",
"notif_template_text",
]
Expand All @@ -62,9 +75,24 @@ 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 = TEMPLATE_DIR_WARNING % {
"template_dir": self.email_template_dir,
}
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 +141,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.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 comments on commit f1bfe61

Please sign in to comment.