test-space / app.py
abhijitkumarjha88192's picture
First code coomit to check html and python api call working
9add385
raw
history blame
2.58 kB
from typing import Optional
from fastapi import FastAPI, APIRouter, Query
from testpkg.finit import api_router, app
from testpkg.schemas import MyDataModel, MyDataSearchResults, CreateMyDataModelEntity
from testpkg.MyDataList import myDataList
@api_router.get("/datas/getall", status_code=200)
def get_all() -> dict:
return {"data": myDataList}
# @api_router.get("/add_rows", status_code=200)
# def add_rows(rowstr:str) -> dict:
# return {"data": arr}
# Updated using to use a response_model
# https://fastapi.tiangolo.com/tutorial/response-model/
@api_router.get("/datas/get/{data_id}", status_code=200)
def get_data(*, data_id: int) -> dict:
"""
Fetch a single data by ID
"""
result = [x for x in myDataList if x["id"] == data_id]
if result:
return result[0]
# Updated using the FastAPI parameter validation `Query` class
# # https://fastapi.tiangolo.com/tutorial/query-params-str-validations/
@api_router.get("/datas/search", status_code=200)
def search_data(*, keyword: Optional[str] = Query(None,min_length=3), max_results: Optional[int] = 3) -> dict:
"""
Search for datas based on text keyword
"""
if not keyword:
# we use Python list slicing to limit results
# based on the max_results query parameter
return {"results": myDataList[:max_results]}
results = filter(lambda x: keyword.lower() in x["text"].lower(), myDataList)
return {"results": list(results)[:max_results]}
# New addition, using Pydantic model `RecipeCreate` to define
# the POST request body
@api_router.post("/datas/create", status_code=201, response_model=MyDataModel)
def create_data(*, my_data: CreateMyDataModelEntity) -> MyDataModel:
"""
Create a new data (in memory only)
"""
new_entry_id = len(myDataList) + 1
entry = MyDataModel(
id=new_entry_id,
text=my_data.text,
description=my_data.description
)
myDataList.append(entry.model_dump())
return entry
# Updated using to use a response_model
# https://fastapi.tiangolo.com/tutorial/response-model/
@api_router.get("/datas/delete/{data_id}", status_code=200)
def delete_data(*, data_id: int) -> dict:
"""
Fetch a single data by ID
"""
result = [x for x in myDataList if x["id"] == data_id]
if result:
myDataList.remove(result[0])
return {"datas":myDataList}
if __name__ == "__main__":
# Use this for debugging purposes only
import uvicorn
app.include_router(api_router)
uvicorn.run(app, host="0.0.0.0", port=8001, log_level="debug")