Skip to content

Commit

Permalink
Updated the content type settings for tpl backends
Browse files Browse the repository at this point in the history
  • Loading branch information
flashingpumpkin committed Jul 2, 2012
1 parent c229e3f commit 606431a
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 7 deletions.
7 changes: 7 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,13 @@ Using notification classes
Changelog
---------

**v0.3**

* *backwards incompatible* Guessing the file extension with the
``mimetypes`` package proved to be inconsistent across systems.
``TemplatedEmailBackend`` now makes uses explicitly declared file
extensions.

**v0.2**

* Made the API saner to use (*backwards incompatible*):
Expand Down
79 changes: 79 additions & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,82 @@ Changelog
- ``yell.decorators.yelling`` became ``yell.decorators.notification``


====
yell
====

Pluggable notifications for your Python apps.

`yell` is not a notification storage or delivery backend but a set of APIs that make it easy to add your own delivery mechanisms.

The full documentation is available `here <http://yell.readthedocs.org/en/latest/index.html>`_.


Using notification decorators
-----------------------------

::

from yell import notify
from yell.decorators import notification
@notification(name = 'buffalo')
def buffalo_printer(message):
print message
@notification(name = 'buffalo')
def buffalo_saver(message):
save(message)
notify("buffalo", _("Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo"))


Using notification classes
--------------------------

::

from yell import Notification, notify

class Buffalo(Notification):
name = "buffalo"
message = _("Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo")
def notify(self, *args, **kwargs):
print self.message
class BuffaloEmail(Buffalo):
def notify(self, *args, **kwargs):
send_mail("Buffalo", self.message, '[email protected]', [kwargs.get('user').email])

class BuffaloDatabase(Buffalo):
def notify(self, *args, **kwargs):
BuffaloModel.objects.create(user = kwargs.get('user'))

# The default behaviour is to use every notification backend with the same
# name
notify("buffalo", user = User.objects.get(id=1))

# Only send emails
notify("buffalo", user = User.objects.get(id=1), backends = [BuffaloEmail])


Changelog
---------

**v0.3**

* *backwards incompatible* Guessing the file extension with the
``mimetypes`` package proved to be inconsistent across systems.
``TemplatedEmailBackend`` now makes uses explicitly declared file
extensions.

**v0.2**

* Made the API saner to use (*backwards incompatible*):

- ``yell.Yell`` became ``yell.Notification``
- ``yell.yell`` became ``yell.notify``
- ``yell.decorators.yelling`` became ``yell.decorators.notification``


2 changes: 1 addition & 1 deletion yell/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
__version__ = "0.2"
__version__ = "0.3"

import registry

Expand Down
22 changes: 16 additions & 6 deletions yell/backends/django.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from django import template
from django.core.mail import send_mail, EmailMultiAlternatives
from yell import Notification
import mimetypes



class EmailBackend(Notification):
Expand Down Expand Up @@ -101,23 +101,33 @@ class SignupMessage(TemplatedEmailBackend):
* `yell/signup.html`
"""
content_types = ['text/plain', 'text/html']
content_types = (
('text/plain', '.txt'),
('text/html', '.html')
)
"""
Default content types to render
"""

# Memoize
_body = None

def get_path(self, name, ext):
"""
Get the path to a given template name. Override if you wish to
store your templates in a custom folder outside of `yell/`.
"""
return os.paht.join('yell', '{0}{1}'.format(name, ext))

def get_body(self, *args, **kwargs):
"""
Render message bodies by guessing the file extension from
:attr:`content_types`
Render message bodies by using all the content types defined
in :attr:`content_types`
"""
if self._body is None:
self._body = {}
for ctype in self.content_types:
tpl = template.loader.get_template('yell/%s%s' % (self.name, mimetypes.guess_extension(ctype)))
for ctype, ext in self.content_types:
tpl = template.loader.get_template(self.get_path(self.name, ext))
self._body[ctype] = tpl.render(template.Context(kwargs))
return self._body

0 comments on commit 606431a

Please sign in to comment.