Index: chrome/common/extensions/docs/server2/api_list_data_source.py |
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 6263871cf3d55a1cf5227cf229131b096b28e27b..7bb671db5b46641142a3c366f2d168a397c777a9 100644 |
--- a/chrome/common/extensions/docs/server2/api_list_data_source.py |
+++ b/chrome/common/extensions/docs/server2/api_list_data_source.py |
@@ -7,14 +7,15 @@ import os |
import posixpath |
import docs_server_utils as utils |
+from branch_utility import ChannelInfo |
from extensions_paths import PUBLIC_TEMPLATES |
+from file_system import FileNotFoundError |
-def _GetAPICategory(api, documented_apis): |
- name = api['name'] |
- if (name.endswith('Private') or |
- name not in documented_apis): |
+def _GetAPICategory(api_name, documented_apis): |
+ if (api_name.endswith('Private') or |
+ api_name not in documented_apis): |
return 'private' |
- if name.startswith('experimental.'): |
+ if api_name.startswith('experimental.'): |
return 'experimental' |
return 'chrome' |
@@ -39,13 +40,20 @@ class APIListDataSource(object): |
compiled_fs_factory, |
file_system, |
features_bundle, |
- object_store_creator): |
+ object_store_creator, |
+ api_models, |
+ availability_finder): |
self._file_system = file_system |
self._cache = compiled_fs_factory.Create(file_system, |
self._CollectDocumentedAPIs, |
APIListDataSource) |
self._features_bundle = features_bundle |
self._object_store_creator = object_store_creator |
+ self._api_models = api_models |
+ self._availability_finder = availability_finder |
+ |
+ def _GetDocumentedApis(self): |
+ return self._cache.GetFromFileListing(self._public_template_path).Get() |
def _CollectDocumentedAPIs(self, base_dir, files): |
def GetDocumentedAPIsForPlatform(names, platform): |
@@ -64,27 +72,64 @@ class APIListDataSource(object): |
} |
def _GenerateAPIDict(self): |
+ |
documented_apis = self._cache.GetFromFileListing(PUBLIC_TEMPLATES).Get() |
- api_features = self._features_bundle.GetAPIFeatures().Get() |
- def FilterAPIs(platform): |
- return (api for api in api_features.itervalues() |
- if platform in api['platforms']) |
+ def GetChannelInfo(api_name): |
+ return self._availability_finder.GetApiAvailability(api_name) |
+ |
+ def GetApiDescription(model): |
+ try: |
+ return model.Get().description if model.Get() else '' |
+ except FileNotFoundError: |
+ return '' |
+ |
+ def GetApiPlatform(api_name): |
+ feature = self._features_bundle.GetAPIFeatures().Get()[api_name] |
+ return feature['platforms'] |
def MakeDictForPlatform(platform): |
- platform_dict = { 'chrome': [], 'experimental': [], 'private': [] } |
- for api in FilterAPIs(platform): |
- if api['name'] in documented_apis[platform]: |
- category = _GetAPICategory(api, documented_apis[platform]) |
- platform_dict[category].append(api) |
- for category, apis in platform_dict.iteritems(): |
- platform_dict[category] = sorted(apis, key=itemgetter('name')) |
- utils.MarkLast(platform_dict[category]) |
- return platform_dict |
+ platform_dict = { |
+ 'chrome': {'stable': [], 'beta': [], 'dev': [], 'trunk': []} |
+ } |
+ private_apis = [] |
+ experimental_apis = [] |
+ all_apis = [] |
+ for api_name, api_model in self._api_models.IterModels(): |
+ api = { |
+ 'name': api_name, |
+ 'description': GetApiDescription(api_model), |
+ 'platforms': GetApiPlatform(api_name), |
+ } |
+ category = _GetAPICategory(api_name, documented_apis[platform]) |
+ if category == 'chrome': |
+ channel_info = GetChannelInfo(api_name) |
+ channel = channel_info.channel |
+ if channel == 'stable': |
+ api['version'] = channel_info.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 = sorted(apis_by_channel, key=itemgetter('name')) |
+ utils.MarkLast(apis_by_channel) |
+ platform_dict['chrome'][channel] = apis_by_channel |
+ for key, apis in (('all', all_apis), |
+ ('private', private_apis), |
+ ('experimental', experimental_apis)): |
+ apis = sorted(apis, key=itemgetter('name')) |
+ utils.MarkLast(apis) |
+ platform_dict[key] = apis |
+ return platform_dict |
return { |
'apps': MakeDictForPlatform('apps'), |
- 'extensions': MakeDictForPlatform('extensions') |
+ 'extensions': MakeDictForPlatform('extensions'), |
} |
def Create(self): |