Ejemplo n.º 1
0
class AttachmentLinkListCreateView(ListCreateAPIView):
    permission_classes = (get_attachment_permissions(), )
    serializer_class = AttachmentLinkSerializer

    def set_content_object(self):
        try:
            self.content_type = ContentType.objects.get_by_natural_key(
                self.kwargs.get("app"),
                self.kwargs.get("model"),
            )
        except ContentType.DoesNotExist:
            raise NotFound()

        try:
            self.object_id = self.kwargs.get("object_pk")
            model_cls = self.content_type.model_class()
            self.content_object = model_cls.objects.get(pk=self.object_id)
        except model_cls.DoesNotExist:
            raise NotFound()

    def get_queryset(self):
        self.set_content_object()
        return AttachmentLink.objects.filter(
            content_type=self.content_type,
            object_id=self.object_id,
        )

    def perform_create(self, serializer):
        self.set_content_object()
        serializer.save()
        instance = serializer.instance
        instance.content_type = self.content_type
        instance.object_id = self.object_id
        instance.save()
Ejemplo n.º 2
0
class AttachmentUpdateView(UpdateAPIView):
    queryset = Attachment.objects.all()
    permission_classes = (get_attachment_permissions(), )
    serializer_class = AttachmentFileUploadSerializer
    parser_classes = (
        FormParser,
        MultiPartParser,
    )

    def perform_update(self, serializer):
        # force the updating of the uploaded by field to current user
        # this is not set when PATCH request made
        serializer.instance.uploaded_by = serializer.context["request"].user
        serializer.instance.ip_address = get_client_ip(
            serializer.context["request"])
        self.instance = serializer.save()

    def put(self, *args, **kwargs):
        super().put(*args, **kwargs)
        return Response(
            AttachmentFlatSerializer(
                get_attachment_flat_model().objects.filter(
                    attachment=self.instance).first()).data)

    def patch(self, *args, **kwargs):
        super().patch(*args, **kwargs)
        return Response(
            AttachmentFlatSerializer(
                get_attachment_flat_model().objects.filter(
                    attachment=self.instance).first()).data)
Ejemplo n.º 3
0
class AttachmentListView(ListAPIView):
    queryset = get_attachment_flat_model().objects.exclude(
        Q(attachment__file__isnull=True) | Q(attachment__file__exact=""),
        Q(attachment__hyperlink__isnull=True)
        | Q(attachment__hyperlink__exact=""))
    permission_classes = (get_attachment_permissions(), )
    serializer_class = AttachmentFlatSerializer
    filter_backends = (QueryStringFilterBackend, )
    filter_fields = [f for f in AttachmentFlatSerializer().fields]
Ejemplo n.º 4
0
class AttachmentCreateView(CreateAPIView):
    queryset = Attachment.objects.all()
    permission_classes = (get_attachment_permissions(), )
    serializer_class = AttachmentFileUploadSerializer
    parser_classes = (
        FormParser,
        MultiPartParser,
    )

    def perform_create(self, serializer):
        self.instance = serializer.save()

    @transaction.atomic
    def post(self, *args, **kwargs):
        super().post(*args, **kwargs)
        attachment_flat = get_attachment_flat_model().objects.filter(
            attachment=self.instance).first()
        return Response(AttachmentFlatSerializer(attachment_flat).data)
Ejemplo n.º 5
0
def test_get_attachment_permissions_invalid(settings):
    settings.ATTACHMENT_PERMISSIONS = "demo.sample.wrong.AttachmentPermOverride"
    with pytest.raises(ImproperlyConfigured):
        utils.get_attachment_permissions()
Ejemplo n.º 6
0
def test_get_attachment_permissions_override(settings):
    settings.ATTACHMENT_PERMISSIONS = "demo.sample.permissions.AttachmentPermOverride"
    assert utils.get_attachment_permissions() == AttachmentPermOverride
Ejemplo n.º 7
0
def test_get_attachment_permissions_default():
    assert utils.get_attachment_permissions() == AttachmentPermissions
Ejemplo n.º 8
0
class AttachmentLinkDeleteView(DestroyAPIView):
    queryset = AttachmentLink.objects.all()
    permission_classes = (get_attachment_permissions(), )
    serializer_class = AttachmentLinkSerializer