gidb-server/src/routes/characters.py

63 lines
2.6 KiB
Python

from fastapi import APIRouter, HTTPException
from src.errors import Response
from src.types.characters import Character, Constellations, Talents
from src.utils import load_index, parse_query_langs, parse_result_lang, load_category, load_file, get_file_name
characters = APIRouter(prefix='/characters', tags=['Characters'])
@characters.get('/')
async def get_characters(query_field: str = 'names', query_languages: str = 'eng') -> Response:
query_langs = parse_query_langs(query_languages)
response = []
for query_lang in query_langs:
chars = load_index(query_lang, 'characters')
response.append({query_lang: list(chars[query_field].keys())})
return Response(error=False, response=response)
@characters.get('/{name}')
async def get_character(
name: str, query_languages: str = 'eng', result_language: str = 'ru',
images: bool = False, stats: bool = False, url: bool = False
) -> Response[Character]:
query_langs = parse_query_langs(query_languages)
result_lang = parse_result_lang(result_language)
filename = get_file_name(name, 'characters', query_langs)
response = load_category(result_lang, 'characters', filename)
if images:
images_file = load_file('image', 'characters')
response.update({'images': images_file[filename]})
if stats:
stats_file = load_file('stats', 'characters')
response.update({'stats': stats_file[filename]})
if url:
url_file = load_file('url', 'characters')
if filename in url_file:
response.update({'url': url_file[filename]})
version_file = load_file('version', 'characters')
response.update({'version': version_file[filename]})
return Response[Character](response=response)
@characters.get('/{name}/constellations')
async def get_constellations(
name: str, query_languages: str = 'eng', result_language: str = 'ru',
) -> Response[Constellations]:
query_langs = parse_query_langs(query_languages)
result_lang = parse_result_lang(result_language)
filename = get_file_name(name, 'characters', query_langs)
return Response[Constellations](response=load_category(result_lang, 'constellations', filename))
@characters.get('/{name}/talents')
async def get_talents(name: str, query_languages: str = 'eng', result_language: str = 'ru',) -> Response[Talents]:
query_langs = parse_query_langs(query_languages)
result_lang = parse_result_lang(result_language)
filename = get_file_name(name, 'characters', query_langs)
return Response[Talents](response=load_category(result_lang, 'talents', filename))