added version route; fix images
This commit is contained in:
parent
5a2c1d9bc7
commit
4f152233ca
2
data
2
data
@ -1 +1 @@
|
||||
Subproject commit 50e2b26da886b97536db8c511394145e06b2c597
|
||||
Subproject commit df34257e5adc98acfa514eb6a91aae7dc4be4733
|
4
main.py
4
main.py
@ -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)
|
||||
|
@ -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
54
src/routes/api.py
Normal 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()
|
@ -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',
|
||||
|
@ -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):
|
||||
|
@ -7,4 +7,4 @@ class Element(BaseModel):
|
||||
color: str
|
||||
region: str
|
||||
archon: str
|
||||
theme: str
|
||||
theme: str
|
||||
|
Loading…
Reference in New Issue
Block a user