mirror of
https://github.com/jazzband/django-avatar.git
synced 2026-03-16 22:20:30 +00:00
Cleanup, reorganization, moved the default avatar url to conform to community standards, and added a test to ensure that it's correct.
This commit is contained in:
parent
67361f3933
commit
5648cb9f11
6 changed files with 63 additions and 28 deletions
|
|
@ -21,8 +21,7 @@ except ImportError:
|
|||
|
||||
from avatar import AVATAR_STORAGE_DIR, AVATAR_RESIZE_METHOD, \
|
||||
AVATAR_MAX_AVATARS_PER_USER, AVATAR_THUMB_FORMAT, \
|
||||
AVATAR_HASH_USERDIRNAMES, AVATAR_HASH_FILENAMES, \
|
||||
AVATAR_DEFAULT_URL
|
||||
AVATAR_HASH_USERDIRNAMES, AVATAR_HASH_FILENAMES
|
||||
|
||||
def avatar_file_path(instance=None, filename=None, size=None, ext=None):
|
||||
tmppath = [AVATAR_STORAGE_DIR]
|
||||
|
|
@ -59,25 +58,6 @@ def find_extension(format):
|
|||
format = 'jpg'
|
||||
|
||||
return format
|
||||
|
||||
def get_primary_avatar(user, size=80):
|
||||
if not isinstance(user, User):
|
||||
try:
|
||||
user = User.objects.get(username=user)
|
||||
except User.DoesNotExist:
|
||||
return AVATAR_DEFAULT_URL
|
||||
avatars = user.avatar_set.order_by('-date_uploaded')
|
||||
primary = avatars.filter(primary=True)
|
||||
if primary.count() > 0:
|
||||
avatar = primary[0]
|
||||
elif avatars.count() > 0:
|
||||
avatar = avatars[0]
|
||||
else:
|
||||
avatar = None
|
||||
if avatar:
|
||||
if not avatar.thumbnail_exists(size):
|
||||
avatar.create_thumbnail(size)
|
||||
return avatar
|
||||
|
||||
class Avatar(models.Model):
|
||||
user = models.ForeignKey(User)
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ from django.utils.hashcompat import md5_constructor
|
|||
from django.core.urlresolvers import reverse
|
||||
|
||||
from avatar.models import get_primary_avatar
|
||||
from avatar import AVATAR_DEFAULT_URL, AVATAR_GRAVATAR_BACKUP
|
||||
from avatar import AVATAR_GRAVATAR_DEFAULT
|
||||
from avatar import AVATAR_GRAVATAR_BACKUP, AVATAR_GRAVATAR_DEFAULT
|
||||
from avatar.util import get_default_avatar_url
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
|
@ -25,7 +25,7 @@ def avatar_url(user, size=80):
|
|||
md5_constructor(user.email).hexdigest(),
|
||||
urllib.urlencode(params))
|
||||
else:
|
||||
return AVATAR_DEFAULT_URL
|
||||
return get_default_avatar_url()
|
||||
register.simple_tag(avatar_url)
|
||||
|
||||
def avatar(user, size=80):
|
||||
|
|
@ -35,7 +35,7 @@ def avatar(user, size=80):
|
|||
alt = unicode(user)
|
||||
url = avatar_url(user, size)
|
||||
except User.DoesNotExist:
|
||||
url = AVATAR_DEFAULT_URL
|
||||
url = get_default_avatar_url()
|
||||
alt = _("Default Avatar")
|
||||
else:
|
||||
alt = unicode(user)
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ from django.test import TestCase
|
|||
from django.test.client import Client
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.conf import settings
|
||||
from avatar import AVATAR_DEFAULT_URL
|
||||
|
||||
try:
|
||||
from PIL import Image
|
||||
|
|
@ -65,6 +67,18 @@ class AvatarUploadTests(TestCase):
|
|||
f.close()
|
||||
self.failUnlessEqual(response.status_code, 200)
|
||||
self.failIfEqual(response.context['upload_avatar_form'].errors, {})
|
||||
|
||||
def testDefaultUrl(self):
|
||||
response = self.client.get(reverse('avatar_render_primary', kwargs={
|
||||
'user': self.user.username,
|
||||
'size': 80,
|
||||
}))
|
||||
loc = response['Location']
|
||||
base_url = getattr(settings, 'STATIC_URL', None)
|
||||
if not base_url:
|
||||
base_url = settings.MEDIA_URL
|
||||
self.assertTrue(base_url in loc)
|
||||
self.assertTrue(loc.endswith(AVATAR_DEFAULT_URL))
|
||||
|
||||
# def testTooManyAvatars
|
||||
# def testReplaceAvatarWhenMaxIsOne
|
||||
|
|
|
|||
37
avatar/util.py
Normal file
37
avatar/util.py
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
from django.conf import settings
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
from avatar import AVATAR_DEFAULT_URL
|
||||
|
||||
def get_default_avatar_url():
|
||||
base_url = getattr(settings, 'STATIC_URL', None)
|
||||
if not base_url:
|
||||
base_url = getattr(settings, 'MEDIA_URL', '')
|
||||
# We'll be nice and make sure there are no duplicated forward slashes
|
||||
ends = base_url.endswith('/')
|
||||
begins = AVATAR_DEFAULT_URL.startswith('/')
|
||||
if ends and begins:
|
||||
base_url = base_url[:-1]
|
||||
elif not ends and not begins:
|
||||
return '%s/%s' % (base_url, AVATAR_DEFAULT_URL)
|
||||
return '%s%s' % (base_url, AVATAR_DEFAULT_URL)
|
||||
|
||||
def get_primary_avatar(user, size=80):
|
||||
if not isinstance(user, User):
|
||||
try:
|
||||
user = User.objects.get(username=user)
|
||||
except User.DoesNotExist:
|
||||
return get_default_avatar_url()
|
||||
avatars = user.avatar_set.order_by('-date_uploaded')
|
||||
primary = avatars.filter(primary=True)
|
||||
if primary.count() > 0:
|
||||
avatar = primary[0]
|
||||
elif avatars.count() > 0:
|
||||
avatar = avatars[0]
|
||||
else:
|
||||
avatar = None
|
||||
if avatar:
|
||||
if not avatar.thumbnail_exists(size):
|
||||
avatar.create_thumbnail(size)
|
||||
return avatar
|
||||
|
|
@ -10,7 +10,8 @@ from django.db.models import get_app
|
|||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.conf import settings
|
||||
|
||||
from avatar import AVATAR_MAX_AVATARS_PER_USER, AVATAR_DEFAULT_URL
|
||||
from avatar import AVATAR_MAX_AVATARS_PER_USER
|
||||
from avatar.util import get_default_avatar_url
|
||||
|
||||
try:
|
||||
notification = get_app('notification')
|
||||
|
|
@ -175,5 +176,6 @@ def render_primary(request, extra_context={}, user=None, size=80, *args, **kwarg
|
|||
# the CDN store those files instead
|
||||
return HttpResponseRedirect(avatar.avatar_url(size))
|
||||
else:
|
||||
return HttpResponseRedirect(AVATAR_DEFAULT_URL)
|
||||
url = get_default_avatar_url()
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,9 @@ DATABASE_ENGINE = 'sqlite3'
|
|||
DATABASE_NAME = ':memory:'
|
||||
|
||||
ROOT_URLCONF = 'settings'
|
||||
|
||||
|
||||
STATIC_URL = '/site_media/static/'
|
||||
|
||||
SITE_ID = 1
|
||||
|
||||
INSTALLED_APPS = (
|
||||
|
|
|
|||
Loading…
Reference in a new issue