Add approve/deny endpoints, fix some typos

This commit is contained in:
beeankha
2019-07-10 16:12:48 -04:00
committed by Ryan Petrello
parent d76e9125e8
commit 82e0b2121b
6 changed files with 45 additions and 18 deletions

View File

@@ -3401,11 +3401,18 @@ class WorkflowJobCancelSerializer(WorkflowJobSerializer):
fields = ('can_cancel',)
class WorkflowApprovalViewSerializer(UnifiedJobSerializer):
class Meta:
model = WorkflowApproval
fields = []
class WorkflowApprovalSerializer(UnifiedJobSerializer):
class Meta:
model = WorkflowApproval
fields = ('*', '-controller_node', '-execution_node',)
fields = (['*', '-controller_node', '-execution_node',])
def get_related(self, obj):
res = super(WorkflowApprovalSerializer, self).get_related(obj)
@@ -3414,9 +3421,12 @@ class WorkflowApprovalSerializer(UnifiedJobSerializer):
res['workflow_approval_template'] = self.reverse('api:workflow_approval_template_detail',
kwargs={'pk': obj.workflow_approval_template.pk})
res['notifications'] = self.reverse('api:workflow_approval_notifications_list', kwargs={'pk': obj.pk})
res['approve'] = self.reverse('api:workflow_approval_approve', kwargs={'pk': obj.pk})
res['deny'] = self.reverse('api:workflow_approval_deny', kwargs={'pk': obj.pk})
return res
class WorkflowApprovalListSerializer(WorkflowApprovalSerializer, UnifiedJobListSerializer):
class Meta:

View File

@@ -6,6 +6,8 @@ from django.conf.urls import url
from awx.api.views import (
WorkflowApprovalList,
WorkflowApprovalDetail,
WorkflowApprovalApprove,
WorkflowApprovalDeny,
WorkflowApprovalNotificationsList,
)
@@ -13,8 +15,8 @@ from awx.api.views import (
urls = [
url(r'^$', WorkflowApprovalList.as_view(), name='workflow_approval_list'),
url(r'^(?P<pk>[0-9]+)/$', WorkflowApprovalDetail.as_view(), name='workflow_approval_detail'),
url(r'^(?P<pk>[0-9]+)/approve/$', WorkflowApprovalDetail.as_view(), name='approved_workflow'),
url(r'^(?P<pk>[0-9]+)/reject/$', WorkflowApprovalDetail.as_view(), name='rejected_workflow'),
url(r'^(?P<pk>[0-9]+)/approve/$', WorkflowApprovalApprove.as_view(), name='workflow_approval_approve'),
url(r'^(?P<pk>[0-9]+)/deny/$', WorkflowApprovalDeny.as_view(), name='workflow_approval_deny'),
url(r'^(?P<pk>[0-9]+)/notifications/$', WorkflowApprovalNotificationsList.as_view(), name='workflow_approval_notifications_list'),
]

View File

@@ -4,8 +4,8 @@
from django.conf.urls import url
from awx.api.views import (
WorfklowApprovalTemplateList,
WorfklowApprovalTemplateDetail,
WorkflowApprovalTemplateList,
WorkflowApprovalTemplateDetail,
WorkflowApprovalTemplateJobsList,
WorkflowApprovalTemplateNotificationTemplatesErrorList,
WorkflowApprovalTemplateNotificationTemplatesStartedList,
@@ -14,8 +14,8 @@ from awx.api.views import (
urls = [
url(r'^$', WorfklowApprovalTemplateList.as_view(), name='workflow_approval_template_list'),
url(r'^(?P<pk>[0-9]+)/$', WorfklowApprovalTemplateDetail.as_view(), name='workflow_approval_template_detail'),
url(r'^$', WorkflowApprovalTemplateList.as_view(), name='workflow_approval_template_list'),
url(r'^(?P<pk>[0-9]+)/$', WorkflowApprovalTemplateDetail.as_view(), name='workflow_approval_template_detail'),
url(r'^(?P<pk>[0-9]+)/approvals/$', WorkflowApprovalTemplateJobsList.as_view(), name='workflow_approval_template_jobs_list'),
url(r'^(?P<pk>[0-9]+)/notification_templates_started/$', WorkflowApprovalTemplateNotificationTemplatesStartedList.as_view(),
name='workflow_approval_template_notification_templates_started_list'),

View File

@@ -4407,18 +4407,13 @@ for attr, value in list(locals().items()):
setattr(this_module, name, view)
class WorfklowApprovalTemplateList(ListAPIView):
class WorkflowApprovalTemplateList(ListCreateAPIView):
model = models.WorkflowApprovalTemplate
serializer_class = serializers.WorkflowApprovalTemplateSerializer
def get(self, request, *args, **kwargs):
if not request.user.is_superuser and not request.user.is_system_auditor:
raise PermissionDenied(_("Superuser privileges needed."))
return super(WorfklowApprovalTemplateList, self).get(request, *args, **kwargs)
class WorfklowApprovalTemplateDetail(RetrieveAPIView):
class WorkflowApprovalTemplateDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPIView):
model = models.WorkflowApprovalTemplate
serializer_class = serializers.WorkflowApprovalTemplateSerializer
@@ -4472,6 +4467,26 @@ class WorkflowApprovalDetail(UnifiedJobDeletionMixin, RetrieveDestroyAPIView):
serializer_class = serializers.WorkflowApprovalSerializer
class WorkflowApprovalApprove(RetrieveAPIView):
model = models.WorkflowApproval
serializer_class = serializers.WorkflowApprovalViewSerializer
def post(self, request, *args, **kwargs):
obj = self.get_object()
obj.approve()
return Response(status=status.HTTP_202_ACCEPTED)
class WorkflowApprovalDeny(RetrieveAPIView):
model = models.WorkflowApproval
serializer_class = serializers.WorkflowApprovalViewSerializer
def post(self, request, *args, **kwargs):
obj = self.get_object()
obj.deny()
return Response(status=status.HTTP_202_ACCEPTED)
class WorkflowApprovalNotificationsList(SubListAPIView):
model = models.Notification

View File

@@ -2812,7 +2812,7 @@ class WorkflowApprovalTemplateAccess(BaseAccess):
return True
def filtered_queryset(self):
return self.model.objects.all()
return self.model.filter(workflowjobtemplatenodes__workflow_job_template=WorkflowJobTemplate.accessible_pk_qs(self.user, 'read_role'))
for cls in BaseAccess.__subclasses__():

View File

@@ -648,10 +648,10 @@ class WorkflowApproval(UnifiedJob):
self.status = 'successful'
self.save()
schedule_task_manager()
return reverse('api:approved_workflow', kwargs={'pk': self.pk}, request=request)
return reverse('api:workflow_approval_approve', kwargs={'pk': self.pk}, request=request)
def reject(self, request=None):
def deny(self, request=None):
self.status = 'failed'
self.save()
schedule_task_manager()
return reverse('api:rejected_workflow', kwargs={'pk': self.pk}, request=request)
return reverse('api:workflow_approval_deny', kwargs={'pk': self.pk}, request=request)