Searcher / router.py
Antalela's picture
fixed languages endpoint sorting
9e45c99
from fastapi import FastAPI, HTTPException, Header, Query
from pydantic import BaseModel, StrictStr
from searcher import user_Data
import json
app = FastAPI()
user_Agent = user_Data()
# Load dictionary once at startup
with open("country_city_dict.json", "r", encoding="utf-8") as f:
COUNTRY_CITY_DATA = json.load(f)
with open("languages.json", "r", encoding="utf-8") as f:
LANGUAGES_DATA = json.load(f)
@app.get("/")
async def get_request():
HTTPException(status_code=500, detail="Internal Server Error")
class InputData(BaseModel):
businessName: StrictStr
country: StrictStr
city: StrictStr
@app.post("/get")
async def run_script(input_Data: InputData, token: str = Header(None, alias="api-token")):
try:
if token:
res = user_Agent.get_Search_Results(input_Data, token)
if res:
return {"status": 200, "data": res}
else:
raise HTTPException(status_code=500, detail="The request can not be fulfilled")
else:
raise HTTPException(status_code=400, detail="Missing 'api-token'.")
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.get("/cities")
async def get_cities(country: str = Query(default="", description="Country name")):
"""
- If 'country' is empty: returns list of supported countries
- If 'country' is valid: returns list of cities
- Else: raises 400 error
"""
if not country: # return all supported countries
return {"data": sorted(list(COUNTRY_CITY_DATA.keys()))}
if country in COUNTRY_CITY_DATA: # return cities for valid country
return {"data": sorted(COUNTRY_CITY_DATA[country])}
# otherwise -> error
raise HTTPException(status_code=400, detail=f"Unsupported country: {country}")
@app.get("/languages")
async def get_cities():
"""
returns a json of languages as keys and theyr code as value
"""
return {"data": dict(sorted(LANGUAGES_DATA.items(), key=lambda item: item[1]))}