Update timeout implementation, placeholder code for possible websocket support

This commit is contained in:
beeankha
2019-08-07 16:40:09 -04:00
committed by Ryan Petrello
parent 8c17990750
commit 544a5063f3
6 changed files with 52 additions and 16 deletions

View File

@@ -121,8 +121,8 @@ SUMMARIZABLE_FK_FIELDS = {
'job_template': DEFAULT_SUMMARY_FIELDS,
'workflow_job_template': DEFAULT_SUMMARY_FIELDS,
'workflow_job': DEFAULT_SUMMARY_FIELDS,
'workflow_approval_template': DEFAULT_SUMMARY_FIELDS,
'workflow_approval': DEFAULT_SUMMARY_FIELDS,
'workflow_approval_template': DEFAULT_SUMMARY_FIELDS + ('timeout',),
'workflow_approval': DEFAULT_SUMMARY_FIELDS + ('timeout',),
'schedule': DEFAULT_SUMMARY_FIELDS + ('next_run',),
'unified_job_template': DEFAULT_SUMMARY_FIELDS + ('unified_job_type',),
'last_job': DEFAULT_SUMMARY_FIELDS + ('finished', 'status', 'failed', 'license_error'),
@@ -3413,10 +3413,16 @@ class WorkflowApprovalViewSerializer(UnifiedJobSerializer):
class WorkflowApprovalSerializer(UnifiedJobSerializer):
can_approve_or_deny = serializers.SerializerMethodField()
approval_expiration = serializers.SerializerMethodField()
class Meta:
model = WorkflowApproval
fields = (['*', '-controller_node', '-execution_node', 'can_approve_or_deny'])
fields = (['*', '-controller_node', '-execution_node', 'can_approve_or_deny', 'approval_expiration'])
def get_approval_expiration(self, obj):
if obj.status != 'pending' or obj.timeout == 0:
return None
return now() + timedelta(seconds=obj.timeout)
def get_can_approve_or_deny(self, obj):
request = self.context.get('request', None)
@@ -3437,9 +3443,15 @@ class WorkflowApprovalSerializer(UnifiedJobSerializer):
class WorkflowApprovalListSerializer(WorkflowApprovalSerializer, UnifiedJobListSerializer):
can_approve_or_deny = serializers.SerializerMethodField()
approval_expiration = serializers.SerializerMethodField()
class Meta:
fields = ('*', '-execution_node', '-controller_node', 'can_approve_or_deny')
fields = ('*', '-execution_node', '-controller_node', 'can_approve_or_deny', 'approval_expiration')
def get_approval_expiration(self, obj):
if obj.status != 'pending' or obj.timeout == 0:
return None
return now() + timedelta(seconds=obj.timeout)
def get_can_approve_or_deny(self, obj):
request = self.context.get('request', None)

View File

@@ -4457,7 +4457,8 @@ class WorkflowApprovalApprove(RetrieveAPIView):
def post(self, request, *args, **kwargs):
obj = self.get_object()
request.user.can_access(models.WorkflowApproval, 'approve_or_deny', obj)
if not request.user.can_access(models.WorkflowApproval, 'approve_or_deny', obj):
raise PermissionDenied(detail=_("User does not have permission to approve or deny this workflow."))
if obj.status != 'pending':
return Response("This workflow step has already been approved or denied.", status=status.HTTP_400_BAD_REQUEST)
obj.approve()
@@ -4471,7 +4472,8 @@ class WorkflowApprovalDeny(RetrieveAPIView):
def post(self, request, *args, **kwargs):
obj = self.get_object()
request.user.can_access(models.WorkflowApproval, 'approve_or_deny', obj)
if not request.user.can_access(models.WorkflowApproval, 'approve_or_deny', obj):
raise PermissionDenied(detail=_("User does not have permission to approve or deny this workflow."))
if obj.status != 'pending':
return Response("This workflow step has already been approved or denied.", status=status.HTTP_400_BAD_REQUEST)
obj.deny()