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

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

Issue 368973002: Docserver: Add more support for object level availability in templates (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 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 import posixpath 5 import posixpath
6 6
7 from api_schema_graph import APISchemaGraph 7 from api_schema_graph import APISchemaGraph
8 from branch_utility import BranchUtility, ChannelInfo 8 from branch_utility import BranchUtility, ChannelInfo
9 from extensions_paths import API_PATHS, JSON_TEMPLATES 9 from extensions_paths import API_PATHS, JSON_TEMPLATES
10 from features_bundle import FeaturesBundle 10 from features_bundle import FeaturesBundle
11 from file_system import FileNotFoundError 11 from file_system import FileNotFoundError
12 from third_party.json_schema_compiler.memoize import memoize 12 from third_party.json_schema_compiler.memoize import memoize
13 from third_party.json_schema_compiler.model import UnixName 13 from third_party.json_schema_compiler.model import UnixName
14 14
15 15
16 _DEVTOOLS_API = 'devtools_api.json' 16 _DEVTOOLS_API = 'devtools_api.json'
17 _EXTENSION_API = 'extension_api.json' 17 _EXTENSION_API = 'extension_api.json'
18 # The version where api_features.json is first available. 18 # The version where api_features.json is first available.
19 _API_FEATURES_MIN_VERSION = 28 19 _API_FEATURES_MIN_VERSION = 28
20 # The version where permission_ and manifest_features.json are available and 20 # The version where permission_ and manifest_features.json are available and
21 # presented in the current format. 21 # presented in the current format.
22 _ORIGINAL_FEATURES_MIN_VERSION = 20 22 _ORIGINAL_FEATURES_MIN_VERSION = 20
23 # 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.
24 _EXTENSION_API_MAX_VERSION = 17 24 _EXTENSION_API_MAX_VERSION = 17
25 # The earliest version for which we have SVN data. 25 # The earliest version for which we have SVN data.
26 _SVN_MIN_VERSION = 5 26 _SVN_MIN_VERSION = 5
27 27
28 28
29 def _GetNamespaceFromFilename(api_name):
30 '''API names passed in from the templates follow a different naming
31 convention than the actual API namespace names. Convert |api_name|
32 to its proper namespace name.
33 '''
34 # Devtools APIs are located in a devtools/ directory
35 # (e.g. devtools/panels.json). The namespace will be devtools.panels.
36 if 'devtools/' in api_name:
37 api_name = api_name.replace('/', '.')
38 # Experimental API filenames have a 'experimental_' prefixed to them (e.g.
39 # devtools/experimental_audits.json). The namespace always has
40 # 'experimental.' prefixed to it (e.g. experimental.devtools.audits).
41 if 'experimental_' in api_name:
42 api_name = 'experimental.' + api_name.replace('experimental_', '')
43 # API filenames use '_'s as separators; the separator for namespaces is
44 # always a '.'.
45 api_name = api_name.replace('_', '.')
46 return api_name
47
48
49 def _GetChannelFromFeatures(api_name, features): 29 def _GetChannelFromFeatures(api_name, features):
50 '''Finds API channel information for |api_name| from |features|. 30 '''Finds API channel information for |api_name| from |features|.
51 Returns None if channel information for the API cannot be located. 31 Returns None if channel information for the API cannot be located.
52 ''' 32 '''
53 feature = features.Get().get(api_name) 33 feature = features.Get().get(api_name)
54 return feature.get('channel') if feature else None 34 return feature.get('channel') if feature else None
55 35
56 36
57 def _GetChannelFromAPIFeatures(api_name, features_bundle): 37 def _GetChannelFromAPIFeatures(api_name, features_bundle):
58 return _GetChannelFromFeatures(api_name, features_bundle.GetAPIFeatures()) 38 return _GetChannelFromFeatures(api_name, features_bundle.GetAPIFeatures())
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 292
313 availability = AvailabilityInfo(channel_info, scheduled=scheduled) 293 availability = AvailabilityInfo(channel_info, scheduled=scheduled)
314 294
315 self._top_level_object_store.Set(api_name, availability) 295 self._top_level_object_store.Set(api_name, availability)
316 return availability 296 return availability
317 297
318 def GetAPINodeAvailability(self, api_name): 298 def GetAPINodeAvailability(self, api_name):
319 '''Returns an APISchemaGraph annotated with each node's availability (the 299 '''Returns an APISchemaGraph annotated with each node's availability (the
320 ChannelInfo at the oldest channel it's available in). 300 ChannelInfo at the oldest channel it's available in).
321 ''' 301 '''
322 api_name = _GetNamespaceFromFilename(api_name)
323 availability_graph = self._node_level_object_store.Get(api_name).Get() 302 availability_graph = self._node_level_object_store.Get(api_name).Get()
324 if availability_graph is not None: 303 if availability_graph is not None:
325 return availability_graph 304 return availability_graph
326 305
327 def assert_not_none(value): 306 def assert_not_none(value):
328 assert value is not None 307 assert value is not None
329 return value 308 return value
330 309
331 availability_graph = APISchemaGraph() 310 availability_graph = APISchemaGraph()
332 host_fs = self._host_file_system 311 host_fs = self._host_file_system
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 # Continue looping until there are no longer differences between this 356 # Continue looping until there are no longer differences between this
378 # version and trunk. 357 # version and trunk.
379 return version_stat != trunk_stat 358 return version_stat != trunk_stat
380 359
381 self._file_system_iterator.Ascending( 360 self._file_system_iterator.Ascending(
382 self.GetAPIAvailability(api_name).channel_info, 361 self.GetAPIAvailability(api_name).channel_info,
383 update_availability_graph) 362 update_availability_graph)
384 363
385 self._node_level_object_store.Set(api_name, availability_graph) 364 self._node_level_object_store.Set(api_name, availability_graph)
386 return availability_graph 365 return availability_graph
OLDNEW
« no previous file with comments | « chrome/common/extensions/docs/server2/app.yaml ('k') | chrome/common/extensions/docs/server2/availability_finder_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698