Index: chrome/common/extensions/docs/server2/manifest_data_source.py |
diff --git a/chrome/common/extensions/docs/server2/manifest_data_source.py b/chrome/common/extensions/docs/server2/manifest_data_source.py |
index 6a850da177c6c63aa6c3ebd6266c7073d49524e1..4ccdcd753bdc512e29407138c6289d61fd97d904 100644 |
--- a/chrome/common/extensions/docs/server2/manifest_data_source.py |
+++ b/chrome/common/extensions/docs/server2/manifest_data_source.py |
@@ -2,134 +2,15 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
-import json |
- |
from data_source import DataSource |
-import features_utility |
-from manifest_features import CreateManifestFeatures, ConvertDottedKeysToNested |
-from third_party.json_schema_compiler.json_parse import Parse |
- |
-def _ListifyAndSortDocs(features, app_name): |
- '''Convert a |feautres| dictionary, and all 'children' dictionaries, into |
- lists recursively. Sort lists first by 'level' then by name. |
- ''' |
- def sort_key(item): |
- '''Key function to sort items primarily by level (according to index into |
- levels) then subsort by name. |
- ''' |
- levels = ('required', 'recommended', 'only_one', 'optional') |
- |
- return (levels.index(item.get('level', 'optional')), item['name']) |
- |
- def coerce_example_to_feature(feature): |
- '''To display json in examples more clearly, convert the example of |
- |feature| into the feature format, with a name and children, to be rendered |
- by the templates. Only applicable to examples that are dictionaries. |
- ''' |
- if not isinstance(feature.get('example'), dict): |
- if 'example' in feature: |
- feature['example'] = json.dumps(feature['example']) |
- return |
- # Add any keys/value pairs in the dict as children |
- for key, value in feature['example'].iteritems(): |
- if not 'children' in feature: |
- feature['children'] = {} |
- feature['children'][key] = { 'name': key, 'example': value } |
- del feature['example'] |
- del feature['has_example'] |
- |
- def convert_and_sort(features): |
- for key, value in features.items(): |
- if 'example' in value: |
- value['has_example'] = True |
- example = json.dumps(value['example']) |
- if example == '{}': |
- value['example'] = '{...}' |
- elif example == '[]': |
- value['example'] = '[...]' |
- else: |
- coerce_example_to_feature(value) |
- if 'children' in value: |
- features[key]['children'] = convert_and_sort(value['children']) |
- return sorted(features.values(), key=sort_key) |
- |
- # Replace {{title}} in the 'name' manifest property example with |app_name| |
- if 'name' in features: |
- name = features['name'] |
- name['example'] = name['example'].replace('{{title}}', app_name) |
- |
- features = convert_and_sort(features) |
- |
- return features |
- |
-def _AddLevelAnnotations(features): |
- '''Add level annotations to |features|. |features| and children lists must be |
- sorted by 'level'. Annotations are added to the first item in a group of |
- features of the same 'level'. |
- |
- The last item in a list has 'is_last' set to True. |
- ''' |
- annotations = { |
- 'required': 'Required', |
- 'recommended': 'Recommended', |
- 'only_one': 'Pick one (or none)', |
- 'optional': 'Optional' |
- } |
- |
- def add_annotation(item, annotation): |
- if not 'annotations' in item: |
- item['annotations'] = [] |
- item['annotations'].insert(0, annotation) |
- |
- def annotate(parent_level, features): |
- current_level = parent_level |
- for item in features: |
- level = item.get('level', 'optional') |
- if level != current_level: |
- add_annotation(item, annotations[level]) |
- current_level = level |
- if 'children' in item: |
- annotate(level, item['children']) |
- if features: |
- features[-1]['is_last'] = True |
- |
- annotate('required', features) |
- return features |
class ManifestDataSource(DataSource): |
'''Provides access to the properties in manifest features. |
''' |
def __init__(self, server_instance, _): |
- self._manifest_path = server_instance.manifest_json_path |
+ self._features_bundle = server_instance.features_bundle |
self._features_path = server_instance.manifest_features_path |
self._file_system = server_instance.host_file_system |
- self._cache = server_instance.compiled_host_fs_factory.Create( |
- self._CreateManifestData, ManifestDataSource) |
- |
- def _CreateManifestData(self, _, content): |
- '''Combine the contents of |_manifest_path| and |_features_path| and filter |
- the results into lists specific to apps or extensions for templates. Marks |
- up features with annotations. |
- ''' |
- def for_templates(manifest_features, platform): |
- return _AddLevelAnnotations( |
- _ListifyAndSortDocs( |
- ConvertDottedKeysToNested( |
- features_utility.Filtered(manifest_features, platform)), |
- app_name=platform.capitalize())) |
- |
- manifest_json = Parse(self._file_system.ReadSingle(self._manifest_path)) |
- manifest_features = CreateManifestFeatures( |
- features_json=Parse(content), manifest_json=manifest_json) |
- |
- return { |
- 'apps': for_templates(manifest_features, 'app'), |
- 'extensions': for_templates(manifest_features, 'extension') |
- } |
- |
- def Cron(self): |
- self._cache.GetFromFile(self._features_path) |
- self._file_system.ReadSingle(self._manifest_path) |
def get(self, key): |
- return self._cache.GetFromFile(self._features_path)[key] |
+ return self._features_bundle.get('manifest').get(key) |