You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.1 KiB
73 lines
2.1 KiB
7 years ago
|
''' custom events and event subsribers '''
|
||
|
|
||
|
from pyramid.events import subscriber
|
||
|
from pyramid.renderers import render
|
||
|
from pyramid_mailer import get_mailer
|
||
|
from pyramid_mailer.message import Message
|
||
|
|
||
|
|
||
|
# custom events
|
||
|
|
||
|
class UserNotification(object):
|
||
|
''' base class for user notification emails
|
||
|
|
||
|
:param pyramid.request.Request request: current request object
|
||
|
:param ordr.models.account.Users account: send notification to this user
|
||
|
:param dict data: additional data to pass to the mail template
|
||
|
'''
|
||
|
|
||
|
#: subject of the notification
|
||
|
subject = None
|
||
|
|
||
|
#: template to render
|
||
|
template = None
|
||
|
|
||
|
def __init__(self, request, account, data=None):
|
||
|
self.request = request
|
||
|
self.account = account
|
||
|
self.data = data
|
||
|
|
||
|
|
||
|
class ActivationNotification(UserNotification):
|
||
|
''' user notification for account activation '''
|
||
|
subject = '[ordr] Your account was activated'
|
||
|
template = 'ordr:templates/emails/activation.jinja2'
|
||
|
|
||
|
|
||
|
class OrderStatusNotification(UserNotification):
|
||
|
''' user notification for order status change '''
|
||
|
subject = '[ordr] Order Status Change'
|
||
|
template = 'ordr:templates/emails/order.jinja2'
|
||
|
|
||
|
|
||
|
class PasswordResetNotification(UserNotification):
|
||
|
''' user notification for password reset link '''
|
||
|
subject = '[ordr] Password Reset'
|
||
|
template = 'ordr:templates/emails/password_reset.jinja2'
|
||
|
|
||
|
|
||
|
class RegistrationNotification(UserNotification):
|
||
|
''' user notification for account activation '''
|
||
|
subject = '[ordr] Please verify your email address'
|
||
|
template = 'ordr:templates/emails/registration.jinja2'
|
||
|
|
||
|
|
||
|
# subsribers for events
|
||
|
|
||
|
@subscriber(UserNotification)
|
||
|
def notify_user(event):
|
||
|
''' notify a user about an event '''
|
||
|
body = render(
|
||
|
event.template,
|
||
|
{'user': event.account, 'data': event.data},
|
||
|
event.request
|
||
|
)
|
||
|
message = Message(
|
||
|
subject=event.subject,
|
||
|
sender=event.request.registry.settings['mail.default_sender'],
|
||
|
recipients=[event.account.email],
|
||
|
html=body
|
||
|
)
|
||
|
mailer = get_mailer(event.request.registry)
|
||
|
mailer.send(message)
|