From 231a27025cfea3e29400a77cc4597c5387998b11 Mon Sep 17 00:00:00 2001 From: Sunetra Bar Date: Mon, 17 Nov 2025 23:22:01 +0530 Subject: [PATCH] some error handlers were added here --- model-lab/app/main.py | 2 ++ model-lab/app/utils.py | 0 model-lab/utils/errorHandler.py | 63 +++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) delete mode 100644 model-lab/app/utils.py create mode 100644 model-lab/utils/errorHandler.py diff --git a/model-lab/app/main.py b/model-lab/app/main.py index bb63904..444f4e1 100644 --- a/model-lab/app/main.py +++ b/model-lab/app/main.py @@ -8,6 +8,8 @@ from dotenv import load_dotenv load_dotenv() +from utils.errorHandler import validate_email,check_email_exists,model_load_error,validate_image_file,UnhandledError + app = FastAPI(title="Face Sentiment API") # path to the model diff --git a/model-lab/app/utils.py b/model-lab/app/utils.py deleted file mode 100644 index e69de29..0000000 diff --git a/model-lab/utils/errorHandler.py b/model-lab/utils/errorHandler.py new file mode 100644 index 0000000..6e45add --- /dev/null +++ b/model-lab/utils/errorHandler.py @@ -0,0 +1,63 @@ +import logging +from fastapi import Request,HTTPException,status, UploadFile + +from fastapi.responses import JSONResponse +from sqlalchemy.orm import Session + +from PIL import Image, UnidentifiedImageError +import io +import re + + +logger = logging.getLogger(__name__) +logging.basicConfig(level=logging.INFO, format="%(levelname)s-%(message)s") + +def validate_email(email: str): + email_regex = r'^[\w\.-]+@[\w\.-]+\.\w+$' + if not re.match(email_regex, email): + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail="write your email correctly" + ) + +def check_email_exists(email: str, db: Session): + existing_user = db.query(User).filter(User.email == email).first() + if existing_user: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="Email address already exists." + ) + + +async def model_load_error(req:Request, excp:Exception): + err_msg=f'model loading error {req.url}:{excp}' + logger.error(err_msg) + return JSONResponse( + status_code=500, + content={"detail":"Model Loading error,please try again after some time"} + ) + +def validate_image_file(file: UploadFile) -> Image.Image: + try: + + if not file.filename.lower().endswith(('.png', '.jpg', '.jpeg')): + raise HTTPException(status_code=415, detail="Unsupported image format.") + + + image_bytes = file.file.read() + image = Image.open(io.BytesIO(image_bytes)) + image.verify() + image = Image.open(io.BytesIO(image_bytes)) + return image + + except UnidentifiedImageError: + logger.error(f"Corrupt or unreadable image file: {file.filename}") + raise HTTPException(status_code=400, detail="Uploaded image is corrupt or unreadable.") + +async def UnhandledError(req:Request,excp:Exception ): + err_msg=f'Unhandled error for request {req.url}:{excp}' + logging.error(err_msg) + return JSONResponse( + status_code=500, + content={"detail":"An Internal server error,please try again after some time"} + )