From f15e88f3ae68291228cf546c677011c3e4f27818 Mon Sep 17 00:00:00 2001 From: hanfi <ccc@spahan.ch> Date: Sat, 29 Jul 2023 20:56:46 +0200 Subject: [PATCH] allow register packages by image --- .gitignore | 3 +++ backend/main.py | 13 ++++++++++++- backend/utils.py | 20 ++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ca45ec0..4461783 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,6 @@ venv.bak/ # SQLite Databases *.db + +# images directory +images/ diff --git a/backend/main.py b/backend/main.py index d77f207..0e126d2 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1,7 +1,7 @@ from datetime import datetime, timedelta from uuid import UUID -from fastapi import Depends, FastAPI, HTTPException, Request, status +from fastapi import Depends, FastAPI, HTTPException, Request, UploadFile, status from fastapi.middleware.cors import CORSMiddleware from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm from itsdangerous.serializer import Serializer @@ -67,6 +67,17 @@ def add_item( return utils.prepare_item_shipping(db, item) +@app.post("/item/register", response_model=schemas.Item) +def add_item_with_image( + image: UploadFile, + token: str = Depends(oauth2_scheme), + db: Session = Depends(get_db), +): + check_token(token) + print(image.file) + return utils.add_item_with_image(db, image) + + @app.post("/item/update/{item_uuid}", response_model=schemas.Item) def update_item( item_uuid: str, data: schemas.ItemUpdate, db: Session = Depends(get_db) diff --git a/backend/utils.py b/backend/utils.py index b247acf..aceab63 100644 --- a/backend/utils.py +++ b/backend/utils.py @@ -1,6 +1,8 @@ from datetime import datetime from html import escape from secrets import token_hex +from shutil import copyfileobj +from tempfile import SpooledTemporaryFile from cryptography.exceptions import InvalidSignature from cryptography.hazmat.primitives.asymmetric.ed448 import Ed448PublicKey @@ -53,6 +55,24 @@ def prepare_item_shipping(db: Session, item: schemas.ItemCreatePrepareShipping): return new_item +def add_item_with_image(db: Session, image: SpooledTemporaryFile): + db_item = models.Item() + db.add(db_item) + db.commit() + db_image = models.Image(item_uuid=db_item.uuid) + db.add(db_image) + db.commit() + db.refresh(db_image) + print(db_item.uuid) + print(db_image.uuid) + with open(f"./images/{ db_image.uuid }", "wb") as destination: + try: + copyfileobj(image.file, destination) + finally: + image.file.close + return db_item + + def update_item(db: Session, item: schemas.Item, data: schemas.ItemUpdate): public_key = Ed448PublicKey.from_public_bytes(bytes.fromhex(item.verification)) verify = "" -- GitLab