icm/dev.py

75 lines
1.7 KiB
Python

from fastapi import FastAPI, Depends, Request, HTTPException
from sqlalchemy.orm import Session
import uvicorn
import database
import models
import crud
app = FastAPI()
# Dependency
def get_db():
db = database.SessionLocal()
try:
yield db
finally:
db.close()
@app.get("/")
async def root():
return {"message": "Hello World"}
@app.post("/movies/")
async def create_movie(
name: str = "", db: Session = Depends(get_db), request: Request = None
):
out = {}
try: # Bypass for dev
data = await request.json()
except:
data = {}
crud_params = dict(
genres=data.get("genres", ["Unknown"]),
description=data.get("description", ""),
title=data.get("title", ""),
vote_average=data.get("vote_average"),
vote_count=data.get("vote_count"),
)
movie = crud.create_movie(db, **crud_params)
out = {"message": f"Created {movie.title} XX", "id": movie.id}
return out
@app.get("/movies/{id_}")
async def get_movie(id_: str, db: Session = Depends(get_db)):
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/")
async def list_movie(db: Session = Depends(get_db)):
movies = crud.get_all_movies(db)
out = [
{k: v for (k, v) in movie.__dict__.items() if not k.startswith("_")}
for movie in movies
]
return out
if __name__ == "__main__":
database.create_db()
uvicorn.run(app, host="127.0.0.1", port=5000)