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

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

Issue 375133002: Docserver: Display API features that are available to content scripts (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 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 copy import copy 5 from copy import copy
6 import logging 6 import logging
7 import os 7 import os
8 import posixpath 8 import posixpath
9 9
10 from data_source import DataSource 10 from data_source import DataSource
11 from docs_server_utils import StringIdentity 11 from docs_server_utils import StringIdentity, MarkFirst, MarkLast
12 from environment import IsPreviewServer, IsReleaseServer 12 from environment import IsPreviewServer, IsReleaseServer
13 from extensions_paths import JSON_TEMPLATES, PRIVATE_TEMPLATES 13 from extensions_paths import JSON_TEMPLATES, PRIVATE_TEMPLATES
14 from file_system import FileNotFoundError 14 from file_system import FileNotFoundError
15 from future import Future, Collect 15 from future import Future, Collect
16 from operator import itemgetter
16 from platform_util import GetPlatforms 17 from platform_util import GetPlatforms
17 import third_party.json_schema_compiler.json_parse as json_parse 18 import third_party.json_schema_compiler.json_parse as json_parse
18 import third_party.json_schema_compiler.model as model 19 import third_party.json_schema_compiler.model as model
19 from third_party.json_schema_compiler.memoize import memoize 20 from third_party.json_schema_compiler.memoize import memoize
20 21
21 22
22 # The set of possible categories a node may belong to. 23 # The set of possible categories a node may belong to.
23 _NODE_CATEGORIES = ('types', 'functions', 'events', 'properties') 24 _NODE_CATEGORIES = ('types', 'functions', 'events', 'properties')
24 25
25 26
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 def __repr__(self): 260 def __repr__(self):
260 return '%s > %s' % (self._namespace_name, ' > '.join(self._lookup_path)) 261 return '%s > %s' % (self._namespace_name, ' > '.join(self._lookup_path))
261 262
262 263
263 class _JSCModel(object): 264 class _JSCModel(object):
264 '''Uses a Model from the JSON Schema Compiler and generates a dict that 265 '''Uses a Model from the JSON Schema Compiler and generates a dict that
265 a Handlebar template can use for a data source. 266 a Handlebar template can use for a data source.
266 ''' 267 '''
267 268
268 def __init__(self, 269 def __init__(self,
270 content_script_apis,
269 namespace, 271 namespace,
270 availability_finder, 272 availability_finder,
271 json_cache, 273 json_cache,
272 template_cache, 274 template_cache,
273 features_bundle, 275 features_bundle,
274 event_byname_future): 276 event_byname_future):
277 self._content_script_apis = content_script_apis
275 self._availability = availability_finder.GetAPIAvailability(namespace.name) 278 self._availability = availability_finder.GetAPIAvailability(namespace.name)
276 self._current_node = _APINodeCursor(availability_finder, namespace.name) 279 self._current_node = _APINodeCursor(availability_finder, namespace.name)
277 self._api_availabilities = json_cache.GetFromFile( 280 self._api_availabilities = json_cache.GetFromFile(
278 posixpath.join(JSON_TEMPLATES, 'api_availabilities.json')) 281 posixpath.join(JSON_TEMPLATES, 'api_availabilities.json'))
279 self._intro_tables = json_cache.GetFromFile( 282 self._intro_tables = json_cache.GetFromFile(
280 posixpath.join(JSON_TEMPLATES, 'intro_tables.json')) 283 posixpath.join(JSON_TEMPLATES, 'intro_tables.json'))
281 self._api_features = features_bundle.GetAPIFeatures() 284 self._api_features = features_bundle.GetAPIFeatures()
282 self._template_cache = template_cache 285 self._template_cache = template_cache
283 self._event_byname_future = event_byname_future 286 self._event_byname_future = event_byname_future
284 self._namespace = namespace 287 self._namespace = namespace
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 else: 540 else:
538 dst_dict['simple_type'] = type_.property_type.name 541 dst_dict['simple_type'] = type_.property_type.name
539 542
540 def _GetIntroTableList(self): 543 def _GetIntroTableList(self):
541 '''Create a generic data structure that can be traversed by the templates 544 '''Create a generic data structure that can be traversed by the templates
542 to create an API intro table. 545 to create an API intro table.
543 ''' 546 '''
544 intro_rows = [ 547 intro_rows = [
545 self._GetIntroDescriptionRow(), 548 self._GetIntroDescriptionRow(),
546 self._GetIntroAvailabilityRow() 549 self._GetIntroAvailabilityRow()
547 ] + self._GetIntroDependencyRows() 550 ] + self._GetIntroDependencyRows() + self._GetIntroContentScriptRow()
548 551
549 # Add rows using data from intro_tables.json, overriding any existing rows 552 # Add rows using data from intro_tables.json, overriding any existing rows
550 # if they share the same 'title' attribute. 553 # if they share the same 'title' attribute.
551 row_titles = [row['title'] for row in intro_rows] 554 row_titles = [row['title'] for row in intro_rows]
552 for misc_row in self._GetMiscIntroRows(): 555 for misc_row in self._GetMiscIntroRows():
553 if misc_row['title'] in row_titles: 556 if misc_row['title'] in row_titles:
554 intro_rows[row_titles.index(misc_row['title'])] = misc_row 557 intro_rows[row_titles.index(misc_row['title'])] = misc_row
555 else: 558 else:
556 intro_rows.append(misc_row) 559 intro_rows.append(misc_row)
557 560
558 return intro_rows 561 return intro_rows
559 562
560 def _GetAvailabilityTemplate(self, status=None, version=None, scheduled=None): 563 def _GetAvailabilityTemplate(self, status=None, version=None, scheduled=None):
561 '''Returns an object that the templates use to display availability 564 '''Returns an object that the templates use to display availability
562 information. 565 information.
563 ''' 566 '''
564 if status is None: 567 if status is None:
565 availability_info = self._current_node.GetAvailability() 568 availability_info = self._current_node.GetAvailability()
566 if availability_info is None: 569 if availability_info is None:
567 return None 570 return None
568 status = availability_info.channel 571 status = availability_info.channel
569 version = availability_info.version 572 version = availability_info.version
570 return { 573 return {
571 'partial': self._template_cache.GetFromFile( 574 'partial': self._template_cache.GetFromFile(
572 '%sintro_tables/%s_message.html' % (PRIVATE_TEMPLATES, status)).Get(), 575 '%sintro_tables/%s_message.html' % (PRIVATE_TEMPLATES, status)).Get(),
573 'scheduled': scheduled, 576 'scheduled': scheduled,
574 'version': version 577 'version': version
575 } 578 }
576 579
580 def _GetIntroContentScriptRow(self):
581 content_script_support = self._content_script_apis.get(self._namespace.name)
582 if content_script_support is None:
583 return []
584 if content_script_support.restrictedTo:
ahernandez 2014/07/16 20:35:34 Should this code be moved into a function somewher
not at google - send to devlin 2014/07/21 17:51:19 maybe, though I can't think of an appropriate plac
585 content_script_support.restrictedTo.sort(key=itemgetter('node'))
586 MarkFirst(content_script_support.restrictedTo)
587 MarkLast(content_script_support.restrictedTo)
588 return [{
589 'title': 'Content Scripts',
590 'content': [{
591 'partial': self._template_cache.GetFromFile(
592 posixpath.join(PRIVATE_TEMPLATES,
593 'intro_tables',
594 'content_scripts.html')).Get(),
595 'contentScriptSupport': content_script_support.__dict__
596 }]
597 }]
598
577 def _GetIntroDescriptionRow(self): 599 def _GetIntroDescriptionRow(self):
578 ''' Generates the 'Description' row data for an API intro table. 600 ''' Generates the 'Description' row data for an API intro table.
579 ''' 601 '''
580 return { 602 return {
581 'title': 'Description', 603 'title': 'Description',
582 'content': [ 604 'content': [
583 { 'text': self._namespace.description } 605 { 'text': self._namespace.description }
584 ] 606 ]
585 } 607 }
586 608
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 from Event in events.json. 748 from Event in events.json.
727 ''' 749 '''
728 if platform not in self._event_byname_futures: 750 if platform not in self._event_byname_futures:
729 future = self._GetSchemaModel(platform, 'events') 751 future = self._GetSchemaModel(platform, 'events')
730 self._event_byname_futures[platform] = Future( 752 self._event_byname_futures[platform] = Future(
731 callback=lambda: _GetEventByNameFromEvents(future.Get())) 753 callback=lambda: _GetEventByNameFromEvents(future.Get()))
732 return self._event_byname_futures[platform] 754 return self._event_byname_futures[platform]
733 755
734 def _GetSchemaModel(self, platform, api_name): 756 def _GetSchemaModel(self, platform, api_name):
735 object_store_key = '/'.join((platform, api_name)) 757 object_store_key = '/'.join((platform, api_name))
758 api_models = self._platform_bundle.GetAPIModels(platform)
736 jsc_model_future = self._model_cache.Get(object_store_key) 759 jsc_model_future = self._model_cache.Get(object_store_key)
737 model_future = self._platform_bundle.GetAPIModels(platform).GetModel( 760 model_future = api_models.GetModel(api_name)
738 api_name) 761 content_script_apis_future = api_models.GetContentScriptAPIs()
739 def resolve(): 762 def resolve():
740 jsc_model = jsc_model_future.Get() 763 jsc_model = jsc_model_future.Get()
741 if jsc_model is None: 764 if jsc_model is None:
742 jsc_model = _JSCModel( 765 jsc_model = _JSCModel(
766 content_script_apis_future.Get(),
743 model_future.Get(), 767 model_future.Get(),
744 self._platform_bundle.GetAvailabilityFinder(platform), 768 self._platform_bundle.GetAvailabilityFinder(platform),
745 self._json_cache, 769 self._json_cache,
746 self._template_cache, 770 self._template_cache,
747 self._platform_bundle.GetFeaturesBundle(platform), 771 self._platform_bundle.GetFeaturesBundle(platform),
748 self._LoadEventByName(platform)).ToDict() 772 self._LoadEventByName(platform)).ToDict()
749 self._model_cache.Set(object_store_key, jsc_model) 773 self._model_cache.Set(object_store_key, jsc_model)
750 return jsc_model 774 return jsc_model
751 return Future(callback=resolve) 775 return Future(callback=resolve)
752 776
(...skipping 17 matching lines...) Expand all
770 getter = lambda: 0 794 getter = lambda: 0
771 getter.get = lambda api_name: self._GetImpl(platform, api_name).Get() 795 getter.get = lambda api_name: self._GetImpl(platform, api_name).Get()
772 return getter 796 return getter
773 797
774 def Cron(self): 798 def Cron(self):
775 futures = [] 799 futures = []
776 for platform in GetPlatforms(): 800 for platform in GetPlatforms():
777 futures += [self._GetImpl(platform, name) 801 futures += [self._GetImpl(platform, name)
778 for name in self._platform_bundle.GetAPIModels(platform).GetNames()] 802 for name in self._platform_bundle.GetAPIModels(platform).GetNames()]
779 return Collect(futures, except_pass=FileNotFoundError) 803 return Collect(futures, except_pass=FileNotFoundError)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698