Chromium Code Reviews| 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 5366e322aab36e29ee9ef66779b8c08aaf2485a2..16f1803b92d82a4f76e2cbf7e9ff54f8639bd895 100644 |
| --- a/chrome/common/extensions/docs/server2/appengine_wrappers.py |
| +++ b/chrome/common/extensions/docs/server2/appengine_wrappers.py |
| @@ -14,6 +14,7 @@ try: |
| import google.appengine.api.urlfetch as urlfetch |
| except ImportError: |
| import re |
| + from StringIO import StringIO |
| FAKE_URL_FETCHER_CONFIGURATION = None |
| @@ -67,8 +68,51 @@ except ImportError: |
| def __getattr__(self, attr): |
| raise NotImplementedError() |
| - blobstore = NotImplemented() |
| - files = NotImplemented() |
| + BLOBS = {} |
|
not at google - send to devlin
2012/08/22 13:57:58
_BLOBS?
cduvall
2012/08/22 17:20:43
Done.
|
| + KEY = 1 |
|
not at google - send to devlin
2012/08/22 13:57:58
can you put this on FakeFiles, and call it _next_b
cduvall
2012/08/22 17:20:43
Done.
|
| + class FakeBlobstore(object): |
| + class BlobReader(object): |
| + def __init__(self, blob_key): |
| + self._data = BLOBS[blob_key].getvalue() |
| + |
| + def read(self): |
| + return self._data |
| + |
| + blobstore = FakeBlobstore() |
| + |
| + class FakeStringIO(StringIO): |
|
not at google - send to devlin
2012/08/22 13:57:58
using just a normal StringIO isn't enough where th
cduvall
2012/08/22 17:20:43
Done.
|
| + def __init__(self, io): |
| + self._io = io |
| + |
| + def __exit__(self, *args): |
| + pass |
| + |
| + def write(self, data): |
| + self._io.write(data) |
| + |
| + def __enter__(self, *args): |
| + return self._io |
| + |
| + class FakeFiles(object): |
| + class blobstore(object): |
| + @staticmethod |
| + def create(): |
| + global KEY |
| + KEY += 1 |
| + return KEY |
| + |
| + @staticmethod |
| + def get_blob_key(filename): |
| + return filename |
| + |
| + def open(self, filename, mode): |
| + BLOBS[filename] = StringIO() |
| + return FakeStringIO(BLOBS[filename]) |
| + |
| + def finalize(self, filename): |
| + pass |
| + |
| + files = FakeFiles() |
| class InMemoryMemcache(object): |
| """A fake memcache that does nothing. |
| @@ -88,6 +132,7 @@ except ImportError: |
| def delete(self, key, namespace): |
| return |
| + |
| memcache = InMemoryMemcache() |
| class webapp(object): |
| @@ -102,17 +147,32 @@ except ImportError: |
| self.request.path = path |
| class _Db_Result(object): |
| + def __init__(self, data): |
| + self._data = data |
| + |
| + class _Result(object): |
| + def __init__(self, value): |
| + self.value = value |
| + |
| def get(self): |
| - return [] |
| + return self._Result(self._data) |
| + DB = {} |
|
not at google - send to devlin
2012/08/22 13:57:58
put on the db or Model class, call _store or somet
cduvall
2012/08/22 17:20:43
Done.
|
| class db(object): |
| class StringProperty(object): |
| pass |
| class Model(object): |
| + def __init__(self, key_='', value=''): |
| + self._key = key_ |
| + self._value = value |
| + |
| @staticmethod |
| - def gql(*args): |
| - return _Db_Result() |
| + def gql(query, key): |
| + return _Db_Result(DB.get(key, None)) |
| + |
| + def put(self): |
| + DB[self._key] = self._value |
| class BlobReferenceProperty(object): |
| pass |