| author | cavaliet |
| Mon, 18 Mar 2013 16:15:46 +0100 | |
| changeset 1132 | 026d510a3dc3 |
| parent 1017 | 0897d4ffdbc9 |
| child 1191 | b6e0b1811723 |
| permissions | -rw-r--r-- |
| 279 | 1 |
from django.core.cache import cache |
| 282 | 2 |
from django.conf import settings |
| 279 | 3 |
from guardian.core import ObjectPermissionChecker |
| 282 | 4 |
from django.contrib.auth.models import User |
5 |
from django.db.models import Q |
|
| 279 | 6 |
from guardian.shortcuts import assign |
|
1017
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
7 |
from django.utils.encoding import smart_str |
|
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
8 |
import re |
|
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
9 |
import hashlib |
| 279 | 10 |
|
| 282 | 11 |
def get_cached_checker(user): |
|
1017
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
12 |
key_name = get_key(user.username) |
| 279 | 13 |
|
14 |
checker = cache.get(key_name) |
|
15 |
if checker: |
|
16 |
return checker |
|
17 |
||
18 |
checker = ObjectPermissionChecker(user) |
|
| 285 | 19 |
cache.set(key_name, checker) |
| 279 | 20 |
return checker |
21 |
||
22 |
||
|
1017
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
23 |
def cached_assign(perm, user_or_group, object_inst): |
|
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
24 |
assign(perm, user_or_group, object_inst) |
| 279 | 25 |
|
| 282 | 26 |
if hasattr(user_or_group, 'username'): |
|
1017
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
27 |
key = get_key(user_or_group.username) |
| 279 | 28 |
else: |
|
1017
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
29 |
key = get_key(user_or_group.name) |
| 279 | 30 |
|
|
1017
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
31 |
cache.delete(key) |
| 282 | 32 |
|
33 |
||
34 |
def get_cached_userlist(): |
|
35 |
userlist = cache.get('userlist') |
|
36 |
if userlist: |
|
37 |
return userlist |
|
38 |
||
39 |
query = Q(id=settings.ANONYMOUS_USER_ID) | Q(is_superuser=True) |
|
40 |
userlist = User.objects.exclude(query) |
|
41 |
cache.set('userlist', userlist) |
|
|
1017
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
42 |
return userlist |
|
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
43 |
|
|
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
44 |
def get_key(name): |
|
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
45 |
|
|
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
46 |
name = smart_str(name, encoding="ascii", errors="replace") |
|
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
47 |
name = re.sub(r"[^\w\s_\-]", '', name) |
|
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
48 |
name = re.sub(r"\s+", '_', name) |
|
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
49 |
|
|
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
50 |
key = "checker_%s" % name |
|
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
51 |
if len(key) > 250: |
|
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
52 |
key = hashlib.sha512(key).hexdigest() |
|
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
53 |
|
|
0897d4ffdbc9
correct pb on cache key + version nb
ymh <ymh.work@gmail.com>
parents:
285
diff
changeset
|
54 |
return key |