Fix problem with the tests by dynamically setting the view model

instead of using a model @property or lookup method.
This commit is contained in:
Jeff Bradberry
2019-08-16 14:56:25 -04:00
parent edb9d6b16c
commit 2310413dc0
3 changed files with 8 additions and 28 deletions

View File

@@ -3,6 +3,7 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from awx.main.models import JobTemplate
from awx.api.views import ( from awx.api.views import (
JobTemplateList, JobTemplateList,
JobTemplateDetail, JobTemplateDetail,
@@ -45,7 +46,7 @@ urls = [
url(r'^(?P<pk>[0-9]+)/object_roles/$', JobTemplateObjectRolesList.as_view(), name='job_template_object_roles_list'), url(r'^(?P<pk>[0-9]+)/object_roles/$', JobTemplateObjectRolesList.as_view(), name='job_template_object_roles_list'),
url(r'^(?P<pk>[0-9]+)/labels/$', JobTemplateLabelList.as_view(), name='job_template_label_list'), url(r'^(?P<pk>[0-9]+)/labels/$', JobTemplateLabelList.as_view(), name='job_template_label_list'),
url(r'^(?P<pk>[0-9]+)/copy/$', JobTemplateCopy.as_view(), name='job_template_copy'), url(r'^(?P<pk>[0-9]+)/copy/$', JobTemplateCopy.as_view(), name='job_template_copy'),
url(r'^(?P<pk>[0-9]+)/', include('awx.api.urls.webhooks'), {'model_kwarg': 'job_templates'}), url(r'^(?P<pk>[0-9]+)/', include('awx.api.urls.webhooks'), {'model_kwarg': 'job_templates', 'model': JobTemplate}),
] ]
__all__ = ['urls'] __all__ = ['urls']

View File

@@ -3,6 +3,7 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from awx.main.models import WorkflowJobTemplate
from awx.api.views import ( from awx.api.views import (
WorkflowJobTemplateList, WorkflowJobTemplateList,
WorkflowJobTemplateDetail, WorkflowJobTemplateDetail,
@@ -44,7 +45,7 @@ urls = [
url(r'^(?P<pk>[0-9]+)/access_list/$', WorkflowJobTemplateAccessList.as_view(), name='workflow_job_template_access_list'), url(r'^(?P<pk>[0-9]+)/access_list/$', WorkflowJobTemplateAccessList.as_view(), name='workflow_job_template_access_list'),
url(r'^(?P<pk>[0-9]+)/object_roles/$', WorkflowJobTemplateObjectRolesList.as_view(), name='workflow_job_template_object_roles_list'), url(r'^(?P<pk>[0-9]+)/object_roles/$', WorkflowJobTemplateObjectRolesList.as_view(), name='workflow_job_template_object_roles_list'),
url(r'^(?P<pk>[0-9]+)/labels/$', WorkflowJobTemplateLabelList.as_view(), name='workflow_job_template_label_list'), url(r'^(?P<pk>[0-9]+)/labels/$', WorkflowJobTemplateLabelList.as_view(), name='workflow_job_template_label_list'),
url(r'^(?P<pk>[0-9]+)/', include('awx.api.urls.webhooks'), {'model_kwarg': 'workflow_job_templates'}), url(r'^(?P<pk>[0-9]+)/', include('awx.api.urls.webhooks'), {'model_kwarg': 'workflow_job_templates', 'model': WorkflowJobTemplate}),
] ]
__all__ = ['urls'] __all__ = ['urls']

View File

@@ -11,29 +11,15 @@ from rest_framework.response import Response
from awx.api import serializers from awx.api import serializers
from awx.api.generics import APIView, GenericAPIView from awx.api.generics import APIView, GenericAPIView
from awx.api.permissions import WebhookKeyPermission 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): class WebhookKeyView(GenericAPIView):
serializer_class = serializers.EmptySerializer serializer_class = serializers.EmptySerializer
permission_classes = (WebhookKeyPermission,) 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): def get(self, request, *args, **kwargs):
obj = self.get_object() obj = self.get_object()
@@ -55,15 +41,7 @@ class WebhookReceiverBase(APIView):
return super().dispatch(*args, **kwargs) return super().dispatch(*args, **kwargs)
def get_queryset(self): def get_queryset(self):
qs_models = { return self.model.objects.filter(webhook_service=self.service)
'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)
def get_object(self): def get_object(self):
queryset = self.get_queryset() queryset = self.get_queryset()