| Index: chrome/common/extensions/docs/server2/appengine_wrappers.py
|
| diff --git a/chrome/common/extensions/docs/server2/appengine_wrappers.py b/chrome/common/extensions/docs/server2/appengine_wrappers.py
|
| index 9cbdbd435f990f4e50d04246b40647f4916fe58a..395747114ba00bfe6817e50ae840c7fca9d95125 100644
|
| --- a/chrome/common/extensions/docs/server2/appengine_wrappers.py
|
| +++ b/chrome/common/extensions/docs/server2/appengine_wrappers.py
|
| @@ -4,13 +4,55 @@
|
|
|
| # 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.
|
| +
|
| +import time
|
| +
|
| +class InMemoryMemcache(object):
|
| + """A memcache that stores items in memory instead of using the memcache
|
| + module.
|
| + """
|
| + class _CacheEntry(object):
|
| + def __init__(self, value, expire_time):
|
| + self.value = value
|
| + self._never_expires = (expire_time == 0)
|
| + self._expiry = time.time() + expire_time
|
| +
|
| + def HasExpired(self):
|
| + if self._never_expires:
|
| + return False
|
| + return time.time() > self._expiry
|
| +
|
| + def __init__(self):
|
| + self._cache = {}
|
| +
|
| + def set(self, key, value, namespace, time=60):
|
| + if namespace not in self._cache:
|
| + self._cache[namespace] = {}
|
| + self._cache[namespace][key] = self._CacheEntry(value, time)
|
| +
|
| + def get(self, key, namespace):
|
| + if namespace not in self._cache:
|
| + return None
|
| + cache_entry = self._cache[namespace].get(key, None)
|
| + if not cache_entry:
|
| + return None
|
| + if cache_entry.HasExpired():
|
| + self.delete(key, namespace)
|
| + return None
|
| + return cache_entry.value
|
| +
|
| + def delete(self, key, namespace):
|
| + if namespace in self._cache:
|
| + self._cache[namespace].pop(key)
|
| +
|
| try:
|
| import google.appengine.ext.blobstore as blobstore
|
| from google.appengine.ext.blobstore.blobstore import BlobReferenceProperty
|
| import google.appengine.ext.db as db
|
| import google.appengine.ext.webapp as webapp
|
| import google.appengine.api.files as files
|
| - import google.appengine.api.memcache as memcache
|
| + #import google.appengine.api.memcache as memcache
|
| + memcache = InMemoryMemcache()
|
| import google.appengine.api.urlfetch as urlfetch
|
| except ImportError:
|
| import re
|
| @@ -73,26 +115,6 @@ except ImportError:
|
| blobstore = NotImplemented()
|
| files = NotImplemented()
|
|
|
| - class InMemoryMemcache(object):
|
| - """A memcache that stores items in memory instead of using the memcache
|
| - module.
|
| - """
|
| - def __init__(self):
|
| - self._cache = {}
|
| -
|
| - def set(self, key, value, namespace, time=60):
|
| - if namespace not in self._cache:
|
| - self._cache[namespace] = {}
|
| - self._cache[namespace][key] = value
|
| -
|
| - def get(self, key, namespace):
|
| - if namespace not in self._cache:
|
| - return None
|
| - return self._cache[namespace].get(key, None)
|
| -
|
| - def delete(self, key, namespace):
|
| - if namespace in self._cache:
|
| - self._cache[namespace].pop(key)
|
| memcache = InMemoryMemcache()
|
|
|
| # A fake webapp.RequestHandler class for Handler to extend.
|
|
|