Chromium Code Reviews| Index: chrome/common/extensions/docs/server2/persistent_object_store.py |
| diff --git a/chrome/common/extensions/docs/server2/persistent_object_store.py b/chrome/common/extensions/docs/server2/persistent_object_store.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..c768c79533c1fcf2db8271aedbfd1813aaf06e58 |
| --- /dev/null |
| +++ b/chrome/common/extensions/docs/server2/persistent_object_store.py |
| @@ -0,0 +1,61 @@ |
| +# Copyright 2013 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. |
| + |
| +from appengine_wrappers import db, IsDevServer |
| +from datastore_models import PersistentObjectStoreItem |
| +from future import Future |
| +import logging |
| +from object_store import ObjectStore |
| + |
| +def log(s): |
|
cduvall
2013/04/17 23:30:37
take out
not at google - send to devlin
2013/04/18 04:05:41
Done.
|
| + print(s) |
| + logging.error(s) |
| + |
| +class _AsyncGetFuture(object): |
| + def __init__(self, object_store, keys): |
| + self._futures = dict( |
| + (k, db.get_async( |
| + PersistentObjectStoreItem.CreateKey(object_store._namespace, k))) |
| + for k in keys) |
| + |
| + def Get(self): |
| + def has_result(key, future): |
| + return future.get_result() is not None |
| + #if future.get_result() is None: |
|
cduvall
2013/04/17 23:30:37
take out
not at google - send to devlin
2013/04/18 04:05:41
Done.
not at google - send to devlin
2013/04/18 04:05:41
Done.
|
| + # log('NO: %s' % key) |
| + # return False |
| + #log('YES: %s' % key) |
| + #return True |
| + return dict((key, future.get_result().GetValue()) |
| + for key, future in self._futures.iteritems() |
| + if has_result(key, future)) |
| + |
| +class PersistentObjectStore(ObjectStore): |
| + '''Stores data persistently using the AppEngine Datastore API. |
| + ''' |
| + def __init__(self, namespace): |
| + self._namespace = namespace |
| + |
| + def SetMulti(self, mapping): |
| + futures = [] |
| + for key, value in mapping.items(): |
| + futures.append(db.put_async( |
| + PersistentObjectStoreItem.CreateItem(self._namespace, key, value))) |
| + # If running the dev server, the futures don't complete until the server is |
| + # *quitting*. This is annoying. Flush now. |
| + if IsDevServer(): |
| + [future.wait() for future in futures] |
| + |
| + def GetMulti(self, keys): |
| + return Future(delegate=_AsyncGetFuture(self, keys)) |
| + |
| + def DelMulti(self, keys): |
| + futures = [] |
| + for key in keys: |
| + futures.append(db.delete_async( |
| + PersistentObjectStoreItem.CreateKey(self._namespace, key))) |
| + # If running the dev server, the futures don't complete until the server is |
| + # *quitting*. This is annoying. Flush now. |
| + if IsDevServer(): |
| + [future.wait() for future in futures] |