infrasynth-backend-kit/infrasynth/files/views.py
2026-08-28 14:38:47 -05:00

70 lines
2.2 KiB
Python

from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.permissions import IsAuthenticated
from .models import FileCategory, ProcessingPipeline, StoredFile
from .serializers import (
FileCategorySerializer,
ProcessingPipelineSerializer,
StoredFileSerializer,
)
from .services import FileService
class StoredFileViewSet(viewsets.ModelViewSet):
queryset = StoredFile.objects.all()
serializer_class = StoredFileSerializer
permission_classes = [IsAuthenticated]
def initial(self, request, *args, **kwargs):
from infrasynth.features.services import FeatureService
if not FeatureService().is_enabled("files", user=request.user):
from django.http import Http404
raise Http404()
super().initial(request, *args, **kwargs)
def get_queryset(self):
return StoredFile.objects.select_related("category", "uploaded_by").all()
@action(detail=True, methods=["get"])
def download(self, request, pk=None):
stored = self.get_object()
return FileService().get_download_response(stored, request)
class FileCategoryViewSet(viewsets.ModelViewSet):
queryset = FileCategory.objects.all()
serializer_class = FileCategorySerializer
permission_classes = [IsAuthenticated]
def initial(self, request, *args, **kwargs):
from infrasynth.features.services import FeatureService
if not FeatureService().is_enabled("files", user=request.user):
from django.http import Http404
raise Http404()
super().initial(request, *args, **kwargs)
def get_queryset(self):
return FileCategory.objects.all()
class ProcessingPipelineViewSet(viewsets.ModelViewSet):
queryset = ProcessingPipeline.objects.all()
serializer_class = ProcessingPipelineSerializer
permission_classes = [IsAuthenticated]
def initial(self, request, *args, **kwargs):
from infrasynth.features.services import FeatureService
if not FeatureService().is_enabled("files", user=request.user):
from django.http import Http404
raise Http404()
super().initial(request, *args, **kwargs)
def get_queryset(self):
return ProcessingPipeline.objects.all()