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

Side by Side Diff: chrome/common/extensions/docs/server2/api_list_data_source.py

Issue 438403002: Conver APIListDataSource to use Future.Then() rather than Get(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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 unified diff | Download patch
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 from data_source import DataSource 5 from data_source import DataSource
6 from future import Future 6 from future import Future
7 from operator import itemgetter 7 from operator import itemgetter
8 from platform_util import GetPlatforms 8 from platform_util import GetPlatforms
9 9
10 from docs_server_utils import MarkFirstAndLast, MarkLast 10 from docs_server_utils import MarkFirstAndLast, MarkLast
(...skipping 14 matching lines...) Expand all
25 values are present. 25 values are present.
26 """ 26 """
27 def __init__(self, server_instance, _): 27 def __init__(self, server_instance, _):
28 self._platform_bundle = server_instance.platform_bundle 28 self._platform_bundle = server_instance.platform_bundle
29 self._object_store = server_instance.object_store_creator.Create( 29 self._object_store = server_instance.object_store_creator.Create(
30 # Update the model when the API or Features model updates. 30 # Update the model when the API or Features model updates.
31 APIListDataSource, category=self._platform_bundle.GetIdentity()) 31 APIListDataSource, category=self._platform_bundle.GetIdentity())
32 32
33 def _GenerateAPIDict(self): 33 def _GenerateAPIDict(self):
34 def make_list_for_content_scripts(): 34 def make_list_for_content_scripts():
35 content_script_apis = self._platform_bundle.GetAPIModels( 35 def convert_to_list(content_script_apis):
36 'extensions').GetContentScriptAPIs().Get() 36 content_script_apis_list = [csa.__dict__ for api_name, csa
37 content_script_apis_list = [csa.__dict__ for api_name, csa 37 in content_script_apis.iteritems()
38 in content_script_apis.iteritems() 38 if self._platform_bundle.GetAPICategorizer(
39 if self._platform_bundle.GetAPICategorizer( 39 'extensions').IsDocumented(api_name)]
40 'extensions').IsDocumented(api_name)] 40 content_script_apis_list.sort(key=itemgetter('name'))
41 for csa in content_script_apis_list:
42 restricted_nodes = csa['restrictedTo']
43 if restricted_nodes:
44 restricted_nodes.sort(key=itemgetter('node'))
45 MarkFirstAndLast(restricted_nodes)
46 else:
47 del csa['restrictedTo']
48 return content_script_apis_list
41 49
42 content_script_apis_list.sort(key=itemgetter('name')) 50 return (self._platform_bundle.GetAPIModels('extensions')
43 for csa in content_script_apis_list: 51 .GetContentScriptAPIs()
44 restricted_nodes = csa['restrictedTo'] 52 .Then(convert_to_list))
45 if restricted_nodes:
46 restricted_nodes.sort(key=itemgetter('node'))
47 MarkFirstAndLast(restricted_nodes)
48 else:
49 del csa['restrictedTo']
50 return content_script_apis_list
51 53
52 def make_dict_for_platform(platform): 54 def make_dict_for_platform(platform):
53 platform_dict = { 55 platform_dict = {
54 'chrome': {'stable': [], 'beta': [], 'dev': [], 'trunk': []}, 56 'chrome': {'stable': [], 'beta': [], 'dev': [], 'trunk': []},
55 } 57 }
56 private_apis = [] 58 private_apis = []
57 experimental_apis = [] 59 experimental_apis = []
58 all_apis = [] 60 all_apis = []
59 for api_name, api_model in self._platform_bundle.GetAPIModels( 61 for api_name, api_model in self._platform_bundle.GetAPIModels(
60 platform).IterModels(): 62 platform).IterModels():
not at google - send to devlin 2014/08/05 18:47:18 IterModels() might be a problem, it's an implicit
61 if not self._platform_bundle.GetAPICategorizer(platform).IsDocumented( 63 if not self._platform_bundle.GetAPICategorizer(platform).IsDocumented(
62 api_name): 64 api_name):
63 continue 65 continue
64 api = { 66 api = {
65 'name': api_name, 67 'name': api_name,
66 'description': api_model.description, 68 'description': api_model.description,
67 } 69 }
68 category = self._platform_bundle.GetAPICategorizer( 70 category = self._platform_bundle.GetAPICategorizer(
69 platform).GetCategory(api_name) 71 platform).GetCategory(api_name)
70 if category == 'chrome': 72 if category == 'chrome':
(...skipping 17 matching lines...) Expand all
88 platform_dict['chrome'][channel] = apis_by_channel 90 platform_dict['chrome'][channel] = apis_by_channel
89 91
90 for key, apis in (('all', all_apis), 92 for key, apis in (('all', all_apis),
91 ('private', private_apis), 93 ('private', private_apis),
92 ('experimental', experimental_apis)): 94 ('experimental', experimental_apis)):
93 apis.sort(key=itemgetter('name')) 95 apis.sort(key=itemgetter('name'))
94 MarkLast(apis) 96 MarkLast(apis)
95 platform_dict[key] = apis 97 platform_dict[key] = apis
96 98
97 return platform_dict 99 return platform_dict
98 api_dict = dict((platform, make_dict_for_platform(platform)) 100
99 for platform in GetPlatforms()) 101 def make_api_dict(content_script_apis):
100 api_dict['contentScripts'] = make_list_for_content_scripts() 102 api_dict = dict((platform, make_dict_for_platform(platform))
101 return api_dict 103 for platform in GetPlatforms())
104 api_dict['contentScripts'] = content_script_apis
105 return api_dict
106
107 return make_list_for_content_scripts().Then(make_api_dict)
102 108
103 def _GetCachedAPIData(self): 109 def _GetCachedAPIData(self):
104 data_future = self._object_store.Get('api_data') 110 def persist_and_return(data):
105 def resolve(): 111 self._object_store.Set('api_data', data)
106 data = data_future.Get() 112 return data
113 def return_or_generate(data):
107 if data is None: 114 if data is None:
108 data = self._GenerateAPIDict() 115 return self._GenerateAPIDict().Then(persist_and_return)
109 self._object_store.Set('api_data', data)
110 return data 116 return data
111 return Future(callback=resolve) 117 return self._object_store.Get('api_data').Then(return_or_generate)
112 118
113 def get(self, key): 119 def get(self, key):
114 return self._GetCachedAPIData().Get().get(key) 120 return self._GetCachedAPIData().Get().get(key)
115 121
116 def Cron(self): 122 def Cron(self):
117 return self._GetCachedAPIData() 123 return self._GetCachedAPIData()
OLDNEW
« no previous file with comments | « no previous file | chrome/common/extensions/docs/server2/app.yaml » ('j') | chrome/common/extensions/docs/server2/future.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698