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.
7 from appengine_wrappers
import memcache
8 from object_store
import ObjectStore
10 class _AsyncMemcacheGetFuture(object):
11 def __init__(self
, rpc
):
15 return self
._rpc
.get_result()
17 class MemcacheObjectStore(ObjectStore
):
18 def __init__(self
, namespace
):
19 self
._namespace
= namespace
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()):
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' % (
32 def GetMulti(self
, keys
):
33 rpc
= memcache
.Client().get_multi_async(keys
, namespace
=self
._namespace
)
34 return _AsyncMemcacheGetFuture(rpc
)
36 def DelMulti(self
, keys
):
37 memcache
.delete_multi(keys
, namespace
=self
._namespace
)