brewman/brewman/brewman/routers/db_image.py

62 lines
1.5 KiB
Python
Raw Normal View History

import uuid
2020-10-07 15:18:43 +00:00
from io import BytesIO
from typing import List
2020-10-07 15:18:43 +00:00
import brewman.schemas.voucher as output
from fastapi import APIRouter, Depends, Security
from fastapi.responses import StreamingResponse
from sqlalchemy.orm import Session
from ..core.security import get_user
from ..db.session import SessionLocal
2020-10-07 15:18:43 +00:00
from ..models.voucher import DbImage
from ..schemas.auth import UserToken
2020-10-07 15:18:43 +00:00
router = APIRouter()
# Dependency
def get_db() -> Session:
try:
db = SessionLocal()
yield db
finally:
db.close()
@router.get("/{id_}/{type_}")
2020-05-31 09:11:11 +00:00
def db_image(id_: uuid.UUID, type_: str, db: Session = Depends(get_db)):
item = db.query(DbImage).filter(DbImage.id == id_).first()
if type_ == "thumbnail":
item = BytesIO(item.thumbnail)
else:
item = BytesIO(item.image)
return StreamingResponse(item, media_type="image/jpeg")
def save_files(voucher_id: uuid.UUID, i: List[bytes], t: List[bytes], db: Session):
i = i or []
t = t or []
for index, value in enumerate(i):
db.add(DbImage(voucher_id, "voucher", i[index], t[index]))
2020-05-31 09:11:11 +00:00
def update_files(
2020-10-07 15:18:43 +00:00
voucher_id: uuid.UUID,
data: List[output.ImageUpload],
i: List[bytes],
t: List[bytes],
db: Session,
2020-05-31 09:11:11 +00:00
):
i = i or []
t = t or []
old = [f.id_ for f in data if f.id_]
images = db.query(DbImage).filter(DbImage.resource_id == voucher_id).all()
for image in [i for i in images if i.id not in old]:
db.delete(image)
for index, value in enumerate(i):
db.add(DbImage(voucher_id, "voucher", i[index], t[index]))