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 6cb807a..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,8 +26,12 @@ 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 = {} + data = await request.json() + name = name or data["name"] movie = models.Movie() movie.name = name db.add(movie) @@ -38,5 +42,12 @@ async def create_movie(name: str = "", db: Session = Depends(get_db)): 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/test_sql_database.py b/test_sql_database.py index b9526a0..a368476 100644 --- a/test_sql_database.py +++ b/test_sql_database.py @@ -7,6 +7,8 @@ from database import Base from dev import app, get_db from models import Movie +import pytest + SQLALCHEMY_DATABASE_URL = "sqlite://" engine = create_engine( @@ -41,12 +43,6 @@ def test_create_moviem_models(): assert movie.name == name -import pytest - -import pytest - - -@pytest.mark.xfail def test_create_movie_api(): import random @@ -55,5 +51,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