From 67e4ec2bf0d9605d69c68daa43a9e1f95f4e57a1 Mon Sep 17 00:00:00 2001 From: David <9059044+Tansito@users.noreply.github.com> Date: Mon, 14 Oct 2024 11:12:37 -0400 Subject: [PATCH 1/2] Files refactor --- gateway/api/v1/views/files.py | 74 +++++++++++++++++++++++++++++++++++ gateway/api/views/files.py | 61 ----------------------------- 2 files changed, 74 insertions(+), 61 deletions(-) diff --git a/gateway/api/v1/views/files.py b/gateway/api/v1/views/files.py index 45f3e7e15..e241488f0 100644 --- a/gateway/api/v1/views/files.py +++ b/gateway/api/v1/views/files.py @@ -4,6 +4,9 @@ from rest_framework import permissions +from drf_yasg import openapi +from drf_yasg.utils import swagger_auto_schema + from api.permissions import IsOwner from api import views @@ -14,3 +17,74 @@ class FilesViewSet(views.FilesViewSet): """ permission_classes = [permissions.IsAuthenticated, IsOwner] + + @swagger_auto_schema( + operation_description="List of available for user files", + manual_parameters=[ + openapi.Parameter( + "provider", + openapi.IN_QUERY, + description="provider name", + type=openapi.TYPE_STRING, + required=False, + ), + ], + ) + def list(self, request): + return super().list(request) + + @swagger_auto_schema( + operation_description="Download a specific file", + manual_parameters=[ + openapi.Parameter( + "file", + openapi.IN_QUERY, + description="file name", + type=openapi.TYPE_STRING, + required=True, + ), + openapi.Parameter( + "provider", + openapi.IN_QUERY, + description="provider name", + type=openapi.TYPE_STRING, + required=False, + ), + ], + ) + def download(self, request): + return super().download(request) + + @swagger_auto_schema( + operation_description="Deletes file uploaded or produced by the programs", + request_body=openapi.Schema( + type=openapi.TYPE_OBJECT, + properties={ + "file": openapi.Schema( + type=openapi.TYPE_STRING, description="file name" + ), + "provider": openapi.Schema( + type=openapi.TYPE_STRING, description="provider name" + ), + }, + required=["file"], + ), + ) + def delete(self, request): + return super().delete(request) + + @swagger_auto_schema( + operation_description="Upload selected file", + request_body=openapi.Schema( + type=openapi.TYPE_OBJECT, + properties={ + "file": openapi.Schema(type=openapi.TYPE_FILE, description="file name"), + "provider": openapi.Schema( + type=openapi.TYPE_STRING, description="provider name" + ), + }, + required=["file"], + ), + ) + def upload(self, request): + return super().upload(request) \ No newline at end of file diff --git a/gateway/api/views/files.py b/gateway/api/views/files.py index 6d61e3e16..10a54a4dc 100644 --- a/gateway/api/views/files.py +++ b/gateway/api/views/files.py @@ -9,8 +9,6 @@ import os from wsgiref.util import FileWrapper -from drf_yasg import openapi -from drf_yasg.utils import swagger_auto_schema from django.conf import settings from django.http import StreamingHttpResponse @@ -69,18 +67,6 @@ def check_user_has_provider(self, user, provider_name): """check if user has the provider""" return provider_name in self.list_user_providers(user) - @swagger_auto_schema( - operation_description="List of available for user files", - manual_parameters=[ - openapi.Parameter( - "provider", - openapi.IN_QUERY, - description="provider name", - type=openapi.TYPE_STRING, - required=False, - ), - ], - ) def list(self, request): """List of available for user files.""" response = Response( @@ -115,25 +101,6 @@ def list(self, request): return Response({"results": files}) - @swagger_auto_schema( - operation_description="List of available for user files", - manual_parameters=[ - openapi.Parameter( - "file", - openapi.IN_QUERY, - description="file name", - type=openapi.TYPE_STRING, - required=True, - ), - openapi.Parameter( - "provider", - openapi.IN_QUERY, - description="provider name", - type=openapi.TYPE_STRING, - required=False, - ), - ], - ) @action(methods=["GET"], detail=False) def download(self, request): # pylint: disable=invalid-name """Download selected file.""" @@ -179,21 +146,6 @@ def download(self, request): # pylint: disable=invalid-name response["Content-Disposition"] = f"attachment; filename={filename}" return response - @swagger_auto_schema( - operation_description="Deletes file uploaded or produced by the programs", - request_body=openapi.Schema( - type=openapi.TYPE_OBJECT, - properties={ - "file": openapi.Schema( - type=openapi.TYPE_STRING, description="file name" - ), - "provider": openapi.Schema( - type=openapi.TYPE_STRING, description="provider name" - ), - }, - required=["file"], - ), - ) @action(methods=["DELETE"], detail=False) def delete(self, request): # pylint: disable=invalid-name """Deletes file uploaded or produced by the programs,""" @@ -230,19 +182,6 @@ def delete(self, request): # pylint: disable=invalid-name ) return response - @swagger_auto_schema( - operation_description="Upload selected file", - request_body=openapi.Schema( - type=openapi.TYPE_OBJECT, - properties={ - "file": openapi.Schema(type=openapi.TYPE_FILE, description="file name"), - "provider": openapi.Schema( - type=openapi.TYPE_STRING, description="provider name" - ), - }, - required=["file"], - ), - ) @action(methods=["POST"], detail=False) def upload(self, request): # pylint: disable=invalid-name """Upload selected file.""" From 05d0c06a00fb2facb1552c997efbd425e22c9f69 Mon Sep 17 00:00:00 2001 From: David <9059044+Tansito@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:03:12 -0400 Subject: [PATCH 2/2] Added actions to the v1 files --- gateway/api/v1/views/files.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/gateway/api/v1/views/files.py b/gateway/api/v1/views/files.py index e241488f0..faa5a3150 100644 --- a/gateway/api/v1/views/files.py +++ b/gateway/api/v1/views/files.py @@ -2,10 +2,10 @@ Files view api for V1. """ -from rest_framework import permissions - from drf_yasg import openapi from drf_yasg.utils import swagger_auto_schema +from rest_framework import permissions +from rest_framework.decorators import action from api.permissions import IsOwner from api import views @@ -32,7 +32,7 @@ class FilesViewSet(views.FilesViewSet): ) def list(self, request): return super().list(request) - + @swagger_auto_schema( operation_description="Download a specific file", manual_parameters=[ @@ -52,9 +52,10 @@ def list(self, request): ), ], ) + @action(methods=["GET"], detail=False) def download(self, request): return super().download(request) - + @swagger_auto_schema( operation_description="Deletes file uploaded or produced by the programs", request_body=openapi.Schema( @@ -70,6 +71,7 @@ def download(self, request): required=["file"], ), ) + @action(methods=["DELETE"], detail=False) def delete(self, request): return super().delete(request) @@ -86,5 +88,6 @@ def delete(self, request): required=["file"], ), ) + @action(methods=["POST"], detail=False) def upload(self, request): - return super().upload(request) \ No newline at end of file + return super().upload(request)