コード例 #1
0
ファイル: serializers.py プロジェクト: qa4osf/osf.io
 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.')
コード例 #2
0
ファイル: serializers.py プロジェクト: qa4osf/osf.io
 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.')
コード例 #3
0
ファイル: serializers.py プロジェクト: jwalz/osf.io
    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()
コード例 #4
0
ファイル: serializers.py プロジェクト: h-ci-user01/osf.h-test
 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.')
コード例 #5
0
ファイル: serializers.py プロジェクト: jwalz/osf.io
    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()