quantum-serverless/gateway/api/v1/views/files.py

249 lines
7.6 KiB
Python

"""
Files view api for V1.
"""
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
class FilesViewSet(views.FilesViewSet):
"""
Files view set.
"""
permission_classes = [permissions.IsAuthenticated, IsOwner]
@swagger_auto_schema(
operation_description="List of available files in the user directory",
manual_parameters=[
openapi.Parameter(
"provider",
openapi.IN_QUERY,
description="provider name",
type=openapi.TYPE_STRING,
required=False,
),
openapi.Parameter(
"function",
openapi.IN_QUERY,
description="function title",
type=openapi.TYPE_STRING,
required=True,
),
],
)
def list(self, request):
return super().list(request)
@swagger_auto_schema(
operation_description="List of available files in the provider directory",
manual_parameters=[
openapi.Parameter(
"provider",
openapi.IN_QUERY,
description="provider name",
type=openapi.TYPE_STRING,
required=True,
),
openapi.Parameter(
"function",
openapi.IN_QUERY,
description="function title",
type=openapi.TYPE_STRING,
required=True,
),
],
)
@action(methods=["GET"], detail=False, url_path="provider")
def provider_list(self, request):
return super().provider_list(request)
@swagger_auto_schema(
operation_description="Download a specific file in the user directory",
manual_parameters=[
openapi.Parameter(
"file",
openapi.IN_QUERY,
description="File name",
type=openapi.TYPE_STRING,
required=True,
),
openapi.Parameter(
"function",
openapi.IN_QUERY,
description="Qiskit Function title",
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):
return super().download(request)
@swagger_auto_schema(
operation_description="Download a specific file in the provider directory",
manual_parameters=[
openapi.Parameter(
"file",
openapi.IN_QUERY,
description="File name",
type=openapi.TYPE_STRING,
required=True,
),
openapi.Parameter(
"function",
openapi.IN_QUERY,
description="Qiskit Function title",
type=openapi.TYPE_STRING,
required=True,
),
openapi.Parameter(
"provider",
openapi.IN_QUERY,
description="Provider name",
type=openapi.TYPE_STRING,
required=True,
),
],
)
@action(methods=["GET"], detail=False, url_path="provider/download")
def provider_download(self, request):
return super().provider_download(request)
@swagger_auto_schema(
operation_description="Deletes file uploaded or produced by the programs",
manual_parameters=[
openapi.Parameter(
"file",
openapi.IN_QUERY,
description="File name",
type=openapi.TYPE_STRING,
required=True,
),
openapi.Parameter(
"function",
openapi.IN_QUERY,
description="Qiskit Function title",
type=openapi.TYPE_STRING,
required=True,
),
openapi.Parameter(
"provider",
openapi.IN_QUERY,
description="Provider name",
type=openapi.TYPE_STRING,
required=False,
),
],
)
@action(methods=["DELETE"], detail=False)
def delete(self, request):
return super().delete(request)
@swagger_auto_schema(
operation_description="Deletes file uploaded or produced by the programs",
manual_parameters=[
openapi.Parameter(
"file",
openapi.IN_QUERY,
description="File name",
type=openapi.TYPE_STRING,
required=True,
),
openapi.Parameter(
"function",
openapi.IN_QUERY,
description="Qiskit Function title",
type=openapi.TYPE_STRING,
required=True,
),
openapi.Parameter(
"provider",
openapi.IN_QUERY,
description="Provider name",
type=openapi.TYPE_STRING,
required=True,
),
],
)
@action(methods=["DELETE"], detail=False, url_path="provider/delete")
def provider_delete(self, request):
return super().provider_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 to be uploaded"
)
},
required=["file"],
),
manual_parameters=[
openapi.Parameter(
"function",
openapi.IN_QUERY,
description="Qiskit Function title",
type=openapi.TYPE_STRING,
required=True,
),
openapi.Parameter(
"provider",
openapi.IN_QUERY,
description="Provider name",
type=openapi.TYPE_STRING,
required=False,
),
],
)
@action(methods=["POST"], detail=False)
def upload(self, request):
return super().upload(request)
@swagger_auto_schema(
operation_description="Upload a file into the provider directory",
request_body=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
"file": openapi.Schema(
type=openapi.TYPE_FILE, description="File to be uploaded"
)
},
required=["file"],
),
manual_parameters=[
openapi.Parameter(
"function",
openapi.IN_QUERY,
description="Qiskit Function title",
type=openapi.TYPE_STRING,
required=True,
),
openapi.Parameter(
"provider",
openapi.IN_QUERY,
description="Provider name",
type=openapi.TYPE_STRING,
required=True,
),
],
)
@action(methods=["POST"], detail=False, url_path="provider/upload")
def provider_upload(self, request):
return super().provider_upload(request)