Spaces:
Sleeping
Sleeping
from fastapi import FastAPI, HTTPException | |
from pydantic import BaseModel | |
import os | |
import asyncio | |
from smart_search import SmartSearch | |
# from dotenv import load_dotenv | |
# load_dotenv() | |
app = FastAPI() | |
LOAD_BALANCER_URL = os.getenv("LOAD_BALANCER_URL") | |
search_system = SmartSearch( | |
films_url=f'{LOAD_BALANCER_URL}/api/get/movie/all', | |
tv_series_url=f'{LOAD_BALANCER_URL}/api/get/series/all' | |
) | |
search_system_lock = asyncio.Lock() | |
async def startup_event(): | |
# Start the background task for updating data and initializing | |
asyncio.create_task(update_data_periodically()) | |
async def update_data_periodically(): | |
while True: | |
async with search_system_lock: | |
await search_system.update_data() | |
await asyncio.sleep(120) # Sleep for 2 minutes (120 seconds) | |
class Query(BaseModel): | |
query: str | |
async def index(): | |
return "Server Running ..." | |
async def search(query: Query): | |
query_str = query.query | |
if not query_str: | |
raise HTTPException(status_code=400, detail="Missing 'query' field in JSON body") | |
async with search_system_lock: | |
if not search_system.is_initialized: | |
raise HTTPException(status_code=503, detail="Search system is not initialized yet.") | |
results = search_system.search(query_str) | |
return results | |
async def get_data(): | |
async with search_system_lock: | |
if not search_system.is_initialized: | |
raise HTTPException(status_code=503, detail="Search system is not initialized yet.") | |
films = search_system.films | |
tv_series = search_system.tv_series | |
return {"films": films, "tv_series": tv_series} | |