blob: f477e53eabb34e29a39bd1e6df1b357832486178 [file] [log] [blame]
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This will attempt to import the actual App Engine modules, and if it fails,
# they will be replaced with fake modules. This is useful during testing.
try:
import google.appengine.api.memcache as memcache
except ImportError:
class _RPC(object):
def __init__(self, result=None):
self.result = result
def get_result(self):
return self.result
def wait(self):
pass
class InMemoryMemcache(object):
"""An in-memory memcache implementation.
"""
def __init__(self):
self._namespaces = {}
class Client(object):
def set_multi_async(self, mapping, namespace='', time=0):
return _RPC(result=dict(
(k, memcache.set(k, v, namespace=namespace, time=time))
for k, v in mapping.iteritems()))
def get_multi_async(self, keys, namespace='', time=0):
return _RPC(result=dict(
(k, memcache.get(k, namespace=namespace, time=time)) for k in keys))
def set(self, key, value, namespace='', time=0):
self._GetNamespace(namespace)[key] = value
def get(self, key, namespace='', time=0):
return self._GetNamespace(namespace).get(key)
def delete(self, key, namespace=''):
self._GetNamespace(namespace).pop(key, None)
def delete_multi(self, keys, namespace=''):
for k in keys:
self.delete(k, namespace=namespace)
def _GetNamespace(self, namespace):
if namespace not in self._namespaces:
self._namespaces[namespace] = {}
return self._namespaces[namespace]
def flush_all(self):
self._namespaces = {}
return False
memcache = InMemoryMemcache()