diff options
| author | Christopher Long <indirecthit@gmail.com> | 2007-06-17 22:18:54 +0000 |
|---|---|---|
| committer | Christopher Long <indirecthit@gmail.com> | 2007-06-17 22:18:54 +0000 |
| commit | ae22b6d403dcf25098c77f0dfcf59ae58b186461 (patch) | |
| tree | c37fc631e99a7e4d909d6b6d236f495003731ea7 /django/utils/encoding.py | |
| parent | 0cf7bc439129c66df8d64601e885f83b256b4f25 (diff) | |
per-object-permissions: Merged to trunk [5486] NOTE: Not fully tested, will be working on this over the next few weeks.
git-svn-id: http://code.djangoproject.com/svn/django/branches/per-object-permissions@5488 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/utils/encoding.py')
| -rw-r--r-- | django/utils/encoding.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/django/utils/encoding.py b/django/utils/encoding.py new file mode 100644 index 0000000000..4774fb0d26 --- /dev/null +++ b/django/utils/encoding.py @@ -0,0 +1,32 @@ +from django.conf import settings +from django.utils.functional import Promise + +def smart_unicode(s): + if isinstance(s, Promise): + # The input is the result of a gettext_lazy() call, or similar. It will + # already be encoded in DEFAULT_CHARSET on evaluation and we don't want + # to evaluate it until render time. + # FIXME: This isn't totally consistent, because it eventually returns a + # bytestring rather than a unicode object. It works wherever we use + # smart_unicode() at the moment. Fixing this requires work in the + # i18n internals. + return s + if not isinstance(s, basestring,): + if hasattr(s, '__unicode__'): + s = unicode(s) + else: + s = unicode(str(s), settings.DEFAULT_CHARSET) + elif not isinstance(s, unicode): + s = unicode(s, settings.DEFAULT_CHARSET) + return s + +class StrAndUnicode(object): + """ + A class whose __str__ returns its __unicode__ as a bytestring + according to settings.DEFAULT_CHARSET. + + Useful as a mix-in. + """ + def __str__(self): + return self.__unicode__().encode(settings.DEFAULT_CHARSET) + |
