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.weaponmaterialtypes import weapon_material_types
|
||||||
from src.routes.weapons import weapons
|
from src.routes.weapons import weapons
|
||||||
|
|
||||||
|
from src.routes.api import api
|
||||||
|
|
||||||
app = FastAPI(title='Genshin Impact DB')
|
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,
|
routers = [achievements, adventure_ranks, animals, artifacts, characters, crafts, domains, elements, enemies, foods,
|
||||||
geographies, materials, namecards, outfits, talent_material_types, weapon_material_types, weapons, gliders,
|
geographies, materials, namecards, outfits, talent_material_types, weapon_material_types, weapons, gliders,
|
||||||
tcg]
|
tcg, api]
|
||||||
|
|
||||||
for router in routers:
|
for router in routers:
|
||||||
app.include_router(router)
|
app.include_router(router)
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
version = '1.0'
|
SERVER_VERSION = '1.0'
|
||||||
DEFAULT_QUERY = ['English']
|
GAME_VERSION = '4.2.0'
|
||||||
|
|
||||||
|
DEFAULT_QUERY = ['English', 'Russian']
|
||||||
DEFAULT_RESULT = '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'
|
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 fastapi import APIRouter
|
||||||
|
|
||||||
from src.errors import Response
|
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)
|
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}')
|
@characters.get('/{name}')
|
||||||
async def get_character(
|
async def get_character(
|
||||||
name: str, query_languages: str = 'eng', result_language: str = 'ru',
|
name: str, query_languages: str = 'eng', result_language: str = 'ru',
|
||||||
|
@ -25,18 +25,18 @@ class Costs(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class Images(BaseModel):
|
class Images(BaseModel):
|
||||||
card: str
|
card: Optional[str] = None
|
||||||
portrait: str
|
portrait: Optional[str] = None
|
||||||
icon: str
|
icon: Optional[str] = None
|
||||||
sideicon: str
|
sideicon: Optional[str] = None
|
||||||
cover1: str
|
cover1: Optional[str] = None
|
||||||
cover2: str
|
cover2: Optional[str] = None
|
||||||
hoyolab_avatar: str = Field(..., alias='hoyolab-avatar')
|
hoyolab_avatar: Optional[str] = Field(None, alias='hoyolab-avatar')
|
||||||
nameicon: str
|
nameicon: Optional[str] = None
|
||||||
nameiconcard: str
|
nameiconcard: Optional[str] = None
|
||||||
namegachasplash: str
|
namegachasplash: Optional[str] = None
|
||||||
namegachaslice: str
|
namegachaslice: Optional[str] = None
|
||||||
namesideicon: str
|
namesideicon: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
class Base(BaseModel):
|
class Base(BaseModel):
|
||||||
|
Loading…
Reference in New Issue
Block a user