From bcee4fd482fd0d503a571e2eb6421b3e2fdffbea Mon Sep 17 00:00:00 2001 From: Colin Goutte Date: Fri, 25 Aug 2023 15:33:08 +0200 Subject: [PATCH] Screwed up with git --- crud.py | 27 +++++++++++++++++++++++++++ dev.py | 19 ++++++++++++++----- utests/__init__.py | 0 utests/test_sql_database.py | 18 +++++++++++++++++- 4 files changed, 58 insertions(+), 6 deletions(-) create mode 100644 crud.py create mode 100644 utests/__init__.py diff --git a/crud.py b/crud.py new file mode 100644 index 0000000..e1b51d6 --- /dev/null +++ b/crud.py @@ -0,0 +1,27 @@ +from sqlalchemy.orm import Session + +import models + +# import schemas + + +def create_movie(db: Session, name: str = ""): + db_movie = models.Movie(name=name) + db.add(db_movie) + db.commit() + db.refresh(db_movie) + return db_movie + + +def get_movie_by_name(db: Session, name: str = ""): + db_movie = db.query(models.Movie).filter(models.Movie.name == name) + return db.movie.all() + + +def get_movie_by_id(db: Session, id_: str = ""): + try: + id_ = int(id_) + except ValueError: + pass + db_movie = db.query(models.Movie).filter(models.Movie.id == id_) + return db_movie.one() diff --git a/dev.py b/dev.py index 77b0842..338a5e2 100644 --- a/dev.py +++ b/dev.py @@ -1,10 +1,10 @@ -from fastapi import FastAPI, Depends +from fastapi import FastAPI, Depends, Request from sqlalchemy.orm import Session import uvicorn from database import SessionLocal, engine import models - +import crud models.Base.metadata.create_all(bind=engine) @@ -26,19 +26,28 @@ async def root(): @app.post("/movies/") -async def create_movie(name: str = "", db: Session = Depends(get_db)): +async def create_movie( + name: str = "", db: Session = Depends(get_db), request: Request = None +): out = {} - assert name + data = await request.json() + name = name or data["name"] movie = models.Movie() movie.name = name db.add(movie) db.flush() db.commit() db.refresh(movie) - breakpoint() out = {"message": f"Created {movie.name} XX", "id": movie.id} return out +@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 + + if __name__ == "__main__": uvicorn.run(app, host="127.0.0.1", port=5000) diff --git a/utests/__init__.py b/utests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/utests/test_sql_database.py b/utests/test_sql_database.py index 77c1cd8..c102fd7 100644 --- a/utests/test_sql_database.py +++ b/utests/test_sql_database.py @@ -60,6 +60,22 @@ def test_sample_crud(): assert movie.name == name +def test_list_movies(): + response = client.get("/movies/") + assert response.json() == [] + + N = 10 + names = [] + with db_context() as db: + for _ in range(N): + name = f"rand_{random.randint(1, 1000)}" + names.append(name) + crud.create_movie(db, name=name) + + movies = client.get("movies") + by_name = {} + + def test_create_movie_api(): import random @@ -68,5 +84,5 @@ def test_create_movie_api(): assert response.status_code == 200 movie_id = response.json()["id"] assert f"Created {name}" in response.json()["message"] - response = client.get("movie", movie_id) + response = client.get(f"/movies/{movie_id}") assert response.json()["name"] == name