Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3785)

Unified Diff: chrome/common/extensions/docs/server2/object_store_creator.py

Issue 14856006: Docserver: achieve online vs offline (cron vs instance) behaviour at the object (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/docs/server2/object_store_creator.py
diff --git a/chrome/common/extensions/docs/server2/object_store_creator.py b/chrome/common/extensions/docs/server2/object_store_creator.py
index c21627331e235acd2677c795bb77e2d6008a87f4..25f11a5a440f7f398b5c85ffdf89250fe9aad14f 100644
--- a/chrome/common/extensions/docs/server2/object_store_creator.py
+++ b/chrome/common/extensions/docs/server2/object_store_creator.py
@@ -8,6 +8,16 @@ from test_object_store import TestObjectStore
from persistent_object_store import PersistentObjectStore
class ObjectStoreCreator(object):
+ # Start configurations.
+ #
+ # START_POPULATED should be used to continue using whatever has been
+ # cached/persisted in the object stores. This is useful for live instances.
+ #
+ # START_EMPTY should be used when the data in the stores might be stale. This
+ # is useful for cron jobs where we want to refresh the data in a generic way.
+ START_POPULATED = (None,)
+ START_EMPTY = (None,)
+
class Factory(object):
'''Parameters:
- |branch| The branch to create object stores for. This becomes part of the
@@ -15,22 +25,26 @@ class ObjectStoreCreator(object):
- |start_empty| Whether the caching object store that gets created should
start empty, or start with the content of its delegate object stores.
'''
- def __init__(self, app_version, branch):
+ def __init__(self, app_version, branch, start_configuration):
self._app_version = app_version
self._branch = branch
+ self._start_configuration = start_configuration
def Create(self, cls, store_type=None):
return ObjectStoreCreator(cls,
self._app_version,
self._branch,
+ self._start_configuration,
store_type=store_type)
class SharedFactory(object):
'''A |Factory| for creating object stores shared across branches.
'''
- def __init__(self, app_version):
- # TODO(kalman): Pass in (app_version, None) here.
- self._factory = ObjectStoreCreator.Factory(app_version, 'shared')
+ def __init__(self, app_version, start_configuration):
+ self._factory = ObjectStoreCreator.Factory(app_version,
+ # TODO(kalman): Pass None here.
+ 'shared',
+ start_configuration)
def Create(self, cls, store_type=None):
return self._factory.Create(cls, store_type=store_type)
@@ -39,12 +53,14 @@ class ObjectStoreCreator(object):
'''A |Factory| for creating object stores shared across all branches and
app versions.
'''
- def __init__(self):
+ def __init__(self, start_configuration):
# TODO(kalman): Pass in (None, None) here.
- self._factory = ObjectStoreCreator.Factory('all', 'shared')
+ self._factory = ObjectStoreCreator.Factory('all',
+ 'shared',
+ start_configuration)
- def Create(self, cls, store_type=None):
- return self._factory.Create(cls, store_type=store_type)
+ def Create(self, cls):
+ return self._factory.Create(cls)
class TestFactory(object):
'''A |Factory| for creating object stores for tests, with fake defaults.
@@ -53,14 +69,26 @@ class ObjectStoreCreator(object):
# TODO(kalman): make these version=None and branch=None.
version='test-version',
branch='test-branch',
+ start_configuration=None,
store_type=TestObjectStore):
- self._factory = ObjectStoreCreator.Factory(version, branch)
+ # It's unlikely that tests will use a store_type that cares about
+ # starting empty.
+ start_configuration = (start_configuration or
+ ObjectStoreCreator.START_POPULATED)
+ self._factory = ObjectStoreCreator.Factory(version,
+ branch,
+ start_configuration)
self._store_type = store_type
def Create(self, cls):
return self._factory.Create(cls, store_type=self._store_type)
- def __init__(self, cls, app_version, branch, store_type=None):
+ def __init__(self,
+ cls,
+ app_version,
+ branch,
+ start_configuration,
+ store_type=None):
'''Creates stores with a top-level namespace given by the name of |cls|
combined with |branch|. Set an explicit |store_type| if necessary for tests.
@@ -71,17 +99,28 @@ class ObjectStoreCreator(object):
assert isinstance(cls, type)
assert not cls.__name__[0].islower() # guard against non-class types
self._name = '%s/%s@%s' % (app_version, cls.__name__, branch)
+ self._start_configuration = start_configuration
self._store_type = store_type
- def Create(self, category=None, start_empty=False):
+ def Create(self, category=None, start_configuration=None):
'''Creates a new object store with the top namespace given in the
constructor with an optional |category| for classes that need multiple
object stores (e.g. one for stat and one for read).
+ Allow overriding |start_configuration| for special cases. Generally, stick
+ with the one that was given in the constructor.
'''
namespace = self._name
if category is not None:
assert not any(c.isdigit() for c in category)
namespace = '%s/%s' % (namespace, category)
+ start_configuration = start_configuration or self._start_configuration
+ if start_configuration is ObjectStoreCreator.START_POPULATED:
+ start_empty = False
+ elif start_configuration is ObjectStoreCreator.START_EMPTY:
+ start_empty = True
+ else:
+ raise ValueError('%s is not a supported start configuration' %
+ start_configuration)
if self._store_type is not None:
return self._store_type(namespace, start_empty=start_empty)
return CacheChainObjectStore(

Powered by Google App Engine
This is Rietveld 408576698