| Index: chrome/common/extensions/docs/server2/server_instance.py
|
| diff --git a/chrome/common/extensions/docs/server2/server_instance.py b/chrome/common/extensions/docs/server2/server_instance.py
|
| index 0bf7eb1313aa7c3e22714e9ca3372845c81189a3..8c5e1b69e180ad2d89212fe562cd5a247cd94777 100644
|
| --- a/chrome/common/extensions/docs/server2/server_instance.py
|
| +++ b/chrome/common/extensions/docs/server2/server_instance.py
|
| @@ -11,15 +11,15 @@ from api_list_data_source import APIListDataSource
|
| from appengine_blobstore import AppEngineBlobstore
|
| from appengine_url_fetcher import AppEngineUrlFetcher
|
| from branch_utility import BranchUtility
|
| +from caching_file_system import CachingFileSystem
|
| from compiled_file_system import CompiledFileSystem
|
| from example_zipper import ExampleZipper
|
| from file_system import FileNotFoundError
|
| from github_file_system import GithubFileSystem
|
| -from in_memory_object_store import InMemoryObjectStore
|
| from intro_data_source import IntroDataSource
|
| from local_file_system import LocalFileSystem
|
| -from caching_file_system import CachingFileSystem
|
| from object_store_creator import ObjectStoreCreator
|
| +from offline_file_system import OfflineFileSystem
|
| from path_canonicalizer import PathCanonicalizer
|
| from reference_resolver import ReferenceResolver
|
| from samples_data_source import SamplesDataSource
|
| @@ -27,6 +27,7 @@ from sidenav_data_source import SidenavDataSource
|
| from subversion_file_system import SubversionFileSystem
|
| import svn_constants
|
| from template_data_source import TemplateDataSource
|
| +from third_party.json_schema_compiler.memoize import memoize
|
| from third_party.json_schema_compiler.model import UnixName
|
| import url_constants
|
|
|
| @@ -35,32 +36,43 @@ def _IsBinaryMimetype(mimetype):
|
| for prefix in ['audio', 'image', 'video'])
|
|
|
| class ServerInstance(object):
|
| - '''Per-instance per-branch state.
|
| - '''
|
| - _instances = {}
|
| -
|
| + # Lazily create so we don't create github file systems unnecessarily in
|
| + # tests.
|
| branch_utility = None
|
| github_file_system = None
|
|
|
| @staticmethod
|
| - def GetOrCreate(channel):
|
| - # Lazily create so that we don't do unnecessary work in tests.
|
| - if ServerInstance.branch_utility is None:
|
| - ServerInstance.branch_utility = BranchUtility(
|
| - url_constants.OMAHA_PROXY_URL, AppEngineUrlFetcher())
|
| - branch = ServerInstance.branch_utility.GetBranchNumberForChannelName(
|
| - channel)
|
| -
|
| - # Use the branch as the key to |_instances| since the branch data is
|
| - # predictable while the channel data (channels can swich branches) isn't.
|
| - instance = ServerInstance._instances.get(branch)
|
| - if instance is None:
|
| - instance = ServerInstance._CreateForProduction(channel, branch)
|
| - ServerInstance._instances[branch] = instance
|
| - return instance
|
| + @memoize
|
| + def GetOrCreateOffline(channel):
|
| + '''Gets/creates a local ServerInstance, meaning that only resources local to
|
| + the server - memcache, object store, etc, are queried. This amounts to not
|
| + setting up the subversion nor github file systems.
|
| + '''
|
| + branch_utility = ServerInstance._GetOrCreateBranchUtility()
|
| + branch = branch_utility.GetBranchNumberForChannelName(channel)
|
| + object_store_creator_factory = ObjectStoreCreator.Factory(branch)
|
| + # No svn nor github file systems. Rely on the crons to fill the caches, and
|
| + # for the caches to exist.
|
| + return ServerInstance(
|
| + channel,
|
| + object_store_creator_factory,
|
| + CachingFileSystem(OfflineFileSystem(SubversionFileSystem),
|
| + object_store_creator_factory),
|
| + # TODO(kalman): convert GithubFileSystem to be wrappable in a
|
| + # CachingFileSystem so that it can be replaced with an
|
| + # OfflineFileSystem. Currently GFS doesn't set the child versions of
|
| + # stat requests so it doesn't.
|
| + ServerInstance._GetOrCreateGithubFileSystem())
|
|
|
| @staticmethod
|
| - def _CreateForProduction(channel, branch):
|
| + @memoize
|
| + def GetOrCreateOnline(channel):
|
| + '''Creates/creates an online server instance, meaning that both local and
|
| + subversion/github resources are queried.
|
| + '''
|
| + branch_utility = ServerInstance._GetOrCreateBranchUtility()
|
| + branch = branch_utility.GetBranchNumberForChannelName(channel)
|
| +
|
| if branch == 'trunk':
|
| svn_url = '/'.join((url_constants.SVN_TRUNK_URL,
|
| 'src',
|
| @@ -81,17 +93,10 @@ class ServerInstance(object):
|
| AppEngineUrlFetcher(viewvc_url)),
|
| object_store_creator_factory)
|
|
|
| - # Lazily create so we don't create github file systems unnecessarily in
|
| - # tests.
|
| - if ServerInstance.github_file_system is None:
|
| - ServerInstance.github_file_system = GithubFileSystem(
|
| - AppEngineUrlFetcher(url_constants.GITHUB_URL),
|
| - AppEngineBlobstore())
|
| -
|
| return ServerInstance(channel,
|
| object_store_creator_factory,
|
| svn_file_system,
|
| - ServerInstance.github_file_system)
|
| + ServerInstance._GetOrCreateGithubFileSystem())
|
|
|
| @staticmethod
|
| def CreateForTest(file_system):
|
| @@ -100,6 +105,22 @@ class ServerInstance(object):
|
| file_system,
|
| None)
|
|
|
| + @staticmethod
|
| + def _GetOrCreateBranchUtility():
|
| + if ServerInstance.branch_utility is None:
|
| + ServerInstance.branch_utility = BranchUtility(
|
| + url_constants.OMAHA_PROXY_URL,
|
| + AppEngineUrlFetcher())
|
| + return ServerInstance.branch_utility
|
| +
|
| + @staticmethod
|
| + def _GetOrCreateGithubFileSystem():
|
| + if ServerInstance.github_file_system is None:
|
| + ServerInstance.github_file_system = GithubFileSystem(
|
| + AppEngineUrlFetcher(url_constants.GITHUB_URL),
|
| + AppEngineBlobstore())
|
| + return ServerInstance.github_file_system
|
| +
|
| def __init__(self,
|
| channel,
|
| object_store_creator_factory,
|
|
|