Revert to using the explicit dispatch to the appropriate model

since passing the model class at url include time doesn't work.
This commit is contained in:
Jeff Bradberry
2019-08-19 15:13:34 -04:00
parent 771ef275d4
commit 6b86cf6e86
3 changed files with 21 additions and 5 deletions

View File

@@ -3,7 +3,6 @@
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,
@@ -46,7 +45,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', 'model': JobTemplate}), url(r'^(?P<pk>[0-9]+)/', include('awx.api.urls.webhooks'), {'model_kwarg': 'job_templates'}),
] ]
__all__ = ['urls'] __all__ = ['urls']

View File

@@ -3,7 +3,6 @@
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,
@@ -45,7 +44,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', 'model': WorkflowJobTemplate}), url(r'^(?P<pk>[0-9]+)/', include('awx.api.urls.webhooks'), {'model_kwarg': 'workflow_job_templates'}),
] ]
__all__ = ['urls'] __all__ = ['urls']

View File

@@ -11,6 +11,7 @@ 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 # NOTE: The model class attribute for these views must be added
# dynamically when including urls/webhooks.py # dynamically when including urls/webhooks.py
@@ -20,6 +21,15 @@ class WebhookKeyView(GenericAPIView):
serializer_class = serializers.EmptySerializer serializer_class = serializers.EmptySerializer
permission_classes = (WebhookKeyPermission,) permission_classes = (WebhookKeyPermission,)
def get_queryset(self):
qs_models = {
'job_templates': JobTemplate,
'workflow_job_templates': WorkflowJobTemplate,
}
self.model = qs_models.get(self.kwargs['model_kwarg'])
return super().get_queryset()
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
obj = self.get_object() obj = self.get_object()
@@ -41,7 +51,15 @@ class WebhookReceiverBase(APIView):
return super().dispatch(*args, **kwargs) return super().dispatch(*args, **kwargs)
def get_queryset(self): def get_queryset(self):
return self.model.objects.filter(webhook_service=self.service) 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)
def get_object(self): def get_object(self):
queryset = self.get_queryset() queryset = self.get_queryset()