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

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

Issue 12996003: Dynamically generate a heading for Extension Docs API pages (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing issues with experimental_APIs Created 7 years, 9 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/handler.py
diff --git a/chrome/common/extensions/docs/server2/handler.py b/chrome/common/extensions/docs/server2/handler.py
index 1adb106ea9aa53766fb8586933ff5dd2a3af36f9..b910bda4a31c1310641230b1e62f5e7601e640ac 100644
--- a/chrome/common/extensions/docs/server2/handler.py
+++ b/chrome/common/extensions/docs/server2/handler.py
@@ -14,13 +14,15 @@ from appengine_wrappers import urlfetch
from api_data_source import APIDataSource
from api_list_data_source import APIListDataSource
from appengine_blobstore import AppEngineBlobstore
-from in_memory_object_store import InMemoryObjectStore
from appengine_url_fetcher import AppEngineUrlFetcher
+from availability_data_source import AvailabilityDataSource
from branch_utility import BranchUtility
-from example_zipper import ExampleZipper
+from chrome_version_data_source import ChromeVersionDataSource
from compiled_file_system import CompiledFileSystem
import compiled_file_system as compiled_fs
+from example_zipper import ExampleZipper
from github_file_system import GithubFileSystem
+from in_memory_object_store import InMemoryObjectStore
from intro_data_source import IntroDataSource
from known_issues_data_source import KnownIssuesDataSource
from local_file_system import LocalFileSystem
@@ -36,7 +38,7 @@ import url_constants
# Increment this version to force the server to reload all pages in the first
# cron job that is run.
-_VERSION = 1
+_VERSION = 2
# The default channel to serve docs for if no channel is specified.
_DEFAULT_CHANNEL = 'stable'
@@ -46,6 +48,9 @@ BRANCH_UTILITY = BranchUtility(url_constants.OMAHA_PROXY_URL,
AppEngineUrlFetcher(None),
BRANCH_UTILITY_MEMCACHE)
+AVAILABILITY_DATA_SOURCE_MEMCACHE = InMemoryObjectStore(
+ 'availability_data_source')
+
GITHUB_MEMCACHE = InMemoryObjectStore('github')
GITHUB_FILE_SYSTEM = GithubFileSystem(
AppEngineUrlFetcher(url_constants.GITHUB_URL),
@@ -84,7 +89,89 @@ def _CreateMemcacheFileSystem(branch, branch_memcache):
return MemcacheFileSystem(SubversionFileSystem(fetcher, stat_fetcher),
branch_memcache)
-_default_branch = BRANCH_UTILITY.GetBranchNumberForChannelName(_DEFAULT_CHANNEL)
+def _CreateAPIDataSourceForBranch(branch_number):
+ return _CreateObjectsForBranch(branch_number, None)
+
+def _CreateInstanceForBranch(branch_number, channel_info):
+ return _CreateObjectsForBranch(branch_number, channel_info)
+
+def _CreateObjectsForBranch(branch_number, channel_info=None):
+ """Passed to the global instance of chrome_version_data_source, and also used
+ in _GetInstanceForBranch. Allows for the creation of api_data_sources linked
+ to |branch_number|, which is the maximum branch number from a given version of
+ chrome, and the creation of a branch instance.
+ """
+ channel_name = _DEFAULT_CHANNEL
+ availability_data_source = None
+ instance = None
+
+ if channel_info is not None:
+ channel_name = channel_info['name']
+ availability_data_source = AvailabilityDataSource(
+ CHROME_VERSION_DATA_SOURCE,
+ channel_info['version'],
+ AVAILABILITY_DATA_SOURCE_MEMCACHE)
+
+ branch_memcache = InMemoryObjectStore(branch_number)
+ file_system = _CreateMemcacheFileSystem(branch_number, branch_memcache)
+ cache_factory = CompiledFileSystem.Factory(file_system, branch_memcache)
+ api_list_data_source_factory = APIListDataSource.Factory(
+ cache_factory,
+ file_system,
+ API_PATH,
+ PUBLIC_TEMPLATE_PATH)
+ api_data_source_factory = APIDataSource.Factory(cache_factory,
+ API_PATH,
+ availability_data_source)
+ # Give the ReferenceResolver a memcache, to speed up the lookup of
+ # duplicate $refs.
+ ref_resolver_factory = ReferenceResolver.Factory(
+ api_data_source_factory,
+ api_list_data_source_factory,
+ branch_memcache)
+ api_data_source_factory.SetReferenceResolverFactory(ref_resolver_factory)
+ samples_data_source_factory = SamplesDataSource.Factory(
+ channel_name,
+ file_system,
+ GITHUB_FILE_SYSTEM,
+ cache_factory,
+ GITHUB_COMPILED_FILE_SYSTEM,
+ ref_resolver_factory,
+ EXAMPLES_PATH)
+ api_data_source_factory.SetSamplesDataSourceFactory(
+ samples_data_source_factory)
+
+ if channel_info is not None:
+ intro_data_source_factory = IntroDataSource.Factory(
+ cache_factory,
+ ref_resolver_factory,
+ [INTRO_PATH, ARTICLE_PATH])
+ sidenav_data_source_factory = SidenavDataSource.Factory(cache_factory,
+ JSON_PATH)
+ template_data_source_factory = TemplateDataSource.Factory(
+ channel_name,
+ api_data_source_factory,
+ api_list_data_source_factory,
+ intro_data_source_factory,
+ samples_data_source_factory,
+ KNOWN_ISSUES_DATA_SOURCE,
+ sidenav_data_source_factory,
+ cache_factory,
+ ref_resolver_factory,
+ PUBLIC_TEMPLATE_PATH,
+ PRIVATE_TEMPLATE_PATH,
+ BRANCH_UTILITY.GetChannelInfoForAllChannels())
+ example_zipper = ExampleZipper(file_system,
+ cache_factory,
+ DOCS_PATH)
+ instance = ServerInstance(template_data_source_factory,
+ example_zipper,
+ cache_factory)
+ return instance
+ return api_data_source_factory.Create(None)
+
+_default_branch = BRANCH_UTILITY.GetChannelInfoForChannelName(
+ _DEFAULT_CHANNEL)['branch']
APPS_MEMCACHE = InMemoryObjectStore(_default_branch)
APPS_FILE_SYSTEM = _CreateMemcacheFileSystem(_default_branch, APPS_MEMCACHE)
APPS_COMPILED_FILE_SYSTEM = CompiledFileSystem.Factory(
@@ -102,11 +189,21 @@ KNOWN_ISSUES_DATA_SOURCE = KnownIssuesDataSource(
InMemoryObjectStore('KnownIssues'),
AppEngineUrlFetcher(None))
+CHROME_VERSION_DATA_SOURCE_MEMCACHE = InMemoryObjectStore(
+ 'chrome_version_data_source')
+CHROME_VERSION_DATA_SOURCE = ChromeVersionDataSource(
+ url_constants.OMAHA_BETA_HISTORY,
+ AppEngineUrlFetcher(None),
+ CHROME_VERSION_DATA_SOURCE_MEMCACHE,
cduvall 2013/03/28 22:18:35 Just construct this inline
epeterson 2013/03/28 23:50:36 Done. And why didn't everything just have a 4-spac
+ _CreateAPIDataSourceForBranch)
+
def _MakeInstanceKey(branch, number):
return '%s/%s' % (branch, number)
def _GetInstanceForBranch(channel_name, local_path):
- branch = BRANCH_UTILITY.GetBranchNumberForChannelName(channel_name)
+ channel_info = BRANCH_UTILITY.GetChannelInfoForChannelName(
+ channel_name)
+ branch = channel_info['branch']
# The key for the server is a tuple of |channel_name| with |branch|, since
# sometimes stable and beta point to the same branch.
@@ -115,60 +212,9 @@ def _GetInstanceForBranch(channel_name, local_path):
if instance is not None:
return instance
- branch_memcache = InMemoryObjectStore(branch)
- file_system = _CreateMemcacheFileSystem(branch, branch_memcache)
- cache_factory = CompiledFileSystem.Factory(file_system, branch_memcache)
- api_list_data_source_factory = APIListDataSource.Factory(cache_factory,
- file_system,
- API_PATH,
- PUBLIC_TEMPLATE_PATH)
- api_data_source_factory = APIDataSource.Factory(
- cache_factory,
- API_PATH)
-
- # Give the ReferenceResolver a memcache, to speed up the lookup of
- # duplicate $refs.
- ref_resolver_factory = ReferenceResolver.Factory(
- api_data_source_factory,
- api_list_data_source_factory,
- branch_memcache)
- api_data_source_factory.SetReferenceResolverFactory(ref_resolver_factory)
- samples_data_source_factory = SamplesDataSource.Factory(
- channel_name,
- file_system,
- GITHUB_FILE_SYSTEM,
- cache_factory,
- GITHUB_COMPILED_FILE_SYSTEM,
- ref_resolver_factory,
- EXAMPLES_PATH)
- api_data_source_factory.SetSamplesDataSourceFactory(
- samples_data_source_factory)
- intro_data_source_factory = IntroDataSource.Factory(
- cache_factory,
- ref_resolver_factory,
- [INTRO_PATH, ARTICLE_PATH])
- sidenav_data_source_factory = SidenavDataSource.Factory(cache_factory,
- JSON_PATH)
- template_data_source_factory = TemplateDataSource.Factory(
- channel_name,
- api_data_source_factory,
- api_list_data_source_factory,
- intro_data_source_factory,
- samples_data_source_factory,
- KNOWN_ISSUES_DATA_SOURCE,
- sidenav_data_source_factory,
- cache_factory,
- ref_resolver_factory,
- PUBLIC_TEMPLATE_PATH,
- PRIVATE_TEMPLATE_PATH)
- example_zipper = ExampleZipper(file_system,
- cache_factory,
- DOCS_PATH)
-
- instance = ServerInstance(template_data_source_factory,
- example_zipper,
- cache_factory)
+ instance = _CreateInstanceForBranch(branch, channel_info)
SERVER_INSTANCES[instance_key] = instance
+
return instance
def _CleanBranches():
@@ -226,7 +272,6 @@ class Handler(webapp.RequestHandler):
_GetInstanceForBranch(channel_name, self._local_path).Get(real_path,
self.request,
self.response)
-
def _Render(self, files, channel):
original_response = self.response
for f in files:
@@ -266,7 +311,7 @@ class Handler(webapp.RequestHandler):
# be called. The same is then done separately with the apps samples page,
# since it pulls its data from Github.
channel = path.split('/')[-1]
- branch = BRANCH_UTILITY.GetBranchNumberForChannelName(channel)
+ branch = BRANCH_UTILITY.GetChannelInfoForChannelName(channel)['branch']
logging.info('Running cron job for %s.' % branch)
branch_memcache = InMemoryObjectStore(branch)
file_system = _CreateMemcacheFileSystem(branch, branch_memcache)

Powered by Google App Engine
This is Rietveld 408576698