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 |