app/soc/cache/logic.py
changeset 1958 8e8f45dd46e3
parent 1795 336c35c82b87
child 2070 9555be8634a3
equal deleted inserted replaced
1957:972758a2682f 1958:8e8f45dd46e3
    21     '"Sverre Rabbelier" <sverre@rabbelier.nl>',
    21     '"Sverre Rabbelier" <sverre@rabbelier.nl>',
    22   ]
    22   ]
    23 
    23 
    24 
    24 
    25 from google.appengine.api import memcache
    25 from google.appengine.api import memcache
       
    26 from google.appengine.ext import db
    26 
    27 
    27 import soc.cache.base
    28 import soc.cache.base
    28 
    29 
    29 
    30 
    30 def key(model, filter):
    31 def key(model, filter, order):
    31   """Returns the memcache key for this query.
    32   """Returns the memcache key for this query.
    32   """
    33   """
    33 
    34 
    34   return 'query_for_%s_%s' % (repr(model.kind()), repr(filter))
    35   new_filter = {}
       
    36 
       
    37   for key, value in filter.iteritems():
       
    38     new_value = value.key().name() if isinstance(value, db.Model) else value
       
    39     new_filter[key] = new_value
       
    40 
       
    41   return 'query_for_%(kind)s_%(filter)s_%(order)s' % {
       
    42       'kind': repr(model.kind()),
       
    43       'filter': repr(new_filter),
       
    44       'order': repr(order),
       
    45       }
    35 
    46 
    36 
    47 
    37 def get(model, filter, *args, **kwargs):
    48 def get(model, filter, order, *args, **kwargs):
    38   """Retrieves the data for the specified query from the memcache.
    49   """Retrieves the data for the specified query from the memcache.
    39   """
    50   """
    40 
    51 
    41   memcache_key = key(model, filter)
    52   memcache_key = key(model, filter, order)
    42   import logging; logging.info(memcache_key)
       
    43   return memcache.get(memcache_key), memcache_key
    53   return memcache.get(memcache_key), memcache_key
    44 
    54 
    45 
    55 
    46 def put(data, memcache_key, *args, **kwargs):
    56 def put(data, memcache_key, *args, **kwargs):
    47   """Sets the data for the specified query in the memcache.
    57   """Sets the data for the specified query in the memcache.
    50     data: the data to be cached
    60     data: the data to be cached
    51   """
    61   """
    52 
    62 
    53   # Store data for fifteen minutes to force a refresh every so often
    63   # Store data for fifteen minutes to force a refresh every so often
    54   retention = 15*60
    64   retention = 15*60
    55 
       
    56   memcache.add(memcache_key, data, retention)
    65   memcache.add(memcache_key, data, retention)
    57 
    66 
    58 
    67 
    59 def flush(model, filter):
    68 def flush(model, filter):
    60   """Removes the data for the current user from the memcache.
    69   """Removes the data for the current user from the memcache.