- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / docs / server2 / memcache_object_store.py
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)