gidb-server/src/routes/elements.py

42 lines
1.5 KiB
Python

from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from src.constants import LANGUAGES
from src.errors import Response
from src.types.characters import Character
from src.types.elements import Element
from src.utils import load_index, parse_query_langs, parse_result_lang, load_file
elements = APIRouter(prefix='/elements', tags=['Elements'])
class QueryCharacters(BaseModel):
res: dict[str, list[str]]
@elements.get('/')
async def query_elements(query_field: str = 'names', query_languages: str = 'eng') -> Response:
query_langs = parse_query_langs(query_languages)
response: list[dict[str, list[str]]] = []
for query_lang in query_langs:
chars = load_index(query_lang, 'elements')
response.append({query_lang: list(chars[query_field].keys())})
return Response[list[dict[str, list[str]]]](error=False, response=response)
@elements.get('/{query}')
async def query_element(query: str, query_languages: str = 'eng', result_language: str = 'ru') -> Response[Element]:
query_langs = parse_query_langs(query_languages)
result_lang = parse_result_lang(result_language)
filename = ''
for lang in query_langs:
index: dict[str, str] = load_index(lang, 'elements')['names']
for key, value in index.items():
if key.lower().startswith(query):
filename = value
break
else:
raise HTTPException(404)
return Response[Element](response=load_file(result_lang, 'elements', filename))