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()