added version route; fix images

This commit is contained in:
ScuroNeko 2023-11-12 19:22:49 +03:00
parent 5a2c1d9bc7
commit 4f152233ca
7 changed files with 110 additions and 18 deletions

2
data

@ -1 +1 @@
Subproject commit 50e2b26da886b97536db8c511394145e06b2c597
Subproject commit df34257e5adc98acfa514eb6a91aae7dc4be4733

View File

@ -26,6 +26,8 @@ from src.routes.tcg import tcg
from src.routes.weaponmaterialtypes import weapon_material_types
from src.routes.weapons import weapons
from src.routes.api import api
app = FastAPI(title='Genshin Impact DB')
@ -47,7 +49,7 @@ async def validation_error(_, e: ValidationError):
routers = [achievements, adventure_ranks, animals, artifacts, characters, crafts, domains, elements, enemies, foods,
geographies, materials, namecards, outfits, talent_material_types, weapon_material_types, weapons, gliders,
tcg]
tcg, api]
for router in routers:
app.include_router(router)

View File

@ -1,6 +1,10 @@
version = '1.0'
DEFAULT_QUERY = ['English']
SERVER_VERSION = '1.0'
GAME_VERSION = '4.2.0'
DEFAULT_QUERY = ['English', 'Russian']
DEFAULT_RESULT = 'Russian'
LANGUAGES = ['English', 'Russian', 'Japanese']
LANGUAGES = ['English', 'French', 'German', 'Indonesian', 'Italian',
'Japanese', 'Korean', 'Portuguese', 'Russian', 'Spanish',
'Thai', 'Turkish', 'Vietnamese']
DATA_FOLDER = 'data'

54
src/routes/api.py Normal file
View File

@ -0,0 +1,54 @@
from fastapi import APIRouter
from subprocess import check_output
from src.constants import GAME_VERSION, SERVER_VERSION
from src.errors import Response
api = APIRouter(prefix='/api', tags=['Service'])
@api.get('/version')
async def get_versions():
commit_hash = git_revision_hash()
git_server = {
'commit': git_revision_short_hash(),
'commit_hash': commit_hash,
'branch': git_branch(),
'release': git_text(commit_hash)
}
data_hash = git_revision_hash('./data')
git_data = {
'commit': git_revision_short_hash('./data'),
'commit_hash': data_hash,
'branch': git_branch('./data'),
'release': git_text(data_hash, './data')
}
reponse = {'server_version': SERVER_VERSION,
'game_version': GAME_VERSION,
'git_server': git_server,
'git_data': git_data}
return Response(response=reponse)
def git_revision_short_hash(cwd=None) -> str:
return check_out(['git', 'rev-parse', '--short', 'HEAD'], cwd)
def git_revision_hash(cwd=None) -> str:
return check_out(['git', 'rev-parse', 'HEAD'], cwd)
def git_branch(cwd=None) -> str:
return check_out(['git', 'branch', '--show-current'], cwd)
def git_text(commit, cwd=None) -> str:
return check_out(['git', 'log', '--format=%B', '-n', '1', commit], cwd)
def check_out(args, cwd=None):
if not cwd:
cwd = './'
return check_output(args, cwd=cwd).decode('ascii').strip()

View File

@ -1,3 +1,5 @@
from os import walk
from typing import List
from fastapi import APIRouter
from src.errors import Response
@ -17,6 +19,36 @@ async def get_characters(query_field: str = 'names', query_languages: str = 'eng
return Response(error=False, response=response)
@characters.get('/all', response_model_exclude_none=True)
async def get_all_characters(
result_language: str = 'ru',
images: bool = False, stats: bool = False, url: bool = False
) -> Response[List[Character]]:
result_lang = parse_result_lang(result_language)
chars = []
version_file = load_file('version', 'characters')
images_file = load_file('image', 'characters')
stats_file = load_file('stats', 'characters')
url_file = load_file('url', 'characters')
for _, _, files in walk(f'./data/{result_lang}/characters'):
for filename in files:
character_name = filename[:-5]
char = load_category(result_lang, 'characters', character_name)
if images:
char.update({'images': images_file[character_name]})
if stats:
char.update({'stats': stats_file[character_name]})
if url:
if character_name in url_file:
char.update({'url': url_file[character_name]})
char.update({'version': version_file[character_name]})
chars.append(char)
return Response(response=chars)
@characters.get('/{name}')
async def get_character(
name: str, query_languages: str = 'eng', result_language: str = 'ru',

View File

@ -25,18 +25,18 @@ class Costs(BaseModel):
class Images(BaseModel):
card: str
portrait: str
icon: str
sideicon: str
cover1: str
cover2: str
hoyolab_avatar: str = Field(..., alias='hoyolab-avatar')
nameicon: str
nameiconcard: str
namegachasplash: str
namegachaslice: str
namesideicon: str
card: Optional[str] = None
portrait: Optional[str] = None
icon: Optional[str] = None
sideicon: Optional[str] = None
cover1: Optional[str] = None
cover2: Optional[str] = None
hoyolab_avatar: Optional[str] = Field(None, alias='hoyolab-avatar')
nameicon: Optional[str] = None
nameiconcard: Optional[str] = None
namegachasplash: Optional[str] = None
namegachaslice: Optional[str] = None
namesideicon: Optional[str] = None
class Base(BaseModel):

View File

@ -7,4 +7,4 @@ class Element(BaseModel):
color: str
region: str
archon: str
theme: str
theme: str