Bug fixes for unique indeces

This commit is contained in:
Cal Corum 2023-10-03 12:06:48 -05:00
parent 561c7e99d4
commit 07c1b51d0f
2 changed files with 277 additions and 186 deletions

View File

@ -183,7 +183,7 @@ class Player(BaseModel):
fangr_id = CharField(null=True)
description = CharField()
quantity = IntegerField(default=999)
mlb_player = ForeignKeyField(MlbPlayer, null=True)
mlbplayer = ForeignKeyField(MlbPlayer, null=True)
def __str__(self):
return f'{self.cardset} {self.p_name} ({self.rarity.name})'
@ -625,7 +625,7 @@ class PitchingCard(BaseModel):
pc_index = ModelIndex(PitchingCard, (PitchingCard.player, PitchingCard.variant), unique=True)
PitchingCard.add_index(bc_index)
PitchingCard.add_index(pc_index)
class PitchingCardRatings(BaseModel):
@ -644,8 +644,9 @@ class PitchingCardRatings(BaseModel):
hbp = FloatField()
walk = FloatField()
strikeout = FloatField()
fo_slap = FloatField()
fo_center = FloatField()
flyout_lf_b = FloatField()
flyout_cf_b = FloatField()
flyout_rf_b = FloatField()
groundout_a = FloatField()
groundout_b = FloatField()
xcheck_p = FloatField()
@ -683,7 +684,7 @@ class CardPosition(BaseModel):
pos_index = ModelIndex(
CardPosition, (CardPosition.player, CardPosition.variant, CardPosition.position), unique=True
)
PitchingCardRatings.add_index(pos_index)
CardPosition.add_index(pos_index)
db.create_tables([BattingCard, BattingCardRatings, PitchingCard, PitchingCardRatings, CardPosition])

View File

@ -1,9 +1,13 @@
import math
from datetime import datetime
from typing import List
import logging
import os
from pandas import DataFrame
from peewee import *
from peewee import ModelSelect
from playhouse.shortcuts import model_to_dict
db = SqliteDatabase(
'storage/pd_master.db',
@ -23,6 +27,62 @@ logging.basicConfig(
)
def model_csv_headers(this_obj, exclude=None) -> List:
data = model_to_dict(this_obj, recurse=False, exclude=exclude)
return [x for x in data.keys()]
def model_to_csv(this_obj, exclude=None) -> List:
data = model_to_dict(this_obj, recurse=False, exclude=exclude)
return [x for x in data.values()]
def query_to_csv(all_items: ModelSelect, exclude=None):
if all_items.count() == 0:
data_list = [['No data found']]
else:
data_list = [model_csv_headers(all_items[0], exclude=exclude)]
for x in all_items:
data_list.append(model_to_csv(x, exclude=exclude))
return DataFrame(data_list).to_csv(header=False, index=False)
def complex_data_to_csv(complex_data: List):
if len(complex_data) == 0:
data_list = [['No data found']]
else:
data_list = [[x for x in complex_data[0].keys()]]
for line in complex_data:
logging.info(f'line: {line}')
this_row = []
for key in line:
logging.info(f'key: {key}')
if line[key] is None:
this_row.append('')
elif isinstance(line[key], dict):
if 'name' in line[key]:
this_row.append(line[key]['name'])
elif 'abbrev' in line[key]:
this_row.append(line[key]['abbrev'])
else:
this_row.append(line[key]['id'])
elif isinstance(line[key], int) and line[key] > 100000000:
this_row.append(f"'{line[key]}")
elif isinstance(line[key], str) and ',' in line[key]:
this_row.append(line[key].replace(",", "-_-"))
else:
this_row.append(line[key])
data_list.append(this_row)
return DataFrame(data_list).to_csv(header=False, index=False)
class BaseModel(Model):
class Meta:
database = db
@ -498,6 +558,7 @@ db.create_tables([
class BattingCard(BaseModel):
player = ForeignKeyField(Player)
variant = IntegerField()
steal_low = IntegerField()
steal_high = IntegerField()
steal_auto = BooleanField()
@ -509,9 +570,13 @@ class BattingCard(BaseModel):
hand = CharField(default='R')
bc_index = ModelIndex(BattingCard, (BattingCard.player, BattingCard.variant), unique=True)
BattingCard.add_index(bc_index)
class BattingCardRatings(BaseModel):
battingcard = ForeignKeyField(BattingCard)
vs_hand = FloatField()
vs_hand = CharField(default='R')
homerun = FloatField()
bp_homerun = FloatField()
triple = FloatField()
@ -539,20 +604,33 @@ class BattingCardRatings(BaseModel):
slg = FloatField(null=True)
bcr_index = ModelIndex(
BattingCardRatings, (BattingCardRatings.battingcard, BattingCardRatings.vs_hand), unique=True
)
BattingCardRatings.add_index(bcr_index)
class PitchingCard(BaseModel):
player = ForeignKeyField(Player)
variant = IntegerField()
balk = IntegerField()
wild_pitch = IntegerField(null=True)
hold = CharField()
wild_pitch = IntegerField()
hold = IntegerField()
starter_rating = IntegerField()
relief_rating = IntegerField()
closer_rating = IntegerField(null=True)
batting = CharField(null=True)
offense_col = IntegerField()
hand = CharField(default='R')
pc_index = ModelIndex(PitchingCard, (PitchingCard.player, PitchingCard.variant), unique=True)
PitchingCard.add_index(pc_index)
class PitchingCardRatings(BaseModel):
pitchingcard = ForeignKeyField(PitchingCard)
vs_hand = CharField()
vs_hand = CharField(default='R')
homerun = FloatField()
bp_homerun = FloatField()
triple = FloatField()
@ -566,8 +644,9 @@ class PitchingCardRatings(BaseModel):
hbp = FloatField()
walk = FloatField()
strikeout = FloatField()
fo_slap = FloatField()
fo_center = FloatField()
flyout_lf_b = FloatField()
flyout_cf_b = FloatField()
flyout_rf_b = FloatField()
groundout_a = FloatField()
groundout_b = FloatField()
xcheck_p = FloatField()
@ -584,10 +663,15 @@ class PitchingCardRatings(BaseModel):
slg = FloatField(null=True)
pcr_index = ModelIndex(
PitchingCardRatings, (PitchingCardRatings.pitchingcard, PitchingCardRatings.vs_hand), unique=True
)
PitchingCardRatings.add_index(pcr_index)
class CardPosition(BaseModel):
player = ForeignKeyField(Player)
batting = ForeignKeyField(BattingCard, null=True)
pitching = ForeignKeyField(PitchingCard, null=True)
variant = IntegerField()
position = CharField()
innings = IntegerField()
range = IntegerField()
@ -597,182 +681,188 @@ class CardPosition(BaseModel):
overthrow = IntegerField(null=True)
pos_index = ModelIndex(
CardPosition, (CardPosition.player, CardPosition.variant, CardPosition.position), unique=True
)
CardPosition.add_index(pos_index)
db.create_tables([BattingCard, BattingCardRatings, PitchingCard, PitchingCardRatings, CardPosition])
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()
# 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()