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. |