GREEN: But this is really coding *against* the framework
This is noe the proper way to do it. FastAPI define schemas to do such work. The 'name' parameter was not passed (but seemed to work on live) and i was looking for a database issue. There might have been some colisions on import However this show how to evolve from a mindset to another.
This commit is contained in:
parent
e8aaa18baa
commit
faf4841016
|
@ -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()
|
17
dev.py
17
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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue