From 2310413dc06593625c0bfedbffba5b45d80dd7e7 Mon Sep 17 00:00:00 2001 From: Jeff Bradberry Date: Fri, 16 Aug 2019 14:56:25 -0400 Subject: [PATCH] Fix problem with the tests by dynamically setting the view model instead of using a model @property or lookup method. --- awx/api/urls/job_template.py | 3 ++- awx/api/urls/workflow_job_template.py | 3 ++- awx/api/views/webhooks.py | 30 ++++----------------------- 3 files changed, 8 insertions(+), 28 deletions(-) diff --git a/awx/api/urls/job_template.py b/awx/api/urls/job_template.py index 77252eb7e3..18305984bf 100644 --- a/awx/api/urls/job_template.py +++ b/awx/api/urls/job_template.py @@ -3,6 +3,7 @@ from django.conf.urls import include, url +from awx.main.models import JobTemplate from awx.api.views import ( JobTemplateList, JobTemplateDetail, @@ -45,7 +46,7 @@ urls = [ url(r'^(?P[0-9]+)/object_roles/$', JobTemplateObjectRolesList.as_view(), name='job_template_object_roles_list'), url(r'^(?P[0-9]+)/labels/$', JobTemplateLabelList.as_view(), name='job_template_label_list'), url(r'^(?P[0-9]+)/copy/$', JobTemplateCopy.as_view(), name='job_template_copy'), - url(r'^(?P[0-9]+)/', include('awx.api.urls.webhooks'), {'model_kwarg': 'job_templates'}), + url(r'^(?P[0-9]+)/', include('awx.api.urls.webhooks'), {'model_kwarg': 'job_templates', 'model': JobTemplate}), ] __all__ = ['urls'] diff --git a/awx/api/urls/workflow_job_template.py b/awx/api/urls/workflow_job_template.py index b9deda499a..6d8608e6c1 100644 --- a/awx/api/urls/workflow_job_template.py +++ b/awx/api/urls/workflow_job_template.py @@ -3,6 +3,7 @@ from django.conf.urls import include, url +from awx.main.models import WorkflowJobTemplate from awx.api.views import ( WorkflowJobTemplateList, WorkflowJobTemplateDetail, @@ -44,7 +45,7 @@ urls = [ url(r'^(?P[0-9]+)/access_list/$', WorkflowJobTemplateAccessList.as_view(), name='workflow_job_template_access_list'), url(r'^(?P[0-9]+)/object_roles/$', WorkflowJobTemplateObjectRolesList.as_view(), name='workflow_job_template_object_roles_list'), url(r'^(?P[0-9]+)/labels/$', WorkflowJobTemplateLabelList.as_view(), name='workflow_job_template_label_list'), - url(r'^(?P[0-9]+)/', include('awx.api.urls.webhooks'), {'model_kwarg': 'workflow_job_templates'}), + url(r'^(?P[0-9]+)/', include('awx.api.urls.webhooks'), {'model_kwarg': 'workflow_job_templates', 'model': WorkflowJobTemplate}), ] __all__ = ['urls'] diff --git a/awx/api/views/webhooks.py b/awx/api/views/webhooks.py index eeec1edc05..e9a7c7bbd3 100644 --- a/awx/api/views/webhooks.py +++ b/awx/api/views/webhooks.py @@ -11,29 +11,15 @@ from rest_framework.response import Response from awx.api import serializers from awx.api.generics import APIView, GenericAPIView from awx.api.permissions import WebhookKeyPermission -from awx.main.models import JobTemplate, WorkflowJobTemplate + +# NOTE: The model class attribute for these views must be added +# dynamically when including urls/webhooks.py class WebhookKeyView(GenericAPIView): serializer_class = serializers.EmptySerializer permission_classes = (WebhookKeyPermission,) - @property - def model(self): - qs_models = { - 'job_templates': JobTemplate, - 'workflow_job_templates': WorkflowJobTemplate, - } - model = qs_models.get(self.kwargs['model_kwarg']) - return model - - def get_queryset(self): - model = self.model - if model: - return self.request.user.get_queryset(model) - # Provide a fallback do-nothing queryset so that get_object() has something to work with. - return JobTemplate.objects.none() - def get(self, request, *args, **kwargs): obj = self.get_object() @@ -55,15 +41,7 @@ class WebhookReceiverBase(APIView): return super().dispatch(*args, **kwargs) def get_queryset(self): - qs_models = { - 'job_templates': JobTemplate, - 'workflow_job_templates': WorkflowJobTemplate, - } - model = qs_models.get(self.kwargs['model_kwarg']) - if model is None: - raise PermissionDenied - - return model.objects.filter(webhook_service=self.service) + return self.model.objects.filter(webhook_service=self.service) def get_object(self): queryset = self.get_queryset()