summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/common/extensions/docs/server2/api_list_data_source.py150
-rwxr-xr-xchrome/common/extensions/docs/server2/api_list_data_source_test.py23
-rw-r--r--chrome/common/extensions/docs/server2/app.yaml2
-rw-r--r--chrome/common/extensions/docs/server2/cron.yaml2
-rw-r--r--chrome/common/extensions/docs/server2/data_source_registry.py2
-rw-r--r--chrome/common/extensions/docs/server2/server_instance.py9
-rw-r--r--chrome/common/extensions/docs/server2/template_renderer.py1
7 files changed, 82 insertions, 107 deletions
diff --git a/chrome/common/extensions/docs/server2/api_list_data_source.py b/chrome/common/extensions/docs/server2/api_list_data_source.py
index 22f4f33..4ae0ca3 100644
--- a/chrome/common/extensions/docs/server2/api_list_data_source.py
+++ b/chrome/common/extensions/docs/server2/api_list_data_source.py
@@ -2,11 +2,13 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from data_source import DataSource
+from future import Gettable, Future
from operator import itemgetter
import docs_server_utils as utils
-class APIListDataSource(object):
+class APIListDataSource(DataSource):
""" This class creates a list of chrome.* APIs and chrome.experimental.* APIs
for extensions and apps that are used in the api_index.html,
experimental.html, and private_apis.html pages.
@@ -21,92 +23,82 @@ class APIListDataSource(object):
"extension_types" property where either/both "extension"/"platform_app"
values are present.
"""
- class Factory(object):
- def __init__(self,
- compiled_fs_factory,
- file_system,
- features_bundle,
- object_store_creator,
- api_models,
- availability_finder,
- api_categorizer):
- self._file_system = file_system
- self._features_bundle = features_bundle
- self._api_categorizer = api_categorizer
- self._object_store_creator = object_store_creator
- self._api_models = api_models
- self._availability_finder = availability_finder
+ def __init__(self, server_instance, _):
+ self._features_bundle = server_instance.features_bundle
+ self._object_store = server_instance.object_store_creator.Create(
+ APIListDataSource)
+ self._api_models = server_instance.api_models
+ self._api_categorizer = server_instance.api_categorizer
+ self._availability_finder = server_instance.availability_finder
- def _GenerateAPIDict(self):
+ def _GenerateAPIDict(self):
+ def get_channel_info(api_name):
+ return self._availability_finder.GetApiAvailability(api_name)
- def _GetChannelInfo(api_name):
- return self._availability_finder.GetApiAvailability(api_name)
+ def get_api_platform(api_name):
+ feature = self._features_bundle.GetAPIFeatures().Get()[api_name]
+ return feature['platforms']
- def _GetApiPlatform(api_name):
- feature = self._features_bundle.GetAPIFeatures().Get()[api_name]
- return feature['platforms']
-
- def _MakeDictForPlatform(platform):
- platform_dict = {
- 'chrome': {'stable': [], 'beta': [], 'dev': [], 'trunk': []},
+ def make_dict_for_platform(platform):
+ platform_dict = {
+ 'chrome': {'stable': [], 'beta': [], 'dev': [], 'trunk': []},
+ }
+ private_apis = []
+ experimental_apis = []
+ all_apis = []
+ for api_name, api_model in self._api_models.IterModels():
+ if not self._api_categorizer.IsDocumented(platform, api_name):
+ continue
+ api = {
+ 'name': api_name,
+ 'description': api_model.description,
+ 'platforms': get_api_platform(api_name),
}
- private_apis = []
- experimental_apis = []
- all_apis = []
- for api_name, api_model in self._api_models.IterModels():
- if not self._api_categorizer.IsDocumented(platform, api_name):
- continue
- api = {
- 'name': api_name,
- 'description': api_model.description,
- 'platforms': _GetApiPlatform(api_name),
- }
- category = self._api_categorizer.GetCategory(platform, api_name)
- if category == 'chrome':
- channel_info = _GetChannelInfo(api_name)
- channel = channel_info.channel
- if channel == 'stable':
- version = channel_info.version
- api['version'] = version
- platform_dict[category][channel].append(api)
- all_apis.append(api)
- elif category == 'experimental':
- experimental_apis.append(api)
- all_apis.append(api)
- elif category == 'private':
- private_apis.append(api)
-
- for channel, apis_by_channel in platform_dict['chrome'].iteritems():
- apis_by_channel.sort(key=itemgetter('name'))
- utils.MarkLast(apis_by_channel)
- platform_dict['chrome'][channel] = apis_by_channel
+ category = self._api_categorizer.GetCategory(platform, api_name)
+ if category == 'chrome':
+ channel_info = get_channel_info(api_name)
+ channel = channel_info.channel
+ if channel == 'stable':
+ version = channel_info.version
+ api['version'] = version
+ platform_dict[category][channel].append(api)
+ all_apis.append(api)
+ elif category == 'experimental':
+ experimental_apis.append(api)
+ all_apis.append(api)
+ elif category == 'private':
+ private_apis.append(api)
- for key, apis in (('all', all_apis),
- ('private', private_apis),
- ('experimental', experimental_apis)):
- apis.sort(key=itemgetter('name'))
- utils.MarkLast(apis)
- platform_dict[key] = apis
+ for channel, apis_by_channel in platform_dict['chrome'].iteritems():
+ apis_by_channel.sort(key=itemgetter('name'))
+ utils.MarkLast(apis_by_channel)
+ platform_dict['chrome'][channel] = apis_by_channel
- return platform_dict
- return {
- 'apps': _MakeDictForPlatform('apps'),
- 'extensions': _MakeDictForPlatform('extensions'),
- }
-
- def Create(self):
- return APIListDataSource(self, self._object_store_creator)
+ for key, apis in (('all', all_apis),
+ ('private', private_apis),
+ ('experimental', experimental_apis)):
+ apis.sort(key=itemgetter('name'))
+ utils.MarkLast(apis)
+ platform_dict[key] = apis
- def __init__(self, factory, object_store_creator):
- self._factory = factory
- self._object_store = object_store_creator.Create(APIListDataSource)
+ return platform_dict
+ return {
+ 'apps': make_dict_for_platform('apps'),
+ 'extensions': make_dict_for_platform('extensions'),
+ }
def _GetCachedAPIData(self):
- data = self._object_store.Get('api_data').Get()
- if data is None:
- data = self._factory._GenerateAPIDict()
- self._object_store.Set('api_data', data)
- return data
+ data_future = self._object_store.Get('api_data')
+ def resolve():
+ data = data_future.Get()
+ if data is None:
+ data = self._GenerateAPIDict()
+ self._object_store.Set('api_data', data)
+ return data
+ return Future(delegate=Gettable(resolve))
def get(self, key):
- return self._GetCachedAPIData().get(key)
+ return self._GetCachedAPIData().Get().get(key)
+
+ def Cron(self):
+ return self._GetCachedAPIData()
diff --git a/chrome/common/extensions/docs/server2/api_list_data_source_test.py b/chrome/common/extensions/docs/server2/api_list_data_source_test.py
index 8964d50..44523a5 100755
--- a/chrome/common/extensions/docs/server2/api_list_data_source_test.py
+++ b/chrome/common/extensions/docs/server2/api_list_data_source_test.py
@@ -131,18 +131,12 @@ class APIListDataSourceTest(unittest.TestCase):
def setUp(self):
server_instance = ServerInstance.ForTest(
TestFileSystem(_TEST_DATA, relative_to=CHROME_EXTENSIONS))
- self._factory = APIListDataSource.Factory(
- server_instance.compiled_fs_factory,
- server_instance.host_file_system_provider.GetTrunk(),
- server_instance.features_bundle,
- server_instance.object_store_creator,
- server_instance.api_models,
- server_instance.availability_finder,
- server_instance.api_categorizer)
+ # APIListDataSource takes a request but doesn't use it,
+ # so put None
+ self._api_list = APIListDataSource(server_instance, None)
self.maxDiff = None
def testApps(self):
- api_list = self._factory.Create()
self.assertEqual({
'stable': [
{
@@ -176,10 +170,9 @@ class APIListDataSourceTest(unittest.TestCase):
}],
'beta': [],
'trunk': []
- }, api_list.get('apps').get('chrome'))
+ }, self._api_list.get('apps').get('chrome'))
def testExperimentalApps(self):
- api_list = self._factory.Create()
self.assertEqual([
{
'name': 'experimental.bluetooth',
@@ -191,10 +184,9 @@ class APIListDataSourceTest(unittest.TestCase):
'platforms': ['apps', 'extensions'],
'last': True,
'description': u'<code>experimental.power</code>'
- }], api_list.get('apps').get('experimental'))
+ }], self._api_list.get('apps').get('experimental'))
def testExtensions(self):
- api_list = self._factory.Create()
self.assertEqual({
'stable': [
{
@@ -232,10 +224,9 @@ class APIListDataSourceTest(unittest.TestCase):
}],
'beta': [],
'trunk': []
- }, api_list.get('extensions').get('chrome'))
+ }, self._api_list.get('extensions').get('chrome'))
def testExperimentalExtensions(self):
- api_list = self._factory.Create()
self.assertEqual([
{
'name': 'experimental.history',
@@ -247,7 +238,7 @@ class APIListDataSourceTest(unittest.TestCase):
'platforms': ['apps', 'extensions'],
'description': u'<code>experimental.power</code>',
'last': True
- }], api_list.get('extensions').get('experimental'))
+ }], self._api_list.get('extensions').get('experimental'))
if __name__ == '__main__':
unittest.main()
diff --git a/chrome/common/extensions/docs/server2/app.yaml b/chrome/common/extensions/docs/server2/app.yaml
index fc83781..f9b1d53 100644
--- a/chrome/common/extensions/docs/server2/app.yaml
+++ b/chrome/common/extensions/docs/server2/app.yaml
@@ -1,5 +1,5 @@
application: chrome-apps-doc
-version: 3-14-0
+version: 3-14-1
runtime: python27
api_version: 1
threadsafe: false
diff --git a/chrome/common/extensions/docs/server2/cron.yaml b/chrome/common/extensions/docs/server2/cron.yaml
index c7f5d95..218152c 100644
--- a/chrome/common/extensions/docs/server2/cron.yaml
+++ b/chrome/common/extensions/docs/server2/cron.yaml
@@ -2,4 +2,4 @@ cron:
- description: Repopulates all cached data.
url: /_cron
schedule: every 5 minutes
- target: 3-14-0
+ target: 3-14-1
diff --git a/chrome/common/extensions/docs/server2/data_source_registry.py b/chrome/common/extensions/docs/server2/data_source_registry.py
index 8249a23..7588811 100644
--- a/chrome/common/extensions/docs/server2/data_source_registry.py
+++ b/chrome/common/extensions/docs/server2/data_source_registry.py
@@ -2,6 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from api_list_data_source import APIListDataSource
from data_source import DataSource
from manifest_data_source import ManifestDataSource
from permissions_data_source import PermissionsDataSource
@@ -13,6 +14,7 @@ from whats_new_data_source import WhatsNewDataSource
_all_data_sources = {
+ 'api_list': APIListDataSource,
'articles': ArticleDataSource,
'intros': IntroDataSource,
'manifest_source': ManifestDataSource,
diff --git a/chrome/common/extensions/docs/server2/server_instance.py b/chrome/common/extensions/docs/server2/server_instance.py
index cfcb691..13f4f20 100644
--- a/chrome/common/extensions/docs/server2/server_instance.py
+++ b/chrome/common/extensions/docs/server2/server_instance.py
@@ -100,15 +100,6 @@ class ServerInstance(object):
self.api_models,
self.object_store_creator)
- self.api_list_data_source_factory = APIListDataSource.Factory(
- self.compiled_fs_factory,
- host_fs_at_trunk,
- self.features_bundle,
- self.object_store_creator,
- self.api_models,
- self.availability_finder,
- self.api_categorizer)
-
self.ref_resolver_factory = ReferenceResolver.Factory(
self.api_data_source_factory,
self.api_models,
diff --git a/chrome/common/extensions/docs/server2/template_renderer.py b/chrome/common/extensions/docs/server2/template_renderer.py
index a6b8d65..3316ec7 100644
--- a/chrome/common/extensions/docs/server2/template_renderer.py
+++ b/chrome/common/extensions/docs/server2/template_renderer.py
@@ -51,7 +51,6 @@ class TemplateRenderer(object):
server_instance = self._server_instance
data_sources = CreateDataSources(server_instance, request=request)
data_sources.update({
- 'api_list': server_instance.api_list_data_source_factory.Create(),
'apis': server_instance.api_data_source_factory.Create(request),
'samples': server_instance.samples_data_source_factory.Create(request),
})