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 c84a34b88c2b63fd12658f6dc58592f87cd2d39d..66a0c496679b9b337e7a871ed126b9b81c39def9 100644 |
--- a/chrome/common/extensions/docs/server2/api_list_data_source.py |
+++ b/chrome/common/extensions/docs/server2/api_list_data_source.py |
@@ -5,8 +5,6 @@ |
from operator import itemgetter |
import os |
-from third_party.json_schema_compiler.json_parse import Parse |
-import third_party.json_schema_compiler.model as model |
import docs_server_utils as utils |
def _GetAPICategory(api, documented_apis): |
@@ -40,7 +38,9 @@ class APIListDataSource(object): |
file_system, |
public_template_path, |
features_bundle, |
- object_store_creator): |
+ object_store_creator, |
+ api_data_source_factory, |
not at google - send to devlin
2013/10/31 00:05:26
I don't want to introduce a dependency on api_data
hukun
2013/11/01 09:31:52
Done. Remove dependency of api_data_source_factory
|
+ availability_finder): |
self._file_system = file_system |
def NormalizePath(string): |
return string if string.endswith('/') else (string + '/') |
@@ -50,6 +50,22 @@ class APIListDataSource(object): |
APIListDataSource) |
self._features_bundle = features_bundle |
self._object_store_creator = object_store_creator |
+ self._api_data_source = api_data_source_factory.Create(None, |
+ disable_refs=True) |
+ self._availability_finder = availability_finder |
+ self._cached_documented_apis = None |
+ self._cachhed_api_features = None |
not at google - send to devlin
2013/10/31 00:05:26
the places you get these from do their own caching
hukun
2013/11/01 09:31:52
Done.remove the cache.
|
+ |
+ def _GetDocumentedApis(self): |
+ if (not self._cached_documented_apis): |
+ self._cached_documented_apis = self._cache.GetFromFileListing( |
+ self._public_template_path).Get() |
+ return self._cached_documented_apis |
+ |
+ def _GetApiFeatures(self): |
+ if (not self._cachhed_api_features) : |
+ self._cachhed_api_features = self._features_bundle.GetAPIFeatures() |
+ return self._cachhed_api_features |
def _CollectDocumentedAPIs(self, base_dir, files): |
def GetDocumentedAPIsForPlatform(names, platform): |
@@ -67,10 +83,13 @@ class APIListDataSource(object): |
'extensions': GetDocumentedAPIsForPlatform(api_names, 'extensions') |
} |
+ def GetAllNames(self): |
+ api_features = self._GetApiFeatures().itervalues() |
+ return [api['name'] for api in api_features] |
+ |
def _GenerateAPIDict(self): |
- documented_apis = self._cache.GetFromFileListing( |
- self._public_template_path).Get() |
- api_features = self._features_bundle.GetAPIFeatures() |
+ documented_apis = self._GetDocumentedApis() |
+ api_features = self._GetApiFeatures() |
def FilterAPIs(platform): |
return (api for api in api_features.itervalues() |
@@ -86,9 +105,39 @@ class APIListDataSource(object): |
utils.MarkLast(platform_dict[category]) |
return platform_dict |
+ def MakeDictForChannel(dict_for_platform, availability_finder, |
+ api_data_source): |
not at google - send to devlin
2013/10/31 00:05:26
this should still [be able to be arranged to] have
hukun
2013/11/01 09:31:52
Done. Use self' point directly.
|
+ platform_list = [ 'chrome', 'experimental'] |
+ |
+ for platform in platform_list: |
+ platform_dict = dict_for_platform[platform] |
+ channel_dict = { 'stable': [], 'beta': [], 'dev': [], 'trunk': [] } |
+ for api in platform_dict: |
+ api_name = api['name'] |
+ description_list = api_data_source.get(api_name)["introList"]; |
+ for description in description_list: |
+ if description["title"] == 'Description': |
+ api['description'] = description['content'][0]['text'] |
+ break |
+ channel_info = availability_finder.GetApiAvailability(api_name) |
+ channel = channel_info.channel |
+ if channel == 'stable': |
+ api['version'] = channel_info.version |
+ channel_dict[channel].append(api) |
+ |
not at google - send to devlin
2013/10/31 00:05:26
I'm finding this sa bit hard to follow, can you br
hukun
2013/11/01 09:31:52
Done. Remove my func.
|
+ for channel, apis in channel_dict.iteritems(): |
+ channel_dict[channel] = sorted(apis, key=itemgetter('name')) |
+ utils.MarkLast(channel_dict[channel]) |
+ dict_for_platform[platform] = channel_dict |
+ return dict_for_platform |
+ |
return { |
- 'apps': MakeDictForPlatform('apps'), |
- 'extensions': MakeDictForPlatform('extensions') |
+ 'apps': MakeDictForChannel(MakeDictForPlatform('apps'), |
not at google - send to devlin
2013/10/31 00:05:26
MakeDictForPlatform('apps') here was right. MakeDi
hukun
2013/11/01 09:31:52
Done. Still use MakeDictForPlatform
|
+ self._availability_finder, |
+ self._api_data_source), |
+ 'extensions': MakeDictForChannel(MakeDictForPlatform('extensions'), |
+ self._availability_finder, |
+ self._api_data_source) |
} |
def Create(self): |
@@ -99,11 +148,11 @@ class APIListDataSource(object): |
self._object_store = object_store_creator.Create(APIListDataSource) |
def GetAllNames(self): |
- apis = [] |
- for platform in ['apps', 'extensions']: |
- for category in ['chrome', 'experimental', 'private']: |
- apis.extend(self.get(platform).get(category)) |
- return [api['name'] for api in apis] |
+ data = self._object_store.Get('all_names').Get() |
+ if data is None: |
+ data = self._factory.GetAllNames() |
+ self._object_store.Set('all_names', data) |
+ return data |
def _GetCachedAPIData(self): |
data = self._object_store.Get('api_data').Get() |