Home | History | Annotate | Download | only in server2
      1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import logging
      6 
      7 from appengine_wrappers import memcache
      8 from object_store import ObjectStore
      9 
     10 class _AsyncMemcacheGetFuture(object):
     11   def __init__(self, rpc):
     12     self._rpc = rpc
     13 
     14   def Get(self):
     15     return self._rpc.get_result()
     16 
     17 class MemcacheObjectStore(ObjectStore):
     18   def __init__(self, namespace):
     19     self._namespace = namespace
     20 
     21   def SetMulti(self, mapping):
     22     # talking_alarm_clock always fails because the zip is too big.
     23     # TODO(kalman): store example zips in blobstore.
     24     if any(key.find('talking_alarm_clock') != -1 for key in mapping.iterkeys()):
     25       return
     26     try:
     27       memcache.Client().set_multi_async(mapping, namespace=self._namespace)
     28     except ValueError as e:
     29       logging.error('Caught "ValueError: %s" when mapping keys %s' % (
     30           e, mapping.keys()))
     31 
     32   def GetMulti(self, keys):
     33     rpc = memcache.Client().get_multi_async(keys, namespace=self._namespace)
     34     return _AsyncMemcacheGetFuture(rpc)
     35 
     36   def DelMulti(self, keys):
     37     memcache.delete_multi(keys, namespace=self._namespace)
     38