Django Postman changelog
========================
+Version 2.1.1, December 2012
+----------------------------
+* Fix issue #21, a missing unicode/str encoding migration
+
Version 2.1.0, December 2012
----------------------------
* Make the app compatible with the new 'Custom Auth Model' feature of Django 1.5
--- /dev/null
+"""
+A forwards compatibility module.
+
+Implements some features of Django 1.4 when the application is run with a lower version of Django:
+- text truncating
+"""
+
+from __future__ import unicode_literals
+
+from django.utils.functional import allow_lazy
+from django.utils.text import truncate_words
+
+class Truncator(object):
+ "A simplified version of django.utils.text.Truncator"
+ def __init__(self, text):
+ self.text = text
+
+ def words(self, num):
+ s = truncate_words(self.text, num)
+ if s.endswith(' ...'):
+ s = s.replace(' ...', '...')
+ return s
+ words = allow_lazy(words)
from postman.future_1_5 import get_user_model
from django.core.exceptions import ValidationError
from django.db import models
-from django.utils.text import truncate_words
+try:
+ from django.utils.text import Truncator # Django 1.4
+except ImportError:
+ from postman.future_1_4 import Truncator
from django.utils.translation import ugettext, ugettext_lazy as _
try:
from django.utils.timezone import now # Django 1.4 aware datetimes
ordering = ['-sent_at', '-id']
def __unicode__(self):
- return "{0}>{1}:{2}".format(self.obfuscated_sender, self.obfuscated_recipient, truncate_words(self.subject,5))
+ return "{0}>{1}:{2}".format(self.obfuscated_sender, self.obfuscated_recipient, Truncator(self.subject).words(5))
@models.permalink
def get_absolute_url(self):
self.check_parties(m, s=self.user1, email=self.email )
self.check_parties(m, email=self.email, r=self.user2)
+ def test_representation(self):
+ "Test the message representation as text."
+ m = Message(sender=self.user1, recipient=self.user2)
+ m.subject = 'one two three four last'
+ self.assertEqual(str(m), 'foo>bar:one two three four last')
+ m.subject = 'one two three four last over'
+ self.assertEqual(str(m), 'foo>bar:one two three four last...')
+
def test_status(self):
"Test status."
m = Message.objects.create(subject='s')