Pre-Season 6 Updates

This commit is contained in:
Cal Corum 2023-10-19 23:16:47 -05:00
parent a44250803a
commit 96be768ec9
10 changed files with 1134 additions and 168 deletions

File diff suppressed because it is too large Load Diff

View File

@ -54,10 +54,10 @@ def complex_data_to_csv(complex_data: List):
else: else:
data_list = [[x for x in complex_data[0].keys()]] data_list = [[x for x in complex_data[0].keys()]]
for line in complex_data: for line in complex_data:
logging.info(f'line: {line}') logging.debug(f'line: {line}')
this_row = [] this_row = []
for key in line: for key in line:
logging.info(f'key: {key}') logging.debug(f'key: {key}')
if line[key] is None: if line[key] is None:
this_row.append('') this_row.append('')
@ -395,11 +395,35 @@ class Roster(BaseModel):
# this_roster.card26] # this_roster.card26]
class Result(BaseModel):
away_team = ForeignKeyField(Team)
home_team = ForeignKeyField(Team)
away_score = IntegerField()
home_score = IntegerField()
away_team_value = IntegerField(null=True)
home_team_value = IntegerField(null=True)
away_team_ranking = IntegerField(null=True)
home_team_ranking = IntegerField(null=True)
scorecard = CharField()
week = IntegerField()
season = IntegerField()
ranked = BooleanField()
short_game = BooleanField()
game_type = CharField(null=True)
@staticmethod
def select_season(season=None):
if not season:
season = Current.get().season
return Result.select().where(Result.season == season)
class BattingStat(BaseModel): class BattingStat(BaseModel):
card = ForeignKeyField(Card) card = ForeignKeyField(Card)
team = ForeignKeyField(Team) team = ForeignKeyField(Team)
roster_num = IntegerField() roster_num = IntegerField()
vs_team = ForeignKeyField(Team) vs_team = ForeignKeyField(Team)
result = ForeignKeyField(Result, null=True)
pos = CharField() pos = CharField()
pa = IntegerField() pa = IntegerField()
ab = IntegerField() ab = IntegerField()
@ -438,6 +462,7 @@ class PitchingStat(BaseModel):
team = ForeignKeyField(Team) team = ForeignKeyField(Team)
roster_num = IntegerField() roster_num = IntegerField()
vs_team = ForeignKeyField(Team) vs_team = ForeignKeyField(Team)
result = ForeignKeyField(Result, null=True)
ip = FloatField() ip = FloatField()
hit = IntegerField() hit = IntegerField()
run = IntegerField() run = IntegerField()
@ -462,29 +487,6 @@ class PitchingStat(BaseModel):
game_id = IntegerField() game_id = IntegerField()
class Result(BaseModel):
away_team = ForeignKeyField(Team)
home_team = ForeignKeyField(Team)
away_score = IntegerField()
home_score = IntegerField()
away_team_value = IntegerField(null=True)
home_team_value = IntegerField(null=True)
away_team_ranking = IntegerField(null=True)
home_team_ranking = IntegerField(null=True)
scorecard = CharField()
week = IntegerField()
season = IntegerField()
ranked = BooleanField()
short_game = BooleanField()
game_type = CharField(null=True)
@staticmethod
def select_season(season=None):
if not season:
season = Current.get().season
return Result.select().where(Result.season == season)
class Award(BaseModel): class Award(BaseModel):
name = CharField() name = CharField()
season = IntegerField() season = IntegerField()
@ -577,9 +579,9 @@ BattingCard.add_index(bc_index)
class BattingCardRatings(BaseModel): class BattingCardRatings(BaseModel):
battingcard = ForeignKeyField(BattingCard) battingcard = ForeignKeyField(BattingCard)
vs_hand = CharField(default='R') vs_hand = CharField(default='R')
pull_rate: FloatField() pull_rate = FloatField()
center_rate: FloatField() center_rate = FloatField()
slap_rate: FloatField() slap_rate = FloatField()
homerun = FloatField() homerun = FloatField()
bp_homerun = FloatField() bp_homerun = FloatField()
triple = FloatField() triple = FloatField()

View File

@ -6,7 +6,7 @@ import logging
import pydantic import pydantic
from pandas import DataFrame from pandas import DataFrame
from ..db_engine import db, BattingStat, model_to_dict, fn, Card from ..db_engine import db, BattingStat, model_to_dict, fn, Card, Player, Current
from ..dependencies import oauth2_scheme, valid_token, LOG_DATA from ..dependencies import oauth2_scheme, valid_token, LOG_DATA
logging.basicConfig( logging.basicConfig(
@ -69,6 +69,12 @@ async def get_batstats(
season: int = None, week_start: int = None, week_end: int = None, created: int = None, csv: bool = None): season: int = None, week_start: int = None, week_end: int = None, created: int = None, csv: bool = None):
all_stats = BattingStat.select().join(Card).join(Player) all_stats = BattingStat.select().join(Card).join(Player)
if season is not None:
all_stats = all_stats.where(BattingStat.season == season)
else:
curr = Current.latest()
all_stats = all_stats.where(BattingStat.season == curr.season)
if card_id is not None: if card_id is not None:
all_stats = all_stats.where(BattingStat.card_id == card_id) all_stats = all_stats.where(BattingStat.card_id == card_id)
if player_id is not None: if player_id is not None:
@ -79,8 +85,6 @@ async def get_batstats(
all_stats = all_stats.where(BattingStat.vs_team_id == vs_team_id) all_stats = all_stats.where(BattingStat.vs_team_id == vs_team_id)
if week is not None: if week is not None:
all_stats = all_stats.where(BattingStat.week == week) all_stats = all_stats.where(BattingStat.week == week)
if season is not None:
all_stats = all_stats.where(BattingStat.season == season)
if week_start is not None: if week_start is not None:
all_stats = all_stats.where(BattingStat.week >= week_start) all_stats = all_stats.where(BattingStat.week >= week_start)
if week_end is not None: if week_end is not None:

View File

@ -48,6 +48,9 @@ class BattingCardRatingsModel(pydantic.BaseModel):
avg: float = 0.0 avg: float = 0.0
obp: float = 0.0 obp: float = 0.0
slg: float = 0.0 slg: float = 0.0
pull_rate: float = 0.0
center_rate: float = 0.0
slap_rate: float = 0.0
@validator("avg", always=True) @validator("avg", always=True)
def avg_validator(cls, v, values, **kwargs): def avg_validator(cls, v, values, **kwargs):
@ -143,10 +146,9 @@ async def get_card_scouting(team_id: int, ts: str, cardset_id: list = Query(defa
if this_team is None or ts != this_team.team_hash() or this_team.has_guide != 1: if this_team is None or ts != this_team.team_hash() or this_team.has_guide != 1:
logging.warning(f'Team_id {team_id} attempted to pull ratings') logging.warning(f'Team_id {team_id} attempted to pull ratings')
db.close() db.close()
raise HTTPException( return 'Your team does not have the ratings guide enabled. If you have purchased a copy, ping Cal to ' \
status_code=401, 'make sure it is enabled on your team. If you are interested, you can pick it up here: ' \
detail='You are not authorized to pull card ratings.' 'https://ko-fi.com/manticorum/shop'
)
all_ratings = BattingCardRatings.select() all_ratings = BattingCardRatings.select()
if cardset_id is not None: if cardset_id is not None:
@ -163,6 +165,8 @@ async def get_card_scouting(team_id: int, ts: str, cardset_id: list = Query(defa
x['player_id'] = x['battingcard']['player']['player_id'] x['player_id'] = x['battingcard']['player']['player_id']
x['player_name'] = x['battingcard']['player']['p_name'] x['player_name'] = x['battingcard']['player']['p_name']
x['rarity'] = x['battingcard']['player']['rarity']['name'] x['rarity'] = x['battingcard']['player']['rarity']['name']
x['cardset_id'] = x['battingcard']['player']['cardset']['id']
x['cardset_name'] = x['battingcard']['player']['cardset']['name']
del x['battingcard'] del x['battingcard']
del x['player'] del x['player']
@ -173,12 +177,13 @@ async def get_card_scouting(team_id: int, ts: str, cardset_id: list = Query(defa
vl = pd.DataFrame(vl_vals) vl = pd.DataFrame(vl_vals)
vr = pd.DataFrame(vr_vals) vr = pd.DataFrame(vr_vals)
db.close()
output = pd.merge(vl, vr, on='player_id', suffixes=('_vl', '_vr')) output = pd.merge(vl, vr, on='player_id', suffixes=('_vl', '_vr'))
first = ['player_id', 'player_name', 'rarity', 'hand', 'variant'] first = ['player_id', 'player_name', 'cardset_name', 'rarity', 'hand', 'variant']
exclude = first + ['id_vl', 'id_vr'] exclude = first + ['id_vl', 'id_vr', 'vs_hand_vl', 'vs_hand_vr']
output = output[first + [col for col in output.columns if col not in exclude]] output = output[first + [col for col in output.columns if col not in exclude]].sort_values(by=['player_id'])
db.close() # output = output.sort_values(by=['player_id'])
return Response(content=pd.DataFrame(output).to_csv(index=False), media_type='text/csv') return Response(content=pd.DataFrame(output).to_csv(index=False), media_type='text/csv')

View File

@ -1,10 +1,11 @@
from fastapi import APIRouter, Depends, HTTPException, Query, Response from fastapi import APIRouter, Depends, HTTPException, Query, Response
from typing import Literal, Optional, List from typing import Literal, Optional, List
import logging import logging
import pandas as pd
import pydantic import pydantic
from pydantic import validator, root_validator from pydantic import validator, root_validator
from ..db_engine import db, PitchingCardRatings, model_to_dict, chunked, PitchingCard, Player, query_to_csv from ..db_engine import db, PitchingCardRatings, model_to_dict, chunked, PitchingCard, Player, query_to_csv, Team
from ..dependencies import oauth2_scheme, valid_token, LOG_DATA from ..dependencies import oauth2_scheme, valid_token, LOG_DATA
logging.basicConfig( logging.basicConfig(
@ -126,6 +127,54 @@ async def get_card_ratings(
return return_val return return_val
@router.get('/scouting')
async def get_card_scouting(team_id: int, ts: str, cardset_id: list = Query(default=None)):
this_team = Team.get_or_none(Team.id == team_id)
logging.debug(f'Team: {this_team} / has_guide: {this_team.has_guide}')
if this_team is None or ts != this_team.team_hash() or this_team.has_guide != 1:
logging.warning(f'Team_id {team_id} attempted to pull ratings')
db.close()
return 'Your team does not have the ratings guide enabled. If you have purchased a copy, ping Cal to ' \
'make sure it is enabled on your team. If you are interested, you can pick it up here: ' \
'https://ko-fi.com/manticorum/shop'
all_ratings = PitchingCardRatings.select()
if cardset_id is not None:
set_players = Player.select(Player.player_id).where(Player.cardset_id << cardset_id)
set_cards = PitchingCard.select(PitchingCard.id).where(PitchingCard.player << set_players)
all_ratings = all_ratings.where(PitchingCardRatings.pitchingcard << set_cards)
vl_query = all_ratings.where(PitchingCardRatings.vs_hand == 'L')
vr_query = all_ratings.where(PitchingCardRatings.vs_hand == 'R')
vl_vals = [model_to_dict(x) for x in vl_query]
for x in vl_vals:
x.update(x['pitchingcard'])
x['player_id'] = x['pitchingcard']['player']['player_id']
x['player_name'] = x['pitchingcard']['player']['p_name']
x['rarity'] = x['pitchingcard']['player']['rarity']['name']
x['cardset_id'] = x['pitchingcard']['player']['cardset']['id']
x['cardset_name'] = x['pitchingcard']['player']['cardset']['name']
del x['pitchingcard']
del x['player']
vr_vals = [model_to_dict(x) for x in vr_query]
for x in vr_vals:
x['player_id'] = x['pitchingcard']['player']['player_id']
del x['pitchingcard']
vl = pd.DataFrame(vl_vals)
vr = pd.DataFrame(vr_vals)
db.close()
output = pd.merge(vl, vr, on='player_id', suffixes=('_vl', '_vr'))
first = ['player_id', 'player_name', 'cardset_name', 'rarity', 'hand', 'variant']
exclude = first + ['id_vl', 'id_vr', 'vs_hand_vl', 'vs_hand_vr']
output = output[first + [col for col in output.columns if col not in exclude]].sort_values(by=['player_id'])
# output = output.sort_values(by=['player_id'])
return Response(content=pd.DataFrame(output).to_csv(index=False), media_type='text/csv')
@router.get('/{ratings_id}') @router.get('/{ratings_id}')
async def get_one_rating(ratings_id: int, token: str = Depends(oauth2_scheme)): async def get_one_rating(ratings_id: int, token: str = Depends(oauth2_scheme)):
if not valid_token(token): if not valid_token(token):

View File

@ -5,7 +5,7 @@ import logging
import pydantic import pydantic
from pandas import DataFrame from pandas import DataFrame
from ..db_engine import db, PitchingStat, model_to_dict, Card, Player from ..db_engine import db, PitchingStat, model_to_dict, Card, Player, Current
from ..dependencies import oauth2_scheme, valid_token, LOG_DATA from ..dependencies import oauth2_scheme, valid_token, LOG_DATA
logging.basicConfig( logging.basicConfig(
@ -61,6 +61,12 @@ async def get_pit_stats(
all_stats = PitchingStat.select().join(Card).join(Player) all_stats = PitchingStat.select().join(Card).join(Player)
logging.debug(f'pit query:\n\n{all_stats}') logging.debug(f'pit query:\n\n{all_stats}')
if season is not None:
all_stats = all_stats.where(PitchingStat.season == season)
else:
curr = Current.latest()
all_stats = all_stats.where(PitchingStat.season == curr.season)
if card_id is not None: if card_id is not None:
all_stats = all_stats.where(PitchingStat.card_id == card_id) all_stats = all_stats.where(PitchingStat.card_id == card_id)
if player_id is not None: if player_id is not None:
@ -71,8 +77,6 @@ async def get_pit_stats(
all_stats = all_stats.where(PitchingStat.vs_team_id == vs_team_id) all_stats = all_stats.where(PitchingStat.vs_team_id == vs_team_id)
if week is not None: if week is not None:
all_stats = all_stats.where(PitchingStat.week == week) all_stats = all_stats.where(PitchingStat.week == week)
if season is not None:
all_stats = all_stats.where(PitchingStat.season == season)
if week_start is not None: if week_start is not None:
all_stats = all_stats.where(PitchingStat.week >= week_start) all_stats = all_stats.where(PitchingStat.week >= week_start)
if week_end is not None: if week_end is not None:

View File

@ -1,6 +1,7 @@
import os.path import os.path
import base64 import base64
import pandas as pd
from fastapi import APIRouter, Depends, HTTPException, Request, Response, Query from fastapi import APIRouter, Depends, HTTPException, Request, Response, Query
from fastapi.responses import FileResponse from fastapi.responses import FileResponse
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates
@ -146,24 +147,44 @@ async def get_players(
# raise HTTPException(status_code=404, detail=f'No players found') # raise HTTPException(status_code=404, detail=f'No players found')
if csv: if csv:
all_players.order_by(-Player.rarity.value, Player.p_name) card_vals = [model_to_dict(x) for x in all_players]
data_list = [['id', 'name', 'value', 'image', 'image2', 'mlbclub', 'franchise', 'cardset', 'rarity', 'pos_1',
'pos_2', 'pos_3', 'pos_4', 'pos_5', 'pos_6', 'pos_7', 'pos_8', 'headshot', 'vanity_card',
'strat_code', 'bbref_id', 'description', 'for_purchase', 'ranked_legal']]
for line in final_players:
data_list.append(
[
line.player_id, line.p_name, line.cost, line.image, line.image2, line.mlbclub, line.franchise,
line.cardset, line.rarity, line.pos_1, line.pos_2, line.pos_3, line.pos_4, line.pos_5, line.pos_6,
line.pos_7, line.pos_8, line.headshot, line.vanity_card, line.strat_code, line.bbref_id,
line.description, line.cardset.for_purchase, line.cardset.ranked_legal
# line.description, line.cardset.in_packs, line.quantity
]
)
return_val = DataFrame(data_list).to_csv(header=False, index=False)
db.close() db.close()
return Response(content=return_val, media_type='text/csv')
for x in card_vals:
x['player_name'] = x['p_name']
x['cardset_name'] = x['cardset']['name']
x['rarity'] = x['rarity']['name']
x['for_purchase'] = x['cardset']['for_purchase']
x['ranked_legal'] = x['cardset']['ranked_legal']
if x['player_name'] not in x['description']:
x['description'] = f'{x["description"]} {x["player_name"]}'
card_df = pd.DataFrame(card_vals)
output = card_df[[
'player_id', 'player_name', 'cost', 'image', 'image2', 'mlbclub', 'franchise', 'cardset_name', 'rarity',
'pos_1', 'pos_2', 'pos_3', 'pos_4', 'pos_5', 'pos_6', 'pos_7', 'pos_8', 'headshot', 'vanity_card',
'fangr_id', 'bbref_id', 'description', 'for_purchase', 'ranked_legal'
]]
return Response(content=pd.DataFrame(output).to_csv(index=False), media_type='text/csv')
# all_players.order_by(-Player.rarity.value, Player.p_name)
# data_list = [['id', 'name', 'value', 'image', 'image2', 'mlbclub', 'franchise', 'cardset', 'rarity', 'pos_1',
# 'pos_2', 'pos_3', 'pos_4', 'pos_5', 'pos_6', 'pos_7', 'pos_8', 'headshot', 'vanity_card',
# 'strat_code', 'bbref_id', 'description', 'for_purchase', 'ranked_legal']]
# for line in final_players:
# data_list.append(
# [
# line.player_id, line.p_name, line.cost, line.image, line.image2, line.mlbclub, line.franchise,
# line.cardset, line.rarity, line.pos_1, line.pos_2, line.pos_3, line.pos_4, line.pos_5, line.pos_6,
# line.pos_7, line.pos_8, line.headshot, line.vanity_card, line.strat_code, line.bbref_id,
# line.description, line.cardset.for_purchase, line.cardset.ranked_legal
# # line.description, line.cardset.in_packs, line.quantity
# ]
# )
# return_val = DataFrame(data_list).to_csv(header=False, index=False)
#
# db.close()
# return Response(content=return_val, media_type='text/csv')
else: else:
return_val = {'count': len(final_players), 'players': []} return_val = {'count': len(final_players), 'players': []}
@ -362,6 +383,10 @@ async def get_batter_card(
raise HTTPException(status_code=404, detail=f'Ratings not found for batting card {this_bc.id}') raise HTTPException(status_code=404, detail=f'Ratings not found for batting card {this_bc.id}')
card_data = get_batter_card_data(this_player, this_bc, rating_vl, rating_vr, all_pos) card_data = get_batter_card_data(this_player, this_bc, rating_vl, rating_vr, all_pos)
if this_player.description in this_player.cardset.name:
card_data['cardset_name'] = this_player.cardset.name
else:
card_data['cardset_name'] = this_player.description
card_data['request'] = request card_data['request'] = request
html_response = templates.TemplateResponse("player_card.html", card_data) html_response = templates.TemplateResponse("player_card.html", card_data)
@ -379,6 +404,10 @@ async def get_batter_card(
raise HTTPException(status_code=404, detail=f'Ratings not found for pitching card {this_pc.id}') raise HTTPException(status_code=404, detail=f'Ratings not found for pitching card {this_pc.id}')
card_data = get_pitcher_card_data(this_player, this_pc, rating_vl, rating_vr, all_pos) card_data = get_pitcher_card_data(this_player, this_pc, rating_vl, rating_vr, all_pos)
if this_player.description in this_player.cardset.name:
card_data['cardset_name'] = this_player.cardset.name
else:
card_data['cardset_name'] = this_player.description
card_data['request'] = request card_data['request'] = request
html_response = templates.TemplateResponse("player_card.html", card_data) html_response = templates.TemplateResponse("player_card.html", card_data)

View File

@ -1,4 +1,6 @@
from datetime import datetime from datetime import datetime
import pandas as pd
from fastapi import APIRouter, Depends, HTTPException, Response from fastapi import APIRouter, Depends, HTTPException, Response
from typing import Optional from typing import Optional
import logging import logging
@ -392,23 +394,23 @@ async def get_team_cards(team_id, csv: Optional[bool] = True):
db.close() db.close()
raise HTTPException(status_code=404, detail=f'No cards found') raise HTTPException(status_code=404, detail=f'No cards found')
data_list = [[ card_vals = [model_to_dict(x) for x in all_cards]
'cardset', 'player', 'rarity', 'image', 'image2', 'pos_1', 'pos_2', 'pos_3', 'pos_4', 'pos_5', 'pos_6',
'pos_7', 'pos_8', 'cost', 'mlbclub', 'franchise', 'set_num', 'bbref_id', 'player_id', 'card_id'
]]
for line in all_cards:
data_list.append(
[
line.player.cardset, line.player.p_name, line.player.rarity, line.player.image, line.player.image2,
line.player.pos_1, line.player.pos_2, line.player.pos_3, line.player.pos_4, line.player.pos_5,
line.player.pos_6, line.player.pos_7, line.player.pos_8, line.player.cost, line.player.mlbclub,
line.player.franchise, line.player.set_num, line.player.bbref_id, line.player.player_id, line.id
]
)
return_val = DataFrame(data_list).to_csv(header=False, index=False)
db.close() db.close()
return Response(content=return_val, media_type='text/csv')
for x in card_vals:
x.update(x['player'])
x['player_id'] = x['player']['player_id']
x['player_name'] = x['player']['p_name']
x['cardset_id'] = x['player']['cardset']['id']
x['cardset_name'] = x['player']['cardset']['name']
x['rarity'] = x['player']['rarity']['name']
x['card_id'] = x['id']
card_df = pd.DataFrame(card_vals)
output = card_df[[
'cardset_name', 'player_name', 'rarity', 'image', 'image2', 'pos_1', 'pos_2', 'pos_3', 'pos_4', 'pos_5',
'pos_6', 'pos_7', 'pos_8', 'cost', 'mlbclub', 'franchise', 'fangr_id', 'bbref_id', 'player_id', 'card_id']]
return Response(content=pd.DataFrame(output).to_csv(index=False), media_type='text/csv')
@router.post('') @router.post('')

View File

@ -54,10 +54,10 @@ def complex_data_to_csv(complex_data: List):
else: else:
data_list = [[x for x in complex_data[0].keys()]] data_list = [[x for x in complex_data[0].keys()]]
for line in complex_data: for line in complex_data:
logging.info(f'line: {line}') logging.debug(f'line: {line}')
this_row = [] this_row = []
for key in line: for key in line:
logging.info(f'key: {key}') logging.debug(f'key: {key}')
if line[key] is None: if line[key] is None:
this_row.append('') this_row.append('')
@ -183,7 +183,7 @@ class Player(BaseModel):
fangr_id = CharField(null=True) fangr_id = CharField(null=True)
description = CharField() description = CharField()
quantity = IntegerField(default=999) quantity = IntegerField(default=999)
mlb_player = ForeignKeyField(MlbPlayer, null=True) mlbplayer = ForeignKeyField(MlbPlayer, null=True)
def __str__(self): def __str__(self):
return f'{self.cardset} {self.p_name} ({self.rarity.name})' return f'{self.cardset} {self.p_name} ({self.rarity.name})'
@ -395,11 +395,35 @@ class Roster(BaseModel):
# this_roster.card26] # this_roster.card26]
class Result(BaseModel):
away_team = ForeignKeyField(Team)
home_team = ForeignKeyField(Team)
away_score = IntegerField()
home_score = IntegerField()
away_team_value = IntegerField(null=True)
home_team_value = IntegerField(null=True)
away_team_ranking = IntegerField(null=True)
home_team_ranking = IntegerField(null=True)
scorecard = CharField()
week = IntegerField()
season = IntegerField()
ranked = BooleanField()
short_game = BooleanField()
game_type = CharField(null=True)
@staticmethod
def select_season(season=None):
if not season:
season = Current.get().season
return Result.select().where(Result.season == season)
class BattingStat(BaseModel): class BattingStat(BaseModel):
card = ForeignKeyField(Card) card = ForeignKeyField(Card)
team = ForeignKeyField(Team) team = ForeignKeyField(Team)
roster_num = IntegerField() roster_num = IntegerField()
vs_team = ForeignKeyField(Team) vs_team = ForeignKeyField(Team)
result = ForeignKeyField(Result, null=True)
pos = CharField() pos = CharField()
pa = IntegerField() pa = IntegerField()
ab = IntegerField() ab = IntegerField()
@ -438,6 +462,7 @@ class PitchingStat(BaseModel):
team = ForeignKeyField(Team) team = ForeignKeyField(Team)
roster_num = IntegerField() roster_num = IntegerField()
vs_team = ForeignKeyField(Team) vs_team = ForeignKeyField(Team)
result = ForeignKeyField(Result, null=True)
ip = FloatField() ip = FloatField()
hit = IntegerField() hit = IntegerField()
run = IntegerField() run = IntegerField()
@ -462,29 +487,6 @@ class PitchingStat(BaseModel):
game_id = IntegerField() game_id = IntegerField()
class Result(BaseModel):
away_team = ForeignKeyField(Team)
home_team = ForeignKeyField(Team)
away_score = IntegerField()
home_score = IntegerField()
away_team_value = IntegerField(null=True)
home_team_value = IntegerField(null=True)
away_team_ranking = IntegerField(null=True)
home_team_ranking = IntegerField(null=True)
scorecard = CharField()
week = IntegerField()
season = IntegerField()
ranked = BooleanField()
short_game = BooleanField()
game_type = CharField(null=True)
@staticmethod
def select_season(season=None):
if not season:
season = Current.get().season
return Result.select().where(Result.season == season)
class Award(BaseModel): class Award(BaseModel):
name = CharField() name = CharField()
season = IntegerField() season = IntegerField()
@ -577,6 +579,9 @@ BattingCard.add_index(bc_index)
class BattingCardRatings(BaseModel): class BattingCardRatings(BaseModel):
battingcard = ForeignKeyField(BattingCard) battingcard = ForeignKeyField(BattingCard)
vs_hand = CharField(default='R') vs_hand = CharField(default='R')
pull_rate = FloatField()
center_rate = FloatField()
slap_rate = FloatField()
homerun = FloatField() homerun = FloatField()
bp_homerun = FloatField() bp_homerun = FloatField()
triple = FloatField() triple = FloatField()

View File

@ -16,16 +16,21 @@ migrator = SqliteMigrator(db_engine.db)
# last_game = CharField(null=True) # last_game = CharField(null=True)
# game_type = CharField(null=True) # game_type = CharField(null=True)
mlb_player = ForeignKeyField(db_engine.MlbPlayer, field=db_engine.MlbPlayer.id, null=True) mlb_player = ForeignKeyField(db_engine.MlbPlayer, field=db_engine.MlbPlayer.id, null=True)
result = ForeignKeyField(db_engine.Result, field=db_engine.Result.id, null=True)
# active_theme = ForeignKeyField(PackTheme, to_field='id', field_type=int, null=True) # active_theme = ForeignKeyField(PackTheme, to_field='id', field_type=int, null=True)
# active_theme = ForeignKeyField(db_engine.PackTheme, field=db_engine.PackTheme.id, null=True) # for careers # active_theme = ForeignKeyField(db_engine.PackTheme, field=db_engine.PackTheme.id, null=True) # for careers
# game_type = CharField(null=True) # game_type = CharField(null=True)
# pack_team = ForeignKeyField(db_engine.Team, field=db_engine.Team.id, null=True) # pack_team = ForeignKeyField(db_engine.Team, field=db_engine.Team.id, null=True)
# pack_cardset = ForeignKeyField(db_engine.Cardset, field=db_engine.Cardset.id, null=True) # pack_cardset = ForeignKeyField(db_engine.Cardset, field=db_engine.Cardset.id, null=True)
pull_rate = FloatField(default=0.333)
migrate( migrate(
# migrator.add_column('current', 'active_theme_id', active_theme), # migrator.add_column('current', 'active_theme_id', active_theme),
# migrator.add_column('pack', 'pack_team_id', pack_team), # migrator.add_column('pack', 'pack_team_id', pack_team),
migrator.add_column('player', 'mlbplayer_id', mlb_player), # migrator.add_column('player', 'mlbplayer_id', mlb_player),
migrator.add_column('battingstat', 'result_id', result),
migrator.add_column('pitchingstat', 'result_id', result),
# migrator.add_column('battingcardratings', 'pull_rate', pull_rate),
# migrator.rename_column('cardset', 'available', 'for_purchase') # migrator.rename_column('cardset', 'available', 'for_purchase')
# migrator.add_column('player', 'offense_col', offense_col), # migrator.add_column('player', 'offense_col', offense_col),
# migrator.add_column('comment_tbl', 'comment', comment_field), # migrator.add_column('comment_tbl', 'comment', comment_field),