Enable Enterprise enrollment on desktop builds.
[chromium-blink-merge.git] / chrome / common / extensions / docs / server2 / api_list_data_source.py
blobabbf397eca0b93302ecf6c9f86f68f81ca07722e
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 from data_source import DataSource
6 from future import Future
7 from operator import itemgetter
9 import docs_server_utils as utils
11 class APIListDataSource(DataSource):
12 """ This class creates a list of chrome.* APIs and chrome.experimental.* APIs
13 for extensions and apps that are used in the api_index.html,
14 experimental.html, and private_apis.html pages.
16 An API is considered listable if it is listed in _api_features.json,
17 it has a corresponding HTML file in the public template path, and one of
18 the following conditions is met:
19 - It has no "dependencies" or "extension_types" properties in _api_features
20 - It has an "extension_types" property in _api_features with either/both
21 "extension"/"platform_app" values present.
22 - It has a dependency in _{api,manifest,permission}_features with an
23 "extension_types" property where either/both "extension"/"platform_app"
24 values are present.
25 """
26 def __init__(self, server_instance, _):
27 self._features_bundle = server_instance.features_bundle
28 self._object_store = server_instance.object_store_creator.Create(
29 APIListDataSource)
30 self._api_models = server_instance.api_models
31 self._api_categorizer = server_instance.api_categorizer
32 self._availability_finder = server_instance.availability_finder
34 def _GenerateAPIDict(self):
35 def get_channel_info(api_name):
36 return self._availability_finder.GetApiAvailability(api_name).channel_info
38 def get_api_platform(api_name):
39 feature = self._features_bundle.GetAPIFeatures().Get()[api_name]
40 return feature['platforms']
42 def make_dict_for_platform(platform):
43 platform_dict = {
44 'chrome': {'stable': [], 'beta': [], 'dev': [], 'trunk': []},
46 private_apis = []
47 experimental_apis = []
48 all_apis = []
49 for api_name, api_model in self._api_models.IterModels():
50 if not self._api_categorizer.IsDocumented(platform, api_name):
51 continue
52 api = {
53 'name': api_name,
54 'description': api_model.description,
55 'platforms': get_api_platform(api_name),
57 category = self._api_categorizer.GetCategory(platform, api_name)
58 if category == 'chrome':
59 channel_info = get_channel_info(api_name)
60 channel = channel_info.channel
61 if channel == 'stable':
62 version = channel_info.version
63 api['version'] = version
64 platform_dict[category][channel].append(api)
65 all_apis.append(api)
66 elif category == 'experimental':
67 experimental_apis.append(api)
68 all_apis.append(api)
69 elif category == 'private':
70 private_apis.append(api)
72 for channel, apis_by_channel in platform_dict['chrome'].iteritems():
73 apis_by_channel.sort(key=itemgetter('name'))
74 utils.MarkLast(apis_by_channel)
75 platform_dict['chrome'][channel] = apis_by_channel
77 for key, apis in (('all', all_apis),
78 ('private', private_apis),
79 ('experimental', experimental_apis)):
80 apis.sort(key=itemgetter('name'))
81 utils.MarkLast(apis)
82 platform_dict[key] = apis
84 return platform_dict
85 return {
86 'apps': make_dict_for_platform('apps'),
87 'extensions': make_dict_for_platform('extensions'),
90 def _GetCachedAPIData(self):
91 data_future = self._object_store.Get('api_data')
92 def resolve():
93 data = data_future.Get()
94 if data is None:
95 data = self._GenerateAPIDict()
96 self._object_store.Set('api_data', data)
97 return data
98 return Future(callback=resolve)
100 def get(self, key):
101 return self._GetCachedAPIData().Get().get(key)
103 def Cron(self):
104 return self._GetCachedAPIData()