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

Unified Diff: chrome/common/extensions/docs/server2/permission_features.py

Issue 23867003: Docserver: Consolidate features caching and access. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/docs/server2/permission_features.py
diff --git a/chrome/common/extensions/docs/server2/permission_features.py b/chrome/common/extensions/docs/server2/permission_features.py
new file mode 100644
index 0000000000000000000000000000000000000000..d1aa93540a3cf619b36e4722cf0f77a99f04971c
--- /dev/null
+++ b/chrome/common/extensions/docs/server2/permission_features.py
@@ -0,0 +1,82 @@
+# Copyright 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from itertools import ifilter
+from operator import itemgetter
+
+from features import Features
+import features_utility
+from third_party.json_schema_compiler.json_parse import Parse
+
+def _ListifyPermissions(permissions):
not at google - send to devlin 2013/09/23 18:31:30 this should be in the permission_data_source since
+ '''Filter out any permissions that do not have a description or with a name
+ that ends with Private then sort permissions features by name into a list.
+ '''
+ def filter_permissions(perm):
+ return 'description' in perm and not perm['name'].endswith('Private')
+
+ return sorted(
+ ifilter(filter_permissions, permissions.values()),
+ key=itemgetter('name'))
+
+def _AddDependencyDescriptions(permissions, api_features, template_data_source):
+ '''Use |api_features| to determine the dependencies APIs have on |permission|.
+ Add a description to the permission based on those dependencies.
+ '''
+ for permission in permissions:
+ # Don't overwrite the description created by expanding a partial template.
+ if 'partial' in permission or not permission['platforms']:
+ continue
+ has_deps = False
+ if name in api_features:
+ for dependency in api_features[name].get('dependencies', ()):
+ if dependency.startswith('permission:'):
+ has_deps = True
+ if has_deps:
+ permission['partial'] = 'permissions/generic_description'
+
+ for permission in permissions:
+ # Turn partial templates into descriptions, ensure anchors are set.
+ if not 'anchor' in permission:
+ permission['anchor'] = permission['name']
+ if 'partial' in permission:
+ permission['description'] = self._template_data_source.get(
+ permission['partial'])
+ del permission['partial']
+
+class PermissionFeatures(Features):
+ '''Subclass of Features to provide permission descriptions derived from API
+ dependencies and filter private or undescribed permissions.
+ '''
+ def __init__(self,
+ compiled_fs_factory,
+ permission_features_path,
+ file_system,
+ permissions_json_path):
+ self._file_system = file_system
+ self._permissions_json_path = permissions_json_path
+ self._template_data_source = None
+ super(PermissionFeatures, self).__init__(compiled_fs_factory,
+ permission_features_path)
+
+ def Parse(self, features_json):
+ permissions_json = Parse(
+ self._file_system.ReadSingle(self._permissions_json_path))
+ permission_features = features_utility.MergedWith(
+ features_utility.Parse(features_json), permissions_json)
+ return permission_features
+
+ def CreateCache(self, features):
+ return {
+ 'declare_apps': _ListifyPermissions(
+ self.FilterByPlatform(features, 'apps')),
+ 'declare_extensions': _ListifyPermissions(
+ self.FilterByPlatform(features, 'extensions'))
+ }
not at google - send to devlin 2013/09/23 18:31:30 so... this overrides CreateCache from Features? i
+
+ def AddDependencyDescriptions(self, api_features, template_data_source):
+ for platform in ('declare_apps', 'declare_extensions'):
+ _AddDependencyDescriptions(self.get(platform),
+ api_features,
+ template_data_source)

Powered by Google App Engine
This is Rietveld 408576698