wrap up some more implementation, and get caching seriously working

This commit is contained in:
AlanCoding
2016-08-31 16:53:47 -04:00
parent 953b192ff8
commit fa08c8d4bb
4 changed files with 13 additions and 16 deletions

View File

@@ -2153,7 +2153,6 @@ class AdHocCommandRelaunchSerializer(AdHocCommandSerializer):
class SystemJobTemplateSerializer(UnifiedJobTemplateSerializer): class SystemJobTemplateSerializer(UnifiedJobTemplateSerializer):
show_capabilities = ['start', 'schedule', 'edit']
class Meta: class Meta:
model = SystemJobTemplate model = SystemJobTemplate

View File

@@ -1528,10 +1528,9 @@ class InventoryList(ListCreateAPIView):
readable_ids = [obj.id for obj in page] readable_ids = [obj.id for obj in page]
editable_ids = Inventory.accessible_objects(request.user, 'admin_role').filter(pk__in=readable_ids).values_list('pk', flat=True) editable_ids = Inventory.accessible_objects(request.user, 'admin_role').filter(pk__in=readable_ids).values_list('pk', flat=True)
for obj in page: for obj in page:
obj.capabilities_cache = {'edit': False, 'adhoc': False}
if obj.pk in editable_ids: if obj.pk in editable_ids:
obj.can_edit = True obj.capabilities_cache['edit'] = True
else:
obj.can_edit = False
if page is not None: if page is not None:
serializer = self.get_serializer(page, many=True) serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data) return self.get_paginated_response(serializer.data)

View File

@@ -219,18 +219,18 @@ class BaseAccess(object):
elif "features" not in validation_info: elif "features" not in validation_info:
raise LicenseForbids("Features not found in active license.") raise LicenseForbids("Features not found in active license.")
def get_user_capabilities(self, obj, method_list=['edit', 'delete']): def get_user_capabilities(self, obj, method_list):
user_capabilities = {} user_capabilities = {}
# TODO: pull data from the custom cache, which won't be exactly like this for display_method in ['edit', 'delete', 'start', 'schedule', 'copy', 'adhoc']:
# if hasattr(obj, 'get_can_edit'):
# user_capabilities['change'] = obj.get_can_edit(self.user)
# elif hasattr(obj, 'can_edit'):
# user_capabilities['change'] = obj.can_edit
for display_method in ['edit', 'delete', 'start', 'schedule', 'copy']:
# Custom ordering of methods used so we can reuse earlier calcs # Custom ordering of methods used so we can reuse earlier calcs
if display_method not in method_list: if display_method not in method_list:
print ' Programming error: declared unavailable method'
continue
# Grab the answer from the cache, if available
if hasattr(obj, 'capabilities_cache') and display_method in obj.capabilities_cache:
user_capabilities[display_method] = obj.capabilities_cache[display_method]
continue continue
# Aliases for going form UI language to API language # Aliases for going form UI language to API language
@@ -245,6 +245,8 @@ class BaseAccess(object):
elif display_method == 'delete' and not isinstance(obj, (User, UnifiedJob)): elif display_method == 'delete' and not isinstance(obj, (User, UnifiedJob)):
user_capabilities['delete'] = user_capabilities['edit'] user_capabilities['delete'] = user_capabilities['edit']
continue continue
elif display_method == 'adhoc':
method = 'run_ad_hoc_commands'
else: else:
method = display_method method = display_method
@@ -268,7 +270,7 @@ class BaseAccess(object):
try: try:
if method in ['change']: # 3 args if method in ['change']: # 3 args
user_capabilities[display_method] = self.user.can_access(type(obj), method, obj, data) user_capabilities[display_method] = self.user.can_access(type(obj), method, obj, data)
elif method in ['delete', 'start']: # 2 args elif method in ['delete', 'start', 'adhoc']: # 2 args
user_capabilities[display_method] = self.user.can_access(type(obj), method, obj) user_capabilities[display_method] = self.user.can_access(type(obj), method, obj)
elif method in ['add']: # 2 args with data elif method in ['add']: # 2 args with data
user_capabilities[display_method] = self.user.can_access(type(obj), method, data) user_capabilities[display_method] = self.user.can_access(type(obj), method, data)

View File

@@ -325,9 +325,6 @@ class Project(UnifiedJobTemplate, ProjectOptions, ResourceMixin):
kwargs['scm_delete_on_update'] = True kwargs['scm_delete_on_update'] = True
return kwargs return kwargs
def get_can_edit(self, user):
return user in self.admin_role
def create_project_update(self, **kwargs): def create_project_update(self, **kwargs):
return self.create_unified_job(**kwargs) return self.create_unified_job(**kwargs)