mirror of
https://github.com/ansible/awx.git
synced 2026-02-01 01:28:09 -03:30
Add approve/deny endpoints, fix some typos
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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'),
|
||||
]
|
||||
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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__():
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user