def create(self, validated_data): trigger = validated_data.pop('trigger') user = validated_data.pop('user') target = validated_data.pop('target') comment = validated_data.pop('comment', '') permissions = validated_data.pop('permissions', '') visible = validated_data.pop('visible', '') try: if trigger == DefaultTriggers.ACCEPT.value: return target.run_accept(user=user, comment=comment, permissions=permissions, visible=visible) if trigger == DefaultTriggers.REJECT.value: return target.run_reject(user, comment) if trigger == DefaultTriggers.EDIT_COMMENT.value: return target.run_edit_comment(user, comment) if trigger == DefaultTriggers.SUBMIT.value: return target.run_submit(user) except InvalidTriggerError as e: # Invalid transition from the current state raise Conflict(e.message) else: raise JSONAPIAttributeException(attribute='trigger', detail='Invalid trigger.')
def create(self, validated_data): trigger = validated_data.get('trigger') if trigger != ReviewTriggers.WITHDRAW.value: return super(ReviewActionSerializer, self).create(validated_data) user = validated_data.pop('user') target = validated_data.pop('target') comment = validated_data.pop('comment', '') try: return target.run_withdraw(user=user, comment=comment) except InvalidTriggerError as e: # Invalid transition from the current state raise Conflict(e.message) else: raise JSONAPIAttributeException(attribute='trigger', detail='Invalid trigger.')
def create(self, validated_data): user = self.context['request'].user trigger = validated_data.get('trigger') target = validated_data.pop('target') comment = validated_data.pop('comment', '') previous_action = target.actions.last() old_state = target.reviews_state try: if trigger == SchemaResponseTriggers.SUBMIT.db_name: required_approvers = [ user.id for user, node in target.parent. get_admin_contributors_recursive(unique_users=True) ] target.submit(user=user, comment=comment, required_approvers=required_approvers) elif trigger == SchemaResponseTriggers.APPROVE.db_name: target.approve(user=user, comment=comment) elif trigger == SchemaResponseTriggers.ACCEPT.db_name: target.accept(user=user, comment=comment) elif trigger == SchemaResponseTriggers.ADMIN_REJECT.db_name: target.reject(user=user, comment=comment) elif trigger == SchemaResponseTriggers.MODERATOR_REJECT.db_name: target.reject(user=user, comment=comment) else: raise JSONAPIAttributeException(attribute='trigger', detail='Invalid trigger.') except PermissionsError as exc: raise PermissionDenied(exc) except MachineError: raise Conflict( f'Trigger "{trigger}" is not supported for the target SchemaResponse ' f'with id [{target._id}] in state "{target.reviews_state}"', ) except ValueError as exc: raise ValidationError(exc) new_action = target.actions.last() if new_action is None or new_action == previous_action or new_action.trigger != trigger: raise Conflict( f'Trigger "{trigger}" is not supported for the target SchemaResponse ' f'with id [{target._id}] in state "{old_state}"', ) return target.actions.last()
def create(self, validated_data): trigger = validated_data.pop('trigger') user = validated_data.pop('user') target = validated_data.pop('target') comment = validated_data.pop('comment', '') try: if trigger == Triggers.ACCEPT.value: return target.reviews_accept(user, comment) if trigger == Triggers.REJECT.value: return target.reviews_reject(user, comment) if trigger == Triggers.EDIT_COMMENT.value: return target.reviews_edit_comment(user, comment) if trigger == Triggers.SUBMIT.value: return target.reviews_submit(user) except InvalidTriggerError as e: # Invalid transition from the current state raise Conflict(e.message) else: raise JSONAPIAttributeException(attribute='trigger', detail='Invalid trigger.')
def create(self, validated_data): trigger = validated_data.get('trigger') target = validated_data.pop('target') comment = validated_data.pop('comment', '') user = validated_data.pop('user') sanction = target.sanction try: if trigger in [ RegistrationModerationTriggers.ACCEPT_WITHDRAWAL.db_name, RegistrationModerationTriggers.ACCEPT_SUBMISSION.db_name ]: sanction.accept(user=user, comment=comment) elif trigger in [ RegistrationModerationTriggers.REJECT_SUBMISSION.db_name, RegistrationModerationTriggers.REJECT_WITHDRAWAL.db_name ]: sanction.reject(user=user, comment=comment) elif trigger == RegistrationModerationTriggers.FORCE_WITHDRAW.db_name: target.retract_registration( user=user, justification=comment, moderator_initiated=True, ) else: raise JSONAPIAttributeException(attribute='trigger', detail='Invalid trigger.') except InvalidTriggerError: # Invalid transition from the current state short_message = 'Operation not allowed at this time' long_message = f'This {trigger} is invalid for the current state of the registration' raise HTTPError( http_status.HTTP_400_BAD_REQUEST, data={ 'message_short': short_message, 'message_long': long_message }, ) except PermissionsError: raise PermissionDenied( 'You do not have permission to perform this trigger at this time' ) except ValueError: raise PermissionDenied( 'You do not have permission to perform this trigger at this time' ) except MachineError: raise PermissionDenied( 'You do not have permission to perform this trigger at this time' ) target.refresh_from_db() determined_trigger = target.actions.last().trigger if determined_trigger != trigger: short_message = 'Operation not allowed at this time' long_message = f'This {trigger} is invalid for the current state of the registration.' raise HTTPError( http_status.HTTP_400_BAD_REQUEST, data={ 'message_short': short_message, 'message_long': long_message }, ) return target.actions.last()