Consolidated scouting db preparation
This commit is contained in:
parent
b445957e3c
commit
2be7955e89
175
db_engine.py
175
db_engine.py
@ -481,3 +481,178 @@ db.create_tables([
|
||||
GauntletRun
|
||||
])
|
||||
db.close()
|
||||
|
||||
scout_db = SqliteDatabase(
|
||||
'storage/card_creation.db',
|
||||
pragmas={
|
||||
'journal_mode': 'wal',
|
||||
'cache_size': -1 * 64000,
|
||||
'synchronous': 0
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
class BaseModelScout(Model):
|
||||
class Meta:
|
||||
database = scout_db
|
||||
|
||||
|
||||
class ScoutCardset(BaseModelScout):
|
||||
set_title = CharField()
|
||||
set_subtitle = CharField(null=True)
|
||||
|
||||
|
||||
class ScoutPlayer(BaseModelScout):
|
||||
sba_id = IntegerField(primary_key=True)
|
||||
name = CharField()
|
||||
fg_id = IntegerField()
|
||||
br_id = CharField()
|
||||
offense_col = IntegerField()
|
||||
hand = CharField(default='R')
|
||||
|
||||
|
||||
scout_db.create_tables([ScoutCardset, ScoutPlayer])
|
||||
|
||||
|
||||
class BatterRatings(BaseModelScout):
|
||||
id = CharField(unique=True, primary_key=True)
|
||||
player = ForeignKeyField(ScoutPlayer)
|
||||
cardset = ForeignKeyField(ScoutCardset)
|
||||
vs_hand = FloatField()
|
||||
is_prep = BooleanField()
|
||||
homerun = FloatField()
|
||||
bp_homerun = FloatField()
|
||||
triple = FloatField()
|
||||
double_three = FloatField()
|
||||
double_two = FloatField()
|
||||
double_pull = FloatField()
|
||||
single_two = FloatField()
|
||||
single_one = FloatField()
|
||||
single_center = FloatField()
|
||||
bp_single = FloatField()
|
||||
hbp = FloatField()
|
||||
walk = FloatField()
|
||||
strikeout = FloatField()
|
||||
lineout = FloatField()
|
||||
popout = FloatField()
|
||||
flyout_a = FloatField()
|
||||
flyout_bq = FloatField()
|
||||
flyout_lf_b = FloatField()
|
||||
flyout_rf_b = FloatField()
|
||||
groundout_a = FloatField()
|
||||
groundout_b = FloatField()
|
||||
groundout_c = FloatField()
|
||||
avg = FloatField(null=True)
|
||||
obp = FloatField(null=True)
|
||||
slg = FloatField(null=True)
|
||||
|
||||
|
||||
class PitcherRatings(BaseModelScout):
|
||||
id = CharField(unique=True, primary_key=True)
|
||||
player = ForeignKeyField(ScoutPlayer)
|
||||
cardset = ForeignKeyField(ScoutCardset)
|
||||
vs_hand = CharField()
|
||||
is_prep = BooleanField()
|
||||
homerun = FloatField()
|
||||
bp_homerun = FloatField()
|
||||
triple = FloatField()
|
||||
double_three = FloatField()
|
||||
double_two = FloatField()
|
||||
double_cf = FloatField()
|
||||
single_two = FloatField()
|
||||
single_one = FloatField()
|
||||
single_center = FloatField()
|
||||
bp_single = FloatField()
|
||||
hbp = FloatField()
|
||||
walk = FloatField()
|
||||
strikeout = FloatField()
|
||||
fo_slap = FloatField()
|
||||
fo_center = FloatField()
|
||||
groundout_a = FloatField()
|
||||
groundout_b = FloatField()
|
||||
xcheck_p = FloatField()
|
||||
xcheck_c = FloatField()
|
||||
xcheck_1b = FloatField()
|
||||
xcheck_2b = FloatField()
|
||||
xcheck_3b = FloatField()
|
||||
xcheck_ss = FloatField()
|
||||
xcheck_lf = FloatField()
|
||||
xcheck_cf = FloatField()
|
||||
xcheck_rf = FloatField()
|
||||
avg = FloatField(null=True)
|
||||
obp = FloatField(null=True)
|
||||
slg = FloatField(null=True)
|
||||
|
||||
|
||||
scout_db.create_tables([BatterRatings, PitcherRatings])
|
||||
|
||||
|
||||
class CardColumns(BaseModelScout):
|
||||
id = CharField(unique=True, primary_key=True)
|
||||
player = ForeignKeyField(ScoutPlayer)
|
||||
hand = CharField()
|
||||
b_ratings = ForeignKeyField(BatterRatings, null=True)
|
||||
p_ratings = ForeignKeyField(PitcherRatings, null=True)
|
||||
one_dice = CharField()
|
||||
one_results = CharField()
|
||||
one_splits = CharField()
|
||||
two_dice = CharField()
|
||||
two_results = CharField()
|
||||
two_splits = CharField()
|
||||
three_dice = CharField()
|
||||
three_results = CharField()
|
||||
three_splits = CharField()
|
||||
|
||||
|
||||
class Position(BaseModelScout):
|
||||
player = ForeignKeyField(ScoutPlayer)
|
||||
cardset = ForeignKeyField(ScoutCardset)
|
||||
position = CharField()
|
||||
innings = IntegerField()
|
||||
range = IntegerField()
|
||||
error = IntegerField()
|
||||
arm = CharField(null=True)
|
||||
pb = IntegerField(null=True)
|
||||
overthrow = IntegerField(null=True)
|
||||
|
||||
|
||||
class BatterData(BaseModelScout):
|
||||
player = ForeignKeyField(ScoutPlayer)
|
||||
cardset = ForeignKeyField(ScoutCardset)
|
||||
stealing = CharField()
|
||||
st_low = IntegerField()
|
||||
st_high = IntegerField()
|
||||
st_auto = BooleanField()
|
||||
st_jump = FloatField()
|
||||
bunting = CharField(null=True)
|
||||
hit_and_run = CharField(null=True)
|
||||
running = CharField()
|
||||
|
||||
|
||||
class PitcherData(BaseModelScout):
|
||||
player = ForeignKeyField(ScoutPlayer)
|
||||
cardset = ForeignKeyField(ScoutCardset)
|
||||
balk = IntegerField(null=True)
|
||||
wild_pitch = IntegerField(null=True)
|
||||
hold = CharField()
|
||||
starter_rating = IntegerField()
|
||||
relief_rating = IntegerField()
|
||||
closer_rating = IntegerField(null=True)
|
||||
batting = CharField(null=True)
|
||||
|
||||
|
||||
scout_db.create_tables([CardColumns, Position, BatterData, PitcherData])
|
||||
|
||||
|
||||
class CardOutput(BaseModelScout):
|
||||
name = CharField()
|
||||
hand = CharField()
|
||||
positions = CharField()
|
||||
stealing = CharField()
|
||||
bunting = CharField()
|
||||
hitandrun = CharField()
|
||||
running = CharField()
|
||||
|
||||
|
||||
scout_db.close()
|
||||
|
||||
|
||||
27
main.py
27
main.py
@ -3,7 +3,7 @@ import logging
|
||||
import os
|
||||
|
||||
from db_engine import *
|
||||
from typing import Optional, List, Union
|
||||
from typing import Optional, List, Union, Literal
|
||||
from fastapi import FastAPI, HTTPException, Depends, Response, Query
|
||||
from fastapi.security import OAuth2PasswordBearer
|
||||
import pydantic
|
||||
@ -4912,3 +4912,28 @@ async def v1_stl_fix(token: str = Depends(oauth2_scheme)):
|
||||
|
||||
return {'detail': f'Removed the period from St Louis'}
|
||||
|
||||
|
||||
@app.get('/api/v1/ratings/batter/{sba_id}')
|
||||
async def v1_ratings_batter_get(
|
||||
sba_id: int, cardset_name: Optional[str] = None, vs_hand: Literal["l", "r", "L", "R"] = None):
|
||||
this_player = ScoutPlayer.get_or_none(ScoutPlayer.sba_id == sba_id)
|
||||
logging.info(f'num players: {ScoutPlayer.select().count()}')
|
||||
if this_player is None:
|
||||
scout_db.close()
|
||||
raise HTTPException(status_code=404, detail=f'SBa ID {sba_id} not found')
|
||||
|
||||
r_query = BatterRatings.select().where(
|
||||
(BatterRatings.player == this_player) & (BatterRatings.is_prep == 0)
|
||||
)
|
||||
|
||||
if cardset_name is not None:
|
||||
this_cardset = ScoutCardset.get_or_none(fn.Lower(ScoutCardset.set_title) == cardset_name.lower())
|
||||
r_query = r_query.where(BatterRatings.cardset == this_cardset)
|
||||
if vs_hand is not None:
|
||||
r_query = r_query.where(fn.Lower(BatterRatings.vs_hand) == f'v{vs_hand.lower()}')
|
||||
|
||||
return_val = {'count': r_query.count(), 'ratings': [model_to_dict(x) for x in r_query]}
|
||||
|
||||
scout_db.close()
|
||||
return return_val
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user