mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-02 13:45:10 -05:00
133 lines
4.0 KiB
Python
133 lines
4.0 KiB
Python
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
from django.http import HttpResponse
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
from django.views.generic import FormView, DetailView, TemplateView
|
|
|
|
from rest_framework import filters
|
|
from rest_framework.mixins import (
|
|
RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, ListModelMixin)
|
|
from rest_framework.pagination import PageNumberPagination
|
|
from rest_framework.permissions import IsAuthenticated
|
|
from rest_framework.viewsets import (
|
|
ModelViewSet, ReadOnlyModelViewSet, GenericViewSet)
|
|
|
|
from paperless.db import GnuPG
|
|
|
|
from .filters import DocumentFilter, CorrespondentFilter, TagFilter
|
|
from .forms import UploadForm
|
|
from .models import Correspondent, Tag, Document, Log
|
|
from .serialisers import (
|
|
CorrespondentSerializer, TagSerializer, DocumentSerializer, LogSerializer)
|
|
|
|
|
|
class IndexView(TemplateView):
|
|
|
|
template_name = "documents/index.html"
|
|
|
|
def get_context_data(self, **kwargs):
|
|
print(kwargs)
|
|
print(self.request.GET)
|
|
print(self.request.POST)
|
|
return TemplateView.get_context_data(self, **kwargs)
|
|
|
|
|
|
class FetchView(DetailView):
|
|
|
|
model = Document
|
|
|
|
def render_to_response(self, context, **response_kwargs):
|
|
"""
|
|
Override the default to return the unencrypted image/PDF as raw data.
|
|
"""
|
|
|
|
content_types = {
|
|
Document.TYPE_PDF: "application/pdf",
|
|
Document.TYPE_PNG: "image/png",
|
|
Document.TYPE_JPG: "image/jpeg",
|
|
Document.TYPE_GIF: "image/gif",
|
|
Document.TYPE_TIF: "image/tiff",
|
|
}
|
|
|
|
if self.kwargs["kind"] == "thumb":
|
|
return HttpResponse(
|
|
GnuPG.decrypted(self.object.thumbnail_file),
|
|
content_type=content_types[Document.TYPE_PNG]
|
|
)
|
|
|
|
response = HttpResponse(
|
|
GnuPG.decrypted(self.object.source_file),
|
|
content_type=content_types[self.object.file_type]
|
|
)
|
|
response["Content-Disposition"] = 'attachment; filename="{}"'.format(
|
|
self.object.file_name)
|
|
|
|
return response
|
|
|
|
|
|
class PushView(LoginRequiredMixin, FormView):
|
|
"""
|
|
A crude REST-ish API for creating documents.
|
|
"""
|
|
|
|
form_class = UploadForm
|
|
|
|
@classmethod
|
|
def as_view(cls, **kwargs):
|
|
return csrf_exempt(FormView.as_view(**kwargs))
|
|
|
|
def form_valid(self, form):
|
|
return HttpResponse("1")
|
|
|
|
def form_invalid(self, form):
|
|
return HttpResponse("0")
|
|
|
|
|
|
class StandardPagination(PageNumberPagination):
|
|
page_size = 25
|
|
page_size_query_param = "page-size"
|
|
max_page_size = 100000
|
|
|
|
|
|
class CorrespondentViewSet(ModelViewSet):
|
|
model = Correspondent
|
|
queryset = Correspondent.objects.all()
|
|
serializer_class = CorrespondentSerializer
|
|
pagination_class = StandardPagination
|
|
permission_classes = (IsAuthenticated,)
|
|
filter_backends = (filters.DjangoFilterBackend,)
|
|
filter_class = CorrespondentFilter
|
|
|
|
|
|
class TagViewSet(ModelViewSet):
|
|
model = Tag
|
|
queryset = Tag.objects.all()
|
|
serializer_class = TagSerializer
|
|
pagination_class = StandardPagination
|
|
permission_classes = (IsAuthenticated,)
|
|
filter_backends = (filters.DjangoFilterBackend,)
|
|
filter_class = TagFilter
|
|
|
|
|
|
class DocumentViewSet(RetrieveModelMixin,
|
|
UpdateModelMixin,
|
|
DestroyModelMixin,
|
|
ListModelMixin,
|
|
GenericViewSet):
|
|
model = Document
|
|
queryset = Document.objects.all()
|
|
serializer_class = DocumentSerializer
|
|
pagination_class = StandardPagination
|
|
permission_classes = (IsAuthenticated,)
|
|
filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter)
|
|
filter_class = DocumentFilter
|
|
search_fields = ("title", "correspondent__name", "content")
|
|
|
|
|
|
class LogViewSet(ReadOnlyModelViewSet):
|
|
model = Log
|
|
queryset = Log.objects.all().by_group()
|
|
serializer_class = LogSerializer
|
|
pagination_class = StandardPagination
|
|
permission_classes = (IsAuthenticated,)
|
|
filter_backends = (filters.DjangoFilterBackend,)
|