1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-01 23:20:51 +00:00

Added group avatar cache

This commit is contained in:
zhengxie
2012-11-21 20:48:36 +08:00
parent 1b686fc8cf
commit 8913e39904
4 changed files with 38 additions and 11 deletions

View File

@@ -11,14 +11,15 @@ AVATAR_DEFAULT_SIZE = getattr(settings, 'AVATAR_DEFAULT_SIZE', 80)
AVATAR_STORAGE_DIR = getattr(settings, 'AVATAR_STORAGE_DIR', 'avatars')
AVATAR_DEFAULT_URL = getattr(settings, 'AVATAR_DEFAULT_URL', 'avatar/img/default.jpg')
AVATAR_DEFAULT_NON_REGISTERED_URL = getattr(settings, 'AVATAR_DEFAULT_NON_REGISTERED_URL', '/avatars/default-non-register.jpg')
AUTO_GENERATE_AVATAR_SIZES = getattr(settings, 'AUTO_GENERATE_AVATAR_SIZES', (AVATAR_DEFAULT_SIZE,))
### Group avatars ###
GROUP_AVATAR_DEFAULT_SIZE = getattr(settings, 'GROUP_AVATAR_DEFAULT_SIZE', 48)
GROUP_AVATAR_STORAGE_DIR = getattr(settings, 'GROUP_AVATAR_STORAGE_DIR', 'avatars/groups')
GROUP_AVATAR_DEFAULT_URL = getattr(settings, 'GROUP_AVATAR_DEFAULT_URL', 'avatars/groups/default.png')
AUTO_GENERATE_GROUP_AVATAR_SIZES = getattr(settings, 'AUTO_GENERATE_GROUP_AVATAR_SIZES', (GROUP_AVATAR_DEFAULT_SIZE,))
### Common settings ###
AUTO_GENERATE_AVATAR_SIZES = getattr(settings, 'AUTO_GENERATE_AVATAR_SIZES', (AVATAR_DEFAULT_SIZE,))
AVATAR_RESIZE_METHOD = getattr(settings, 'AVATAR_RESIZE_METHOD', Image.ANTIALIAS)
AVATAR_GRAVATAR_BACKUP = getattr(settings, 'AVATAR_GRAVATAR_BACKUP', True)
AVATAR_GRAVATAR_DEFAULT = getattr(settings, 'AVATAR_GRAVATAR_DEFAULT', None)

View File

@@ -1,13 +1,11 @@
# import urllib
from django.conf import settings
from django.core.cache import cache
from django import template
# from django.utils.hashcompat import md5_constructor
# from django.core.urlresolvers import reverse
from avatar.settings import (GROUP_AVATAR_DEFAULT_SIZE, GROUP_AVATAR_DEFAULT_URL)
from avatar.settings import (GROUP_AVATAR_DEFAULT_SIZE, AVATAR_CACHE_TIMEOUT,
GROUP_AVATAR_DEFAULT_URL)
from avatar.models import GroupAvatar
from avatar.util import get_grp_cache_key
register = template.Library()
@@ -29,6 +27,13 @@ def get_default_group_avatar_url():
@register.simple_tag
def grp_avatar_url(group_id, size=GROUP_AVATAR_DEFAULT_SIZE):
# Get from cache
key = get_grp_cache_key(group_id, size)
val = cache.get(key)
if val:
return val
# Get from DB, and refresh cache
grp_avatars = GroupAvatar.objects.filter(group_id=group_id)
if grp_avatars:
avatar = grp_avatars.order_by('-date_uploaded')[0]
@@ -42,4 +47,5 @@ def grp_avatar_url(group_id, size=GROUP_AVATAR_DEFAULT_SIZE):
else:
avatar_src = get_default_group_avatar_url()
cache.set(key, avatar_src, AVATAR_CACHE_TIMEOUT)
return avatar_src

View File

@@ -5,7 +5,8 @@ from seahub.base.accounts import User
from avatar.settings import (AVATAR_DEFAULT_URL, AVATAR_CACHE_TIMEOUT,
AUTO_GENERATE_AVATAR_SIZES, AVATAR_DEFAULT_SIZE,
AVATAR_DEFAULT_NON_REGISTERED_URL)
AVATAR_DEFAULT_NON_REGISTERED_URL,
AUTO_GENERATE_GROUP_AVATAR_SIZES)
cached_funcs = set()
@@ -17,6 +18,12 @@ def get_cache_key(user_or_username, size, prefix):
user_or_username = user_or_username.username
return '%s_%s_%s' % (prefix, user_or_username, size)
def get_grp_cache_key(group_id, size):
"""
Returns a cache key consisten of a group id and iamge size.
"""
return 'Group_%s_%s' % (group_id, size)
def cache_result(func):
"""
Decorator to cache the result of functions that take a ``user`` and a
@@ -44,6 +51,16 @@ def invalidate_cache(user, size=None):
for size in sizes:
cache.delete(get_cache_key(user, size, prefix))
def invalidate_group_cache(group_id, size=None):
"""
Function to be called when saving or changing an user's avatars.
"""
sizes = set(AUTO_GENERATE_GROUP_AVATAR_SIZES)
if size is not None:
sizes.add(size)
for size in sizes:
cache.delete(get_grp_cache_key(group_id, size))
def get_default_avatar_url():
base_url = getattr(settings, 'STATIC_URL', None)
if not base_url:

View File

@@ -1,4 +1,5 @@
# encoding: utf-8
from django.core.cache import cache
from django.http import HttpResponseRedirect, Http404
from django.shortcuts import render_to_response
from django.template import RequestContext
@@ -12,7 +13,7 @@ from avatar.models import Avatar, GroupAvatar
from avatar.settings import AVATAR_MAX_AVATARS_PER_USER, AVATAR_DEFAULT_SIZE
from avatar.signals import avatar_updated
from avatar.util import get_primary_avatar, get_default_avatar_url, \
invalidate_cache
invalidate_cache, invalidate_group_cache
from seahub.utils import render_error, render_permission_error, \
check_and_get_org_by_group
@@ -110,9 +111,11 @@ def group_add(request, gid):
if form.is_valid():
image_file = request.FILES['avatar']
avatar = GroupAvatar()
avatar.group_id = group_id
avatar.group_id = gid
avatar.avatar.save(image_file.name, image_file)
avatar.save()
# invalidate group avatar cache
invalidate_group_cache(gid)
return render_to_response('avatar/set_avatar.html', {
'group' : group,