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

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

Issue 176973009: Doc server: support interfaces in src/extensions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rename path constants, update APIModels.GetModel Created 6 years, 9 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 | Annotate | Revision Log
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 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 collections import Mapping 5 from collections import Mapping
6 import posixpath 6 import posixpath
7 7
8 from api_schema_graph import APISchemaGraph 8 from api_schema_graph import APISchemaGraph
9 from branch_utility import BranchUtility 9 from branch_utility import BranchUtility
10 from extensions_paths import API, JSON_TEMPLATES 10 from extensions_paths import (
11 API, CHROME_API, JSON_TEMPLATES, API_FEATURES, MANIFEST_FEATURES,
12 PERMISSION_FEATURES)
11 from third_party.json_schema_compiler.model import UnixName 13 from third_party.json_schema_compiler.model import UnixName
12 14
13 15
14 _EXTENSION_API = 'extension_api.json' 16 _EXTENSION_API = 'extension_api.json'
15 17
16 # The version where api_features.json is first available. 18 # The version where api_features.json is first available.
17 _API_FEATURES_MIN_VERSION = 28 19 _API_FEATURES_MIN_VERSION = 28
18 # The version where permission_ and manifest_features.json are available and 20 # The version where permission_ and manifest_features.json are available and
19 # presented in the current format. 21 # presented in the current format.
20 _ORIGINAL_FEATURES_MIN_VERSION = 20 22 _ORIGINAL_FEATURES_MIN_VERSION = 20
21 # API schemas are aggregated in extension_api.json up to this version. 23 # API schemas are aggregated in extension_api.json up to this version.
22 _EXTENSION_API_MAX_VERSION = 17 24 _EXTENSION_API_MAX_VERSION = 17
23 # The earliest version for which we have SVN data. 25 # The earliest version for which we have SVN data.
24 _SVN_MIN_VERSION = 5 26 _SVN_MIN_VERSION = 5
25 27
26 28
27 def _GetChannelFromFeatures(api_name, json_fs, filename): 29 def _GetChannelFromFeatures(api_name, json_fs, filename):
28 '''Finds API channel information from the features |filename| within the the 30 '''Finds API channel information from the features |filename| within the the
29 given |json_fs|. Returns None if channel information for the API cannot be 31 given |json_fs|. Returns None if channel information for the API cannot be
30 located. 32 located.
31 ''' 33 '''
32 feature = json_fs.GetFromFile(API + filename).Get().get(api_name) 34 feature = json_fs.GetFromFile(filename).Get().get(api_name)
33 if feature is None: 35 if feature is None:
34 return None 36 return None
35 if isinstance(feature, Mapping): 37 if isinstance(feature, Mapping):
36 # The channel information exists as a solitary dict. 38 # The channel information exists as a solitary dict.
37 return feature.get('channel') 39 return feature.get('channel')
38 # The channel information dict is nested within a list for whitelisting 40 # The channel information dict is nested within a list for whitelisting
39 # purposes. Take the newest channel out of all of the entries. 41 # purposes. Take the newest channel out of all of the entries.
40 return BranchUtility.NewestChannel(entry.get('channel') for entry in feature) 42 return BranchUtility.NewestChannel(entry.get('channel') for entry in feature)
41 43
42 44
43 def _GetChannelFromApiFeatures(api_name, json_fs): 45 def _GetChannelFromApiFeatures(api_name, json_fs):
44 return _GetChannelFromFeatures(api_name, json_fs, '_api_features.json') 46 return _GetChannelFromFeatures(api_name, json_fs, API_FEATURES)
45 47
46 48
47 def _GetChannelFromManifestFeatures(api_name, json_fs): 49 def _GetChannelFromManifestFeatures(api_name, json_fs):
48 # _manifest_features.json uses unix_style API names. 50 # _manifest_features.json uses unix_style API names.
49 api_name = UnixName(api_name) 51 api_name = UnixName(api_name)
50 return _GetChannelFromFeatures(api_name, json_fs, '_manifest_features.json') 52 return _GetChannelFromFeatures(api_name, json_fs, MANIFEST_FEATURES)
51 53
52 54
53 def _GetChannelFromPermissionFeatures(api_name, json_fs): 55 def _GetChannelFromPermissionFeatures(api_name, json_fs):
54 return _GetChannelFromFeatures(api_name, json_fs, '_permission_features.json') 56 return _GetChannelFromFeatures(api_name, json_fs, PERMISSION_FEATURES)
55 57
56 58
57 class AvailabilityFinder(object): 59 class AvailabilityFinder(object):
58 '''Generates availability information for APIs by looking at API schemas and 60 '''Generates availability information for APIs by looking at API schemas and
59 _features files over multiple release versions of Chrome. 61 _features files over multiple release versions of Chrome.
60 ''' 62 '''
61 63
62 def __init__(self, 64 def __init__(self,
63 branch_utility, 65 branch_utility,
64 compiled_fs_factory, 66 compiled_fs_factory,
(...skipping 23 matching lines...) Expand all
88 return self._branch_utility.GetStableChannelInfo(api_info['version']) 90 return self._branch_utility.GetStableChannelInfo(api_info['version'])
89 else: 91 else:
90 return self._branch_utility.GetChannelInfo(api_info['channel']) 92 return self._branch_utility.GetChannelInfo(api_info['channel'])
91 93
92 def _GetApiSchemaFilename(self, api_name, file_system, version): 94 def _GetApiSchemaFilename(self, api_name, file_system, version):
93 '''Gets the name of the file which may contain the schema for |api_name| in 95 '''Gets the name of the file which may contain the schema for |api_name| in
94 |file_system|, or None if the API is not found. Note that this may be the 96 |file_system|, or None if the API is not found. Note that this may be the
95 single _EXTENSION_API file which all APIs share in older versions of Chrome, 97 single _EXTENSION_API file which all APIs share in older versions of Chrome,
96 in which case it is unknown whether the API actually exists there. 98 in which case it is unknown whether the API actually exists there.
97 ''' 99 '''
98 def under_api_path(path): 100 def find_schema_under_path(api_name, path):
99 return API + path 101 # |file_system| will cache the results from the ReadSingle() call.
102 if not file_system.Exists(path).Get():
103 return None
104 filenames = file_system.ReadSingle(path).Get()
105 for ext in ('json', 'idl'):
106 filename = '%s.%s' % (api_name, ext)
107 if filename in filenames:
108 return path + filename
109 if _EXTENSION_API in filenames:
110 return path + _EXTENSION_API
111 # API schema data could not be found in any .json or .idl file.
112 return None
100 113
101 if version == 'trunk' or version > _ORIGINAL_FEATURES_MIN_VERSION: 114 if version == 'trunk' or version > _ORIGINAL_FEATURES_MIN_VERSION:
102 # API schema filenames switch format to unix_hacker_style. 115 # API schema filenames switch format to unix_hacker_style.
103 api_name = UnixName(api_name) 116 api_name = UnixName(api_name)
104 117
105 # |file_system| will cache the results from the ReadSingle() call. 118 filename = find_schema_under_path(api_name, API)
106 filenames = file_system.ReadSingle(API).Get() 119 if filename is not None:
107 120 return filename
108 for ext in ('json', 'idl'): 121 return find_schema_under_path(api_name, CHROME_API)
109 filename = '%s.%s' % (api_name, ext)
110 if filename in filenames:
111 return under_api_path(filename)
112 if _EXTENSION_API in filenames:
113 return under_api_path(_EXTENSION_API)
114 # API schema data could not be found in any .json or .idl file.
115 return None
116 122
117 def _GetApiSchema(self, api_name, file_system, version): 123 def _GetApiSchema(self, api_name, file_system, version):
118 '''Searches |file_system| for |api_name|'s API schema data, and processes 124 '''Searches |file_system| for |api_name|'s API schema data, and processes
119 and returns it if found. 125 and returns it if found.
120 ''' 126 '''
121 api_filename = self._GetApiSchemaFilename(api_name, file_system, version) 127 api_filename = self._GetApiSchemaFilename(api_name, file_system, version)
122 if api_filename is None: 128 if api_filename is None:
123 # No file for the API could be found in the given |file_system|. 129 # No file for the API could be found in the given |file_system|.
124 return None 130 return None
125 131
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 286
281 # Continue looping until there are no longer differences between this 287 # Continue looping until there are no longer differences between this
282 # version and trunk. 288 # version and trunk.
283 return version_stat != trunk_stat 289 return version_stat != trunk_stat
284 290
285 self._file_system_iterator.Ascending(self.GetApiAvailability(api_name), 291 self._file_system_iterator.Ascending(self.GetApiAvailability(api_name),
286 update_availability_graph) 292 update_availability_graph)
287 293
288 self._node_level_object_store.Set(api_name, availability_graph) 294 self._node_level_object_store.Set(api_name, availability_graph)
289 return availability_graph 295 return availability_graph
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698