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.
72 lines
2.1 KiB
72 lines
2.1 KiB
''' 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)
|
|
|