author | Lennard de Rijk <ljvderijk@gmail.com> |
Tue, 30 Jun 2009 14:56:48 +0200 | |
changeset 2464 | 64b241a237b2 |
parent 2365 | a66e1dd8ced7 |
permissions | -rw-r--r-- |
1795 | 1 |
#!/usr/bin/python2.5 |
2 |
# |
|
3 |
# Copyright 2009 the Melange authors. |
|
4 |
# |
|
5 |
# Licensed under the Apache License, Version 2.0 (the "License"); |
|
6 |
# you may not use this file except in compliance with the License. |
|
7 |
# You may obtain a copy of the License at |
|
8 |
# |
|
9 |
# http://www.apache.org/licenses/LICENSE-2.0 |
|
10 |
# |
|
11 |
# Unless required by applicable law or agreed to in writing, software |
|
12 |
# distributed under the License is distributed on an "AS IS" BASIS, |
|
13 |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
14 |
# See the License for the specific language governing permissions and |
|
15 |
# limitations under the License. |
|
16 |
||
17 |
"""Module contains logic memcaching functions. |
|
18 |
""" |
|
19 |
||
20 |
__authors__ = [ |
|
21 |
'"Sverre Rabbelier" <sverre@rabbelier.nl>', |
|
22 |
] |
|
23 |
||
24 |
||
25 |
from google.appengine.api import memcache |
|
1958
8e8f45dd46e3
Made _getPickData more generic by supporting ordening
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1795
diff
changeset
|
26 |
from google.appengine.ext import db |
1795 | 27 |
|
28 |
import soc.cache.base |
|
29 |
||
30 |
||
1958
8e8f45dd46e3
Made _getPickData more generic by supporting ordening
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1795
diff
changeset
|
31 |
def key(model, filter, order): |
1795 | 32 |
"""Returns the memcache key for this query. |
33 |
""" |
|
34 |
||
1958
8e8f45dd46e3
Made _getPickData more generic by supporting ordening
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1795
diff
changeset
|
35 |
new_filter = {} |
8e8f45dd46e3
Made _getPickData more generic by supporting ordening
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1795
diff
changeset
|
36 |
|
2070
9555be8634a3
Remove unused imports soc.cache.base module and rename key variable to filter_key in soc.views.sitemap modules (access to outer scope names).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
1958
diff
changeset
|
37 |
for filter_key, value in filter.iteritems(): |
2187
e4172c7792f5
Fix too long line in soc.cache.logic module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
2160
diff
changeset
|
38 |
if isinstance(value, db.Model): |
e4172c7792f5
Fix too long line in soc.cache.logic module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
2160
diff
changeset
|
39 |
new_value = value.key().id_or_name() |
e4172c7792f5
Fix too long line in soc.cache.logic module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
2160
diff
changeset
|
40 |
else: |
e4172c7792f5
Fix too long line in soc.cache.logic module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
2160
diff
changeset
|
41 |
new_value = value |
2070
9555be8634a3
Remove unused imports soc.cache.base module and rename key variable to filter_key in soc.views.sitemap modules (access to outer scope names).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
1958
diff
changeset
|
42 |
new_filter[filter_key] = new_value |
1958
8e8f45dd46e3
Made _getPickData more generic by supporting ordening
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1795
diff
changeset
|
43 |
|
8e8f45dd46e3
Made _getPickData more generic by supporting ordening
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1795
diff
changeset
|
44 |
return 'query_for_%(kind)s_%(filter)s_%(order)s' % { |
8e8f45dd46e3
Made _getPickData more generic by supporting ordening
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1795
diff
changeset
|
45 |
'kind': repr(model.kind()), |
8e8f45dd46e3
Made _getPickData more generic by supporting ordening
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1795
diff
changeset
|
46 |
'filter': repr(new_filter), |
8e8f45dd46e3
Made _getPickData more generic by supporting ordening
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1795
diff
changeset
|
47 |
'order': repr(order), |
8e8f45dd46e3
Made _getPickData more generic by supporting ordening
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1795
diff
changeset
|
48 |
} |
1795 | 49 |
|
50 |
||
1958
8e8f45dd46e3
Made _getPickData more generic by supporting ordening
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1795
diff
changeset
|
51 |
def get(model, filter, order, *args, **kwargs): |
1795 | 52 |
"""Retrieves the data for the specified query from the memcache. |
53 |
""" |
|
54 |
||
1958
8e8f45dd46e3
Made _getPickData more generic by supporting ordening
Sverre Rabbelier <srabbelier@gmail.com>
parents:
1795
diff
changeset
|
55 |
memcache_key = key(model, filter, order) |
2365
a66e1dd8ced7
Add pylint: disable-msg= where needed in Melange modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
2187
diff
changeset
|
56 |
# pylint: disable-msg=E1101 |
1795 | 57 |
return memcache.get(memcache_key), memcache_key |
58 |
||
59 |
||
60 |
def put(data, memcache_key, *args, **kwargs): |
|
61 |
"""Sets the data for the specified query in the memcache. |
|
62 |
||
63 |
Args: |
|
64 |
data: the data to be cached |
|
65 |
""" |
|
66 |
||
67 |
# Store data for fifteen minutes to force a refresh every so often |
|
68 |
retention = 15*60 |
|
2365
a66e1dd8ced7
Add pylint: disable-msg= where needed in Melange modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
2187
diff
changeset
|
69 |
# pylint: disable-msg=E1101 |
1795 | 70 |
memcache.add(memcache_key, data, retention) |
71 |
||
72 |
||
73 |
def flush(model, filter): |
|
74 |
"""Removes the data for the current user from the memcache. |
|
75 |
""" |
|
76 |
||
77 |
memcache_key = key(model, filter) |
|
2365
a66e1dd8ced7
Add pylint: disable-msg= where needed in Melange modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
2187
diff
changeset
|
78 |
# pylint: disable-msg=E1101 |
1795 | 79 |
memcache.delete(memcache_key) |
80 |
||
81 |
||
82 |
# define the cache function |
|
83 |
cache = soc.cache.base.getCacher(get, put) |