diff --git a/avatar/forms.py b/avatar/forms.py
index d9359ef..3806d40 100644
--- a/avatar/forms.py
+++ b/avatar/forms.py
@@ -15,12 +15,12 @@ def avatar_img(avatar, size):
if not avatar.thumbnail_exists(size):
avatar.create_thumbnail(size)
return mark_safe('
' %
- (avatar.avatar_url(size), unicode(avatar), size, size))
+ (avatar.avatar_url(size), avatar, size, size))
class UploadAvatarForm(forms.Form):
- avatar = forms.ImageField(label=_(u"avatar"))
+ avatar = forms.ImageField(label=_("avatar"))
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user')
diff --git a/avatar/management/commands/rebuild_avatars.py b/avatar/management/commands/rebuild_avatars.py
index 3a17970..0b00835 100644
--- a/avatar/management/commands/rebuild_avatars.py
+++ b/avatar/management/commands/rebuild_avatars.py
@@ -5,11 +5,11 @@ from avatar.settings import AUTO_GENERATE_AVATAR_SIZES
class Command(NoArgsCommand):
- help = "Regenerates avatar thumbnails for the sizes specified in " + \
- "settings.AUTO_GENERATE_AVATAR_SIZES."
+ help = ("Regenerates avatar thumbnails for the sizes specified in "
+ "settings.AUTO_GENERATE_AVATAR_SIZES.")
def handle_noargs(self, **options):
for avatar in Avatar.objects.all():
for size in AUTO_GENERATE_AVATAR_SIZES:
- print "Rebuilding Avatar id=%s at size %s." % (avatar.id, size)
+ print("Rebuilding Avatar id=%s at size %s." % (avatar.id, size))
avatar.create_thumbnail(size)
diff --git a/avatar/models.py b/avatar/models.py
index 17decd4..6be09b1 100644
--- a/avatar/models.py
+++ b/avatar/models.py
@@ -8,6 +8,7 @@ from django.core.files.base import ContentFile
from django.core.files.storage import get_storage_class
from django.utils.translation import ugettext as _
from django.utils.encoding import smart_str
+from django.utils import six
from django.db.models import signals
from avatar.util import get_username
@@ -86,7 +87,7 @@ class Avatar(models.Model):
date_uploaded = models.DateTimeField(default=now)
def __unicode__(self):
- return _(u'Avatar for %s') % self.user
+ return _(six.u('Avatar for %s')) % self.user
def save(self, *args, **kwargs):
avatars = Avatar.objects.filter(user=self.user)
diff --git a/avatar/templatetags/avatar_tags.py b/avatar/templatetags/avatar_tags.py
index 6ad7584..2e4c79d 100644
--- a/avatar/templatetags/avatar_tags.py
+++ b/avatar/templatetags/avatar_tags.py
@@ -3,9 +3,10 @@ import urlparse
import hashlib
from django import template
-from django.template.loader import render_to_string
-from django.utils.translation import ugettext as _
from django.core.urlresolvers import reverse
+from django.template.loader import render_to_string
+from django.utils import six
+from django.utils.translation import ugettext as _
from avatar.settings import (AVATAR_GRAVATAR_BACKUP, AVATAR_GRAVATAR_DEFAULT,
AVATAR_DEFAULT_SIZE, AVATAR_GRAVATAR_BASE_URL)
@@ -73,7 +74,7 @@ def primary_avatar(user, size=AVATAR_DEFAULT_SIZE):
work for us. If that special view is then cached by a CDN for instance,
we will avoid many db calls.
"""
- alt = unicode(user)
+ alt = six.text_type(user)
url = reverse('avatar_render_primary', kwargs={'user': user, 'size': size})
return """
""" % (url, alt,
size, size)
@@ -109,6 +110,6 @@ class UsersAvatarObjectNode(template.Node):
context[key] = avatar[0]
else:
context[key] = None
- return u""
+ return six.text_type()
register.tag('primary_avatar_object', primary_avatar_object)
diff --git a/avatar/util.py b/avatar/util.py
index 73f55a5..eee8e8a 100644
--- a/avatar/util.py
+++ b/avatar/util.py
@@ -3,6 +3,7 @@ import hashlib
from django.conf import settings
from django.core.cache import cache
from django.utils.encoding import smart_str
+from django.utils import six
from django.template.defaultfilters import slugify
try:
@@ -45,9 +46,9 @@ def get_cache_key(user_or_username, size, prefix):
"""
if isinstance(user_or_username, get_user_model()):
user_or_username = get_username(user_or_username)
- key = u'%s_%s_%s' % (prefix, user_or_username, size)
- return u'%s_%s' % (slugify(key)[:100],
- hashlib.md5(smart_str(key)).hexdigest())
+ key = six.u('%s_%s_%s') % (prefix, user_or_username, size)
+ return six.u('%s_%s') % (slugify(key)[:100],
+ hashlib.md5(smart_str(key)).hexdigest())
def cache_result(func):
diff --git a/avatar/views.py b/avatar/views.py
index a7826c9..fbd096f 100644
--- a/avatar/views.py
+++ b/avatar/views.py
@@ -1,6 +1,7 @@
from django.core.files.base import ContentFile
from django.http import HttpResponse, Http404
from django.shortcuts import get_object_or_404, render, redirect
+from django.utils import six
from django.utils.translation import ugettext as _
from django.views.decorators.csrf import csrf_exempt
@@ -144,10 +145,10 @@ def delete(request, extra_context=None, next_override=None, *args, **kwargs):
if request.method == 'POST':
if delete_avatar_form.is_valid():
ids = delete_avatar_form.cleaned_data['choices']
- if unicode(avatar.id) in ids and avatars.count() > len(ids):
+ if six.text_type(avatar.id) in ids and avatars.count() > len(ids):
# Find the next best avatar, and set it as the new primary
for a in avatars:
- if unicode(a.id) not in ids:
+ if six.text_type(a.id) not in ids:
a.primary = True
a.save()
avatar_updated.send(sender=Avatar, user=request.user, avatar=avatar)