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

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

Issue 344453003: Docserver: separate models for apps and extensions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase/Add comment Created 6 years, 6 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/api_data_source.py
diff --git a/chrome/common/extensions/docs/server2/api_data_source.py b/chrome/common/extensions/docs/server2/api_data_source.py
index bdcbf26cd526f38a58b9229fad45c27536637f52..f81dbf2eee63e7b7100b0d15605bed44cc994e22 100644
--- a/chrome/common/extensions/docs/server2/api_data_source.py
+++ b/chrome/common/extensions/docs/server2/api_data_source.py
@@ -13,6 +13,7 @@ from environment import IsPreviewServer
from extensions_paths import JSON_TEMPLATES, PRIVATE_TEMPLATES
from file_system import FileNotFoundError
from future import Future, Collect
+from platform_util import GetPlatforms
import third_party.json_schema_compiler.json_parse as json_parse
import third_party.json_schema_compiler.model as model
from environment import IsPreviewServer
@@ -71,19 +72,19 @@ class _JSCModel(object):
def __init__(self,
namespace,
- availability_finder,
+ availability,
json_cache,
template_cache,
features_bundle,
- event_byname_function):
- self._availability_finder = availability_finder
+ event_byname_future):
+ self._availability = availability
self._api_availabilities = json_cache.GetFromFile(
posixpath.join(JSON_TEMPLATES, 'api_availabilities.json'))
self._intro_tables = json_cache.GetFromFile(
posixpath.join(JSON_TEMPLATES, 'intro_tables.json'))
self._api_features = features_bundle.GetAPIFeatures()
self._template_cache = template_cache
- self._event_byname_function = event_byname_function
+ self._event_byname_future = event_byname_future
self._namespace = namespace
def _GetLink(self, link):
@@ -115,12 +116,11 @@ class _JSCModel(object):
as_dict['byName'] = _GetByNameDict(as_dict)
return as_dict
- def _GetAPIAvailability(self):
- return self._availability_finder.GetAPIAvailability(self._namespace.name)
-
def _GetChannelWarning(self):
if not self._IsExperimental():
- return { self._GetAPIAvailability().channel_info.channel: True }
+ return {
+ self._availability.channel_info.channel: True
+ }
return None
def _IsExperimental(self):
@@ -190,8 +190,8 @@ class _JSCModel(object):
}
self._AddCommonProperties(event_dict, event)
# Add the Event members to each event in this object.
- if self._event_byname_function:
- event_dict['byName'].update(self._event_byname_function())
+ if self._event_byname_future:
+ event_dict['byName'].update(self._event_byname_future.Get())
# We need to create the method description for addListener based on the
# information stored in |event|.
if event.supports_listeners:
@@ -354,10 +354,9 @@ class _JSCModel(object):
version = None
scheduled = None
else:
- availability = self._GetAPIAvailability()
- status = availability.channel_info.channel
- version = availability.channel_info.version
- scheduled = availability.scheduled
+ status = self._availability.channel_info.channel
+ version = self._availability.channel_info.version
+ scheduled = self._availability.scheduled
return {
'title': 'Availability',
'content': [{
@@ -475,49 +474,50 @@ class APIDataSource(DataSource):
self._json_cache = server_instance.compiled_fs_factory.ForJson(file_system)
self._template_cache = server_instance.compiled_fs_factory.ForTemplates(
file_system)
- self._availability_finder = server_instance.availability_finder
- self._api_models = server_instance.api_models
- self._features_bundle = server_instance.features_bundle
+ self._platform_bundle = server_instance.platform_bundle
self._model_cache = server_instance.object_store_creator.Create(
APIDataSource,
# Update the models when any of templates, APIs, or Features change.
category=StringIdentity(self._json_cache.GetIdentity(),
self._template_cache.GetIdentity(),
- self._api_models.GetIdentity(),
- self._features_bundle.GetIdentity()))
+ self._platform_bundle.GetIdentity()))
# This caches the result of _LoadEventByName.
- self._event_byname = None
+ self._event_byname_futures = {}
self._samples = server_instance.samples_data_source_factory.Create(request)
- def _LoadEventByName(self):
+ def _LoadEventByName(self, platform):
'''All events have some members in common. We source their description
from Event in events.json.
'''
- if self._event_byname is None:
- self._event_byname = _GetEventByNameFromEvents(
- self._GetSchemaModel('events').Get())
- return self._event_byname
-
- def _GetSchemaModel(self, api_name):
- jsc_model_future = self._model_cache.Get(api_name)
- model_future = self._api_models.GetModel(api_name)
+ if platform not in self._event_byname_futures:
+ future = self._GetSchemaModel(platform, 'events')
+ self._event_byname_futures[platform] = Future(
+ callback=lambda: _GetEventByNameFromEvents(future.Get()))
+ return self._event_byname_futures[platform]
+
+ def _GetSchemaModel(self, platform, api_name):
+ object_store_key = '/'.join((platform, api_name))
+ jsc_model_future = self._model_cache.Get(object_store_key)
+ model_future = self._platform_bundle.GetAPIModels(platform).GetModel(
+ api_name)
def resolve():
jsc_model = jsc_model_future.Get()
if jsc_model is None:
jsc_model = _JSCModel(
model_future.Get(),
- self._availability_finder,
+ self._platform_bundle.GetAvailabilityFinder(
+ platform).GetAPIAvailability(api_name),
self._json_cache,
self._template_cache,
- self._features_bundle,
- self._LoadEventByName).ToDict()
- self._model_cache.Set(api_name, jsc_model)
+ self._platform_bundle.GetFeaturesBundle(platform),
+ self._LoadEventByName(platform)).ToDict()
+ self._model_cache.Set(object_store_key, jsc_model)
return jsc_model
return Future(callback=resolve)
- def _GetImpl(self, api_name):
- handlebar_dict_future = self._GetSchemaModel(api_name)
+ def _GetImpl(self, platform, api_name):
+ handlebar_dict_future = self._GetSchemaModel(platform, api_name)
def resolve():
handlebar_dict = handlebar_dict_future.Get()
# Parsing samples on the preview server takes seconds and doesn't add
@@ -529,9 +529,17 @@ class APIDataSource(DataSource):
return handlebar_dict
return Future(callback=resolve)
- def get(self, api_name):
- return self._GetImpl(api_name).Get()
+ def get(self, platform):
+ '''Return a getter object so that templates can perform lookups such
+ as apis.extensions.runtime.
+ '''
+ getter = lambda: 0
+ getter.get = lambda api_name: self._GetImpl(platform, api_name).Get()
+ return getter
def Cron(self):
- futures = [self._GetImpl(name) for name in self._api_models.GetNames()]
+ futures = []
+ for platform in GetPlatforms():
+ futures += [self._GetImpl(platform, name)
+ for name in self._platform_bundle.GetAPIModels(platform).GetNames()]
return Collect(futures, except_pass=FileNotFoundError)

Powered by Google App Engine
This is Rietveld 408576698