# HG changeset patch # User ymh # Date 1354710153 -3600 # Node ID 0897d4ffdbc96f9cfb4b9c9b6e4f27dbebf8331a # Parent 7bdf9bc8d9bf7937ee260673283224521b4bddc3 correct pb on cache key + version nb diff -r 7bdf9bc8d9bf -r 0897d4ffdbc9 src/ldt/ldt/__init__.py --- a/src/ldt/ldt/__init__.py Wed Dec 05 00:12:15 2012 +0100 +++ b/src/ldt/ldt/__init__.py Wed Dec 05 13:22:33 2012 +0100 @@ -1,4 +1,4 @@ -VERSION = (1, 38, 0, "final", 0) +VERSION = (1, 39, 0, "final", 0) def get_version(): diff -r 7bdf9bc8d9bf -r 0897d4ffdbc9 src/ldt/ldt/security/cache.py --- a/src/ldt/ldt/security/cache.py Wed Dec 05 00:12:15 2012 +0100 +++ b/src/ldt/ldt/security/cache.py Wed Dec 05 13:22:33 2012 +0100 @@ -4,9 +4,12 @@ from django.contrib.auth.models import User from django.db.models import Q from guardian.shortcuts import assign +from django.utils.encoding import smart_str +import re +import hashlib def get_cached_checker(user): - key_name = 'checker_%s' % user.username + key_name = get_key(user.username) checker = cache.get(key_name) if checker: @@ -17,15 +20,15 @@ return checker -def cached_assign(perm, user_or_group, object): - assign(perm, user_or_group, object) +def cached_assign(perm, user_or_group, object_inst): + assign(perm, user_or_group, object_inst) if hasattr(user_or_group, 'username'): - key = 'checker_%s' % user_or_group.username + key = get_key(user_or_group.username) else: - key = 'checker_%s' % user_or_group.name + key = get_key(user_or_group.name) - cache.delete('checker_%s' % key) + cache.delete(key) def get_cached_userlist(): @@ -36,4 +39,16 @@ query = Q(id=settings.ANONYMOUS_USER_ID) | Q(is_superuser=True) userlist = User.objects.exclude(query) cache.set('userlist', userlist) - return userlist \ No newline at end of file + return userlist + +def get_key(name): + + name = smart_str(name, encoding="ascii", errors="replace") + name = re.sub(r"[^\w\s_\-]", '', name) + name = re.sub(r"\s+", '_', name) + + key = "checker_%s" % name + if len(key) > 250: + key = hashlib.sha512(key).hexdigest() + + return key