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} | |