Loading app/common.py +20 −3 Original line number Diff line number Diff line Loading @@ -3,7 +3,24 @@ from pydantic import BaseModel class Response(BaseModel): """This is a model for REST API responses""" class UploadResponse(BaseModel): """This is a model for upload response""" msg: str uid: str class UploadData(BaseModel): """This is a model for file upload""" input_path: str token: str dataset: str user: str class DownloadData(BaseModel): """This is a model for file download""" uid: str output_path: str token: str app/routers/download.py +11 −6 Original line number Diff line number Diff line """This module deals with download route""" from fastapi import APIRouter, Request from fastapi import APIRouter, HTTPException, Request from app.common import Response from remote_data_broker import RemoteDataBroker from ..common import DownloadData # from ..dependencies import get_token_header router = APIRouter( Loading @@ -15,8 +16,12 @@ router = APIRouter( ) @router.get("") async def download_items(request: Request) -> Response: @router.get("", response_model_exclude_none=True) async def download_items(data: DownloadData, request: Request) -> None: broker: RemoteDataBroker = request.app.extra.get("broker") broker.download() return Response(msg="download") try: broker.download(data=data) except Exception: raise HTTPException( status_code=500, detail="Something went wrong, please try later" ) from Exception app/routers/upload.py +12 −6 Original line number Diff line number Diff line """This module deals with upload route""" from fastapi import APIRouter, Request from fastapi import APIRouter, HTTPException, Request # from ..dependencies import get_token_header from remote_data_broker import RemoteDataBroker from ..common import Response from ..common import UploadData, UploadResponse router = APIRouter( prefix="/upload", Loading @@ -15,8 +15,14 @@ router = APIRouter( ) @router.post("", response_model=Response) async def upload_items(request: Request) -> Response: @router.post("", response_model=UploadResponse, response_model_exclude_none=True) async def upload_items(data: UploadData, request: Request) -> UploadResponse: broker: RemoteDataBroker = request.app.extra.get("broker") broker.upload() return Response(msg="upload") try: uid: str = broker.upload(data=data) except Exception: raise HTTPException( status_code=500, detail="Something went wrong, please try later" ) from Exception return UploadResponse(uid=uid) remote_data_broker/__init__.py +2 −3 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ __version__ = "0.1.0" from remote_data_broker.abstract_broker import RemoteDataBroker from remote_data_broker.local_data_broker import LocalDataBroker __all__ = [ "RemoteDataBroker", ] __all__ = ["RemoteDataBroker", "LocalDataBroker"] remote_data_broker/abstract_broker.py +4 −2 Original line number Diff line number Diff line from abc import ABC, abstractmethod from app.common import DownloadData, UploadData class RemoteDataBroker(ABC): """an abstract class for remote data broker""" @abstractmethod def upload(self) -> None: def upload(self, data: UploadData) -> str: pass @abstractmethod def download(self) -> None: def download(self, data: DownloadData) -> None: pass Loading
app/common.py +20 −3 Original line number Diff line number Diff line Loading @@ -3,7 +3,24 @@ from pydantic import BaseModel class Response(BaseModel): """This is a model for REST API responses""" class UploadResponse(BaseModel): """This is a model for upload response""" msg: str uid: str class UploadData(BaseModel): """This is a model for file upload""" input_path: str token: str dataset: str user: str class DownloadData(BaseModel): """This is a model for file download""" uid: str output_path: str token: str
app/routers/download.py +11 −6 Original line number Diff line number Diff line """This module deals with download route""" from fastapi import APIRouter, Request from fastapi import APIRouter, HTTPException, Request from app.common import Response from remote_data_broker import RemoteDataBroker from ..common import DownloadData # from ..dependencies import get_token_header router = APIRouter( Loading @@ -15,8 +16,12 @@ router = APIRouter( ) @router.get("") async def download_items(request: Request) -> Response: @router.get("", response_model_exclude_none=True) async def download_items(data: DownloadData, request: Request) -> None: broker: RemoteDataBroker = request.app.extra.get("broker") broker.download() return Response(msg="download") try: broker.download(data=data) except Exception: raise HTTPException( status_code=500, detail="Something went wrong, please try later" ) from Exception
app/routers/upload.py +12 −6 Original line number Diff line number Diff line """This module deals with upload route""" from fastapi import APIRouter, Request from fastapi import APIRouter, HTTPException, Request # from ..dependencies import get_token_header from remote_data_broker import RemoteDataBroker from ..common import Response from ..common import UploadData, UploadResponse router = APIRouter( prefix="/upload", Loading @@ -15,8 +15,14 @@ router = APIRouter( ) @router.post("", response_model=Response) async def upload_items(request: Request) -> Response: @router.post("", response_model=UploadResponse, response_model_exclude_none=True) async def upload_items(data: UploadData, request: Request) -> UploadResponse: broker: RemoteDataBroker = request.app.extra.get("broker") broker.upload() return Response(msg="upload") try: uid: str = broker.upload(data=data) except Exception: raise HTTPException( status_code=500, detail="Something went wrong, please try later" ) from Exception return UploadResponse(uid=uid)
remote_data_broker/__init__.py +2 −3 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ __version__ = "0.1.0" from remote_data_broker.abstract_broker import RemoteDataBroker from remote_data_broker.local_data_broker import LocalDataBroker __all__ = [ "RemoteDataBroker", ] __all__ = ["RemoteDataBroker", "LocalDataBroker"]
remote_data_broker/abstract_broker.py +4 −2 Original line number Diff line number Diff line from abc import ABC, abstractmethod from app.common import DownloadData, UploadData class RemoteDataBroker(ABC): """an abstract class for remote data broker""" @abstractmethod def upload(self) -> None: def upload(self, data: UploadData) -> str: pass @abstractmethod def download(self) -> None: def download(self, data: DownloadData) -> None: pass