[New Feature] Rest API implementation to showcase the OpenDBM features

This commit is contained in:
Rudy Haryanto
2022-10-04 03:07:29 +07:00
parent a574bc6870
commit 92e08860a8
41 changed files with 2576 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
import os
import shutil
from fastapi import UploadFile
import boto3
from schemas.file_properties import FileProperties
from services.file.i_file import FileService
AWS_ACCESS_KEY = os.getenv('AWS_ACCESS_KEY', 'DUMMY_KEY')
AWS_SECRET_KEY = os.getenv('AWS_SECRET_KEY', 'DUMMY_SECRET')
S3_BUCKET_NAME = 'odbm-test'
def get_file_service(platform:str) -> FileService:
if platform.lower() == 's3':
return S3FileService()
else:
return MemoryFileService()
client = boto3.client(
's3',
aws_access_key_id=AWS_ACCESS_KEY,
aws_secret_access_key=AWS_SECRET_KEY
)
s3 = boto3.resource(
's3',
aws_access_key_id=AWS_ACCESS_KEY,
aws_secret_access_key=AWS_SECRET_KEY
)
class S3FileService(FileService):
def upload(self, file_properties: FileProperties, file: UploadFile):
print(AWS_ACCESS_KEY)
print(AWS_SECRET_KEY)
s3 = boto3.resource("s3")
bucket = s3.Bucket(S3_BUCKET_NAME)
bucket.upload_fileobj(file.file, file.filename, ExtraArgs={"ACL": "public-read"})
uploaded_file_url = f"https://{S3_BUCKET_NAME}.s3.amazonaws.com/{file.filename}"
return {"returnUrl": uploaded_file_url}
def download(file_properties: FileProperties):
pass
class MemoryFileService(FileService):
def upload(self, file_properties: FileProperties, file: UploadFile):
file_location = f"files/{file.filename}"
with open(file_location, "wb+") as file_object:
shutil.copyfileobj(file.file, file_object)
return {"info": f"file '{file.filename}' saved at '{file_location}'"}
def download(file_properties: FileProperties):
pass