| OLD | NEW |
| 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 itertools import ifilter | 5 from itertools import ifilter |
| 6 from operator import itemgetter | 6 from operator import itemgetter |
| 7 | 7 |
| 8 from data_source import DataSource | 8 from data_source import DataSource |
| 9 import features_utility as features | 9 import features_utility as features |
| 10 from future import Gettable, Future |
| 10 from svn_constants import PRIVATE_TEMPLATE_PATH | 11 from svn_constants import PRIVATE_TEMPLATE_PATH |
| 11 from third_party.json_schema_compiler.json_parse import Parse | 12 from third_party.json_schema_compiler.json_parse import Parse |
| 12 | 13 |
| 13 def _ListifyPermissions(permissions): | 14 def _ListifyPermissions(permissions): |
| 14 '''Filter out any permissions that do not have a description or with a name | 15 '''Filter out any permissions that do not have a description or with a name |
| 15 that ends with Private then sort permissions features by name into a list. | 16 that ends with Private then sort permissions features by name into a list. |
| 16 ''' | 17 ''' |
| 17 def filter_permissions(perm): | 18 def filter_permissions(perm): |
| 18 return 'description' in perm and not perm['name'].endswith('Private') | 19 return 'description' in perm and not perm['name'].endswith('Private') |
| 19 | 20 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 43 '''Load and format permissions features to be used by templates. | 44 '''Load and format permissions features to be used by templates. |
| 44 ''' | 45 ''' |
| 45 def __init__(self, server_instance, request): | 46 def __init__(self, server_instance, request): |
| 46 self._features_bundle = server_instance.features_bundle | 47 self._features_bundle = server_instance.features_bundle |
| 47 self._object_store = server_instance.object_store_creator.Create( | 48 self._object_store = server_instance.object_store_creator.Create( |
| 48 PermissionsDataSource) | 49 PermissionsDataSource) |
| 49 self._template_cache = server_instance.compiled_fs_factory.ForTemplates( | 50 self._template_cache = server_instance.compiled_fs_factory.ForTemplates( |
| 50 server_instance.host_file_system_provider.GetTrunk()) | 51 server_instance.host_file_system_provider.GetTrunk()) |
| 51 | 52 |
| 52 def _CreatePermissionsData(self): | 53 def _CreatePermissionsData(self): |
| 53 api_features = self._features_bundle.GetAPIFeatures() | 54 api_features_future = self._features_bundle.GetAPIFeatures() |
| 54 permission_features = self._features_bundle.GetPermissionFeatures() | 55 permission_features_future = self._features_bundle.GetPermissionFeatures() |
| 56 def resolve(): |
| 57 permission_features = permission_features_future.Get() |
| 58 _AddDependencyDescriptions(permission_features, api_features_future.Get()) |
| 55 | 59 |
| 56 def filter_for_platform(permissions, platform): | 60 # Turn partial templates into descriptions, ensure anchors are set. |
| 57 return _ListifyPermissions(features.Filtered(permissions, platform)) | 61 for permission in permission_features.values(): |
| 62 if not 'anchor' in permission: |
| 63 permission['anchor'] = permission['name'] |
| 64 if 'partial' in permission: |
| 65 permission['description'] = self._template_cache.GetFromFile('%s/%s' % |
| 66 (PRIVATE_TEMPLATE_PATH, permission['partial'])).Get() |
| 67 del permission['partial'] |
| 58 | 68 |
| 59 _AddDependencyDescriptions(permission_features, api_features) | 69 def filter_for_platform(permissions, platform): |
| 60 # Turn partial templates into descriptions, ensure anchors are set. | 70 return _ListifyPermissions(features.Filtered(permissions, platform)) |
| 61 for permission in permission_features.values(): | 71 return { |
| 62 if not 'anchor' in permission: | 72 'declare_apps': filter_for_platform(permission_features, 'apps'), |
| 63 permission['anchor'] = permission['name'] | 73 'declare_extensions': filter_for_platform( |
| 64 if 'partial' in permission: | 74 permission_features, 'extensions') |
| 65 permission['description'] = self._template_cache.GetFromFile('%s/%s' % | 75 } |
| 66 (PRIVATE_TEMPLATE_PATH, permission['partial'])).Get() | 76 return Future(delegate=Gettable(resolve)) |
| 67 del permission['partial'] | |
| 68 | |
| 69 return { | |
| 70 'declare_apps': filter_for_platform(permission_features, 'apps'), | |
| 71 'declare_extensions': filter_for_platform( | |
| 72 permission_features, 'extensions') | |
| 73 } | |
| 74 | 77 |
| 75 def _GetCachedPermissionsData(self): | 78 def _GetCachedPermissionsData(self): |
| 76 data = self._object_store.Get('permissions_data').Get() | 79 data = self._object_store.Get('permissions_data').Get() |
| 77 if data is None: | 80 if data is None: |
| 78 data = self._CreatePermissionsData() | 81 data = self._CreatePermissionsData().Get() |
| 79 self._object_store.Set('permissions_data', data) | 82 self._object_store.Set('permissions_data', data) |
| 80 return data | 83 return data |
| 81 | 84 |
| 82 def Cron(self): | 85 def Cron(self): |
| 83 # TODO(kalman): Implement this. | 86 return self._CreatePermissionsData() |
| 84 pass | |
| 85 | 87 |
| 86 def get(self, key): | 88 def get(self, key): |
| 87 return self._GetCachedPermissionsData().get(key) | 89 return self._GetCachedPermissionsData().get(key) |
| OLD | NEW |