|
from typing import Optional |
|
import uvicorn |
|
from fastapi import FastAPI, APIRouter, Query |
|
|
|
from myschemas import MyDataModel, MyDataSearchResults, CreateMyDataModelEntity |
|
from MyDataList import myDataList |
|
|
|
|
|
app = FastAPI(title="General Purpose API", openapi_url="/openapi.json") |
|
|
|
api_router = APIRouter() |
|
|
|
from fastapi.middleware.cors import CORSMiddleware |
|
|
|
|
|
|
|
|
|
|
|
|
|
origins = [ |
|
"https://huggingface.co", |
|
"https://huggingface.co/spaces/abhijitkumarjha88192/test-space", |
|
"*" |
|
] |
|
|
|
app.add_middleware( |
|
CORSMiddleware, |
|
allow_origins=origins, |
|
allow_credentials=True, |
|
allow_methods=["*"], |
|
allow_headers=["*"], |
|
) |
|
|
|
|
|
@api_router.get("/", status_code=200) |
|
def root() -> dict: |
|
""" |
|
Root GET |
|
""" |
|
return {"msg": "Hello, World!"} |
|
|
|
|
|
@api_router.get("/datas/getall", status_code=200) |
|
def get_all() -> dict: |
|
return {"data": myDataList} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@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] |
|
|
|
|
|
|
|
|
|
@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: |
|
|
|
|
|
return {"results": myDataList[:max_results]} |
|
|
|
results = filter(lambda x: keyword.lower() in x["text"].lower(), myDataList) |
|
return {"results": list(results)[:max_results]} |
|
|
|
|
|
|
|
|
|
@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 |
|
|
|
|
|
|
|
|
|
@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} |
|
|
|
app.include_router(api_router) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|