diff --git a/crud.py b/crud.py index abb3f46..f238ce9 100644 --- a/crud.py +++ b/crud.py @@ -1,5 +1,5 @@ +import sqlalchemy from sqlalchemy.orm import Session - import models # import schemas @@ -28,5 +28,8 @@ def get_movie_by_id(db: Session, id_: str = ""): id_ = int(id_) except ValueError: pass - db_movie = db.query(models.Movie).filter(models.Movie.id == id_) - return db_movie.one() + try: + db_movie = db.query(models.Movie).filter(models.Movie.id == id_).one() + except sqlalchemy.exc.NoResultFound: + raise LookupError + return db_movie diff --git a/dev.py b/dev.py index d7f47e0..0788b24 100644 --- a/dev.py +++ b/dev.py @@ -1,4 +1,4 @@ -from fastapi import FastAPI, Depends, Request +from fastapi import FastAPI, Depends, Request, HTTPException from sqlalchemy.orm import Session @@ -47,9 +47,13 @@ async def create_movie( @app.get("/movies/{id_}") async def get_movie(id_: str, db: Session = Depends(get_db)): - movie = crud.get_movie_by_id(db, id_) - out = {k: v for (k, v) in movie.__dict__.items() if not k.startswith("_")} - return out + try: + movie = crud.get_movie_by_id(db, id_) + out = {k: v for (k, v) in movie.__dict__.items() if not k.startswith("_")} + except LookupError: + raise HTTPException(status_code=404, detail=f"No movie found with id {id_}") + else: + return out @app.get("/movies/")