feat: Send welcome email from template

This commit is contained in:
James Graham
2020-04-28 15:17:58 +01:00
parent a39cf0e7ca
commit 567322c0af
6 changed files with 100 additions and 1 deletions

View File

@@ -1,5 +1,63 @@
import logging
from django.apps import AppConfig
from django.conf import settings
from django.core import serializers
from django.db.models.signals import post_save
logger = logging.getLogger(__name__)
def load_welcome_template_fixture(fixture_path) -> bool:
"""Load welcome email template from a JSON fixture."""
try:
with open(fixture_path) as f:
for deserialized in serializers.deserialize('json', f):
if deserialized.object.name == settings.TEMPLATE_WELCOME_EMAIL_NAME:
deserialized.save()
logger.warning('Welcome email template \'%s\' loaded', deserialized.object.name)
return True
return False
except FileNotFoundError:
logger.warning('Email template fixture not found.')
return False
def send_welcome_email(sender, instance, **kwargs):
from post_office import models
try:
instance.send_welcome_email()
except models.EmailTemplate.DoesNotExist:
logger.warning('Welcome email template \'%s\' not found - attempting to load from fixtures',
settings.TEMPLATE_WELCOME_EMAIL_NAME)
is_loaded = False
if settings.CUSTOMISATION_NAME:
# Customisation app present - try here first
is_loaded |= load_welcome_template_fixture(
settings.BASE_DIR.joinpath('custom', 'fixtures', 'email_templates.json')
)
# |= operator shortcuts - only try here if we don't already have it
is_loaded |= load_welcome_template_fixture(
settings.BASE_DIR.joinpath('people', 'fixtures', 'email_templates.json')
)
if is_loaded:
instance.send_welcome_email()
else:
logger.error('Welcome email template \'%s\' not found', settings.TEMPLATE_WELCOME_EMAIL_NAME)
class PeopleConfig(AppConfig):
name = 'people'
def ready(self) -> None:
# Activate signal handlers
post_save.connect(send_welcome_email,
sender='people.user')