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:
@@ -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)
|
||||
|
@@ -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
|
||||
|
@@ -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:
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user