Beamlnwza
make view paramas to json
ced9a7f
from fastapi import APIRouter
from src.libs.s3 import s3resource
from src.models.view import ViewResult, ViewImage
from src.models.main import User, Method
from uuid import UUID
router = APIRouter(
prefix="/view",
tags=["View"],
responses={404: {"description": "Not found"}},
)
BUCKET_NAME = "pimthaigans-image-container"
@router.get("/status")
async def status():
return {"status": "OK"}
@router.post("/")
async def view(user: User) -> ViewResult:
s3 = s3resource()
bucket = s3.Bucket('pimthaigans-image-container')
objs = list(bucket.objects.filter(Prefix=f'{user.uuid}/'))
path_objs = [obj.key for obj in objs]
result: ViewResult = await view_all(user, path_objs)
return result
async def view_index(user: User, index: int, path_objs) -> ViewResult:
imgs = [obj for obj in path_objs if obj.endswith(
f'{str(index).zfill(2)}.png')]
if len(imgs) > 0:
img_url = f'https://{BUCKET_NAME}.s3.amazonaws.com/{imgs[0]}'
return ViewResult(user=user, method=Method.index, result=[ViewImage(index=index, image_url=img_url)])
return ViewResult(user=user, method=Method.index, result=None)
async def view_all(user: User, path_objs) -> ViewResult:
img_urls = []
for index in range(0, 88):
imgs = [obj for obj in path_objs if obj.endswith(
f'{str(index).zfill(2)}.png')]
if len(imgs) > 0:
img_urls.append(
f'https://{BUCKET_NAME}.s3.amazonaws.com/{imgs[0]}')
else:
return ViewResult(user=user, method=Method.all, result=None)
return ViewResult(user=user, method=Method.all,
result=[ViewImage(index=index, image_url=img_url) for index, img_url in enumerate(img_urls)])