Skip to main content

Source_Reference

main-memory-fastAPI.py

from typing import Union

from fastapi import FastAPI

from pydantic import BaseModel


import uvicorn # for custom run only

class Item(BaseModel):
name: str
price: float
is_offer: Union[bool, None] = None



app = FastAPI()

_d = {}


@app.get("/")
async def read_root():
return {"Hello": "World"}


@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Union[str, None] = None):
# return {"item_id": item_id, "q": q}
return _d[item_id]


import json

class ItemEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Item):
return {
'name': obj.name,
'price': obj.price,
'is_offer': obj.is_offer
}
return super().default(obj)


@app.get("/items-all")
async def get_all():
return json.dumps(_d, cls=ItemEncoder)


from datetime import datetime
from copy import deepcopy

@app.put("/items/{item_id}")
async def update_item(item_id, item: Item):
# Do something with backend... then return
# return {"item_name": item.name, "item_id": item_id, "updated_date": datetime.now()}
if item_id not in _d:
raise Exception(f"Item Id: {item_id} is not found")

updated_item = deepcopy(item)
updated_item.updated_datetine = datetime.now()
_d[item_id] = updated_item
return updated_item

@app.post("/item")
async def add_item(item: Item):
# Do something with backend... then return
# return {"item_name": item.name, "item_id": item_id, "updated_date": datetime.now()}
item_id = len(_d) + 1
_d[item_id] = item

return _d[item_id]


# Test Header
from fastapi import Header
@app.get("/item-header")
def read_items(user_agent: str = Header(None)):

print("AAA", user_agent)
return {"User-Agent": user_agent}

@app.get("/item-header2")
def read_items(x_token: str = Header(...)):

return {"X-Ttoken": x_token}

if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=8000)