Skip to content

Views

hypha.apply.api.v1.screening.views

ScreeningStatusViewSet

Bases: ReadOnlyModelViewSet

permission_classes class-attribute instance-attribute

permission_classes = (IsAuthenticated, IsApplyStaffUser)

filter_backends class-attribute instance-attribute

filter_backends = (DjangoFilterBackend)

filterset_class class-attribute instance-attribute

filterset_class = ScreeningStatusFilter

pagination_class class-attribute instance-attribute

pagination_class = None

queryset class-attribute instance-attribute

queryset = all()

serializer_class class-attribute instance-attribute

serializer_class = ScreeningStatusListSerializer

SubmissionScreeningStatusViewSet

Bases: SubmissionNestedMixin, ListModelMixin, CreateModelMixin, GenericViewSet

permission_classes class-attribute instance-attribute

permission_classes = (IsAuthenticated, IsApplyStaffUser, HasScreenPermission)

serializer_class class-attribute instance-attribute

serializer_class = ScreeningStatusListSerializer

pagination_class class-attribute instance-attribute

pagination_class = None

get_submission_object

get_submission_object()
Source code in hypha/apply/api/v1/mixin.py
def get_submission_object(self):
    return get_object_or_404(ApplicationSubmission, id=self.kwargs["submission_pk"])

get_queryset

get_queryset()
Source code in hypha/apply/api/v1/screening/views.py
def get_queryset(self):
    submission = self.get_submission_object()
    return submission.screening_statuses.all()

create

create(request, *args, **kwargs)
Source code in hypha/apply/api/v1/screening/views.py
def create(self, request, *args, **kwargs):
    ser = ScreeningStatusSerializer(data=request.data)
    ser.is_valid(raise_exception=True)
    submission = self.get_submission_object()
    screening_status = get_object_or_404(
        ScreeningStatus, id=ser.validated_data["id"]
    )
    if not submission.screening_statuses.filter(default=True).exists():
        raise ValidationError(
            {"detail": "Can't set screening decision without default being set"}
        )
    if (
        submission.screening_statuses.exists()
        and submission.screening_statuses.first().yes != screening_status.yes
    ):
        raise ValidationError(
            {"detail": "Can't set screening decision for both yes and no"}
        )
    submission.screening_statuses.add(screening_status)
    ser = self.get_serializer(submission.screening_statuses.all(), many=True)
    return Response(ser.data, status=status.HTTP_201_CREATED)

default

default(request, *args, **kwargs)
Source code in hypha/apply/api/v1/screening/views.py
@action(detail=False, methods=["post"])
def default(self, request, *args, **kwargs):
    ser = ScreeningStatusDefaultSerializer(data=request.data)
    ser.is_valid(raise_exception=True)
    yes = ser.validated_data["yes"]
    submission = self.get_submission_object()
    if submission.screening_statuses.filter(default=False).exists():
        submission.screening_statuses.remove(
            *submission.screening_statuses.filter(default=False)
        )
    screening_status = ScreeningStatus.objects.get(default=True, yes=yes)
    if submission.has_default_screening_status_set:
        default_status = submission.screening_statuses.get()
        submission.screening_statuses.remove(default_status)
    submission.screening_statuses.add(screening_status)
    ser = self.get_serializer(submission.screening_statuses.get(default=True))
    return Response(ser.data, status=status.HTTP_201_CREATED)

destroy

destroy(request, *args, **kwargs)
Source code in hypha/apply/api/v1/screening/views.py
def destroy(self, request, *args, **kwargs):
    screening_status = self.get_object()
    if screening_status.default:
        raise ValidationError(
            {"detail": "Can't delete default screening decision."}
        )
    submission = self.get_submission_object()
    submission.screening_statuses.remove(screening_status)
    ser = self.get_serializer(submission.screening_statuses.all(), many=True)
    return Response(ser.data)