63 lines
2.6 KiB
Python
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))
|