Pre-Season 6 Updates
This commit is contained in:
parent
a44250803a
commit
96be768ec9
File diff suppressed because it is too large
Load Diff
@ -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()
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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):
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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)
|
||||||
|
|
||||||
|
|||||||
@ -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('')
|
||||||
|
|||||||
57
db_engine.py
57
db_engine.py
@ -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()
|
||||||
|
|||||||
@ -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),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user