From 8c039dedf8a4ce77943c31d62d59feef23835bfe Mon Sep 17 00:00:00 2001 From: Cal Corum Date: Sat, 31 Jan 2026 15:56:33 -0600 Subject: [PATCH] Fix DateTimeField defaults for PostgreSQL compatibility Paperdex and GauntletRun models used int timestamps as defaults which worked in SQLite but fail in PostgreSQL. Changed to datetime.now. --- app/db_engine.py | 14 +++-- db_engine.py | 138 ++++++++++++++++++++++++++--------------------- 2 files changed, 89 insertions(+), 63 deletions(-) diff --git a/app/db_engine.py b/app/db_engine.py index 3adb0ff..85f3f86 100644 --- a/app/db_engine.py +++ b/app/db_engine.py @@ -69,7 +69,15 @@ CARDSETS = { }, "hall-of-fame": {"primary": [x for x in range(1, 30)], "human": ranked_cardsets}, "flashback": { - "primary": [13, 14, 5, 1, 3, 4, 8], # 2018 + Promos, 2019, 2021, 2022 + Promos, Mario + "primary": [ + 13, + 14, + 5, + 1, + 3, + 4, + 8, + ], # 2018 + Promos, 2019, 2021, 2022 + Promos, Mario "secondary": [24], # 2025 "human": [13, 14, 5, 1, 3, 4, 8], # 2018 + Promos, 2019, 2021, 2022 + Promos }, @@ -642,7 +650,7 @@ class Award(BaseModel): class Paperdex(BaseModel): team = ForeignKeyField(Team) player = ForeignKeyField(Player) - created = DateTimeField(default=int(datetime.timestamp(datetime.now()) * 1000)) + created = DateTimeField(default=datetime.now) class Meta: database = db @@ -711,7 +719,7 @@ class GauntletRun(BaseModel): wins = IntegerField(default=0) losses = IntegerField(default=0) gsheet = CharField(null=True) - created = DateTimeField(default=int(datetime.timestamp(datetime.now()) * 1000)) + created = DateTimeField(default=datetime.now) ended = DateTimeField(null=True) # NULL means run not yet ended class Meta: diff --git a/db_engine.py b/db_engine.py index 7eb3cc2..03c885b 100644 --- a/db_engine.py +++ b/db_engine.py @@ -10,20 +10,16 @@ from peewee import ModelSelect from playhouse.shortcuts import model_to_dict db = SqliteDatabase( - 'storage/pd_master.db', - pragmas={ - 'journal_mode': 'wal', - 'cache_size': -1 * 64000, - 'synchronous': 0 - } + "storage/pd_master.db", + pragmas={"journal_mode": "wal", "cache_size": -1 * 64000, "synchronous": 0}, ) -date = f'{datetime.now().year}-{datetime.now().month}-{datetime.now().day}' -log_level = logging.INFO if os.environ.get('LOG_LEVEL') == 'INFO' else 'WARN' +date = f"{datetime.now().year}-{datetime.now().month}-{datetime.now().day}" +log_level = logging.INFO if os.environ.get("LOG_LEVEL") == "INFO" else "WARN" logging.basicConfig( - filename=f'logs/database/{date}.log', - format='%(asctime)s - database - %(levelname)s - %(message)s', - level=log_level + filename=f"logs/database/{date}.log", + format="%(asctime)s - database - %(levelname)s - %(message)s", + level=log_level, ) @@ -39,7 +35,7 @@ def model_to_csv(this_obj, exclude=None) -> List: def query_to_csv(all_items: ModelSelect, exclude=None): if all_items.count() == 0: - data_list = [['No data found']] + data_list = [["No data found"]] else: data_list = [model_csv_headers(all_items[0], exclude=exclude)] for x in all_items: @@ -50,29 +46,29 @@ def query_to_csv(all_items: ModelSelect, exclude=None): def complex_data_to_csv(complex_data: List): if len(complex_data) == 0: - data_list = [['No data found']] + data_list = [["No data found"]] else: data_list = [[x for x in complex_data[0].keys()]] for line in complex_data: - logging.debug(f'line: {line}') + logging.debug(f"line: {line}") this_row = [] for key in line: - logging.debug(f'key: {key}') + logging.debug(f"key: {key}") if line[key] is None: - this_row.append('') + 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']) + 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']) + 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]: + elif isinstance(line[key], str) and "," in line[key]: this_row.append(line[key].replace(",", "-_-")) else: @@ -186,7 +182,7 @@ class Player(BaseModel): mlbplayer = ForeignKeyField(MlbPlayer, null=True) def __str__(self): - return f'{self.cardset} {self.p_name} ({self.rarity.name})' + return f"{self.cardset} {self.p_name} ({self.rarity.name})" # def __eq__(self, other): # if self.cardset.id == other.cardset.id and self.name == other.name: @@ -207,21 +203,21 @@ class Player(BaseModel): def get_all_pos(self): all_pos = [] - if self.pos_1 and self.pos_1 != 'CP': + if self.pos_1 and self.pos_1 != "CP": all_pos.append(self.pos_1) - if self.pos_2 and self.pos_2 != 'CP': + if self.pos_2 and self.pos_2 != "CP": all_pos.append(self.pos_2) - if self.pos_3 and self.pos_3 != 'CP': + if self.pos_3 and self.pos_3 != "CP": all_pos.append(self.pos_3) - if self.pos_4 and self.pos_4 != 'CP': + if self.pos_4 and self.pos_4 != "CP": all_pos.append(self.pos_4) - if self.pos_5 and self.pos_5 != 'CP': + if self.pos_5 and self.pos_5 != "CP": all_pos.append(self.pos_5) - if self.pos_6 and self.pos_6 != 'CP': + if self.pos_6 and self.pos_6 != "CP": all_pos.append(self.pos_6) - if self.pos_7 and self.pos_7 != 'CP': + if self.pos_7 and self.pos_7 != "CP": all_pos.append(self.pos_7) - if self.pos_8 and self.pos_8 != 'CP': + if self.pos_8 and self.pos_8 != "CP": all_pos.append(self.pos_8) return all_pos @@ -235,19 +231,19 @@ class Player(BaseModel): # 'mvp': 2500, # 'hof': 999999999 # } - logging.info(f'{self.p_name} cost changing from: {self.cost}') - self.cost = max(math.floor(self.cost * .95), 1) + logging.info(f"{self.p_name} cost changing from: {self.cost}") + self.cost = max(math.floor(self.cost * 0.95), 1) # if self.quantity != 999: # self.quantity += 1 - logging.info(f'{self.p_name} cost now: {self.cost}') + logging.info(f"{self.p_name} cost now: {self.cost}") self.save() def change_on_buy(self): - logging.info(f'{self.p_name} cost changing from: {self.cost}') + logging.info(f"{self.p_name} cost changing from: {self.cost}") self.cost = math.ceil(self.cost * 1.1) # if self.quantity != 999: # self.quantity -= 1 - logging.info(f'{self.p_name} cost now: {self.cost}') + logging.info(f"{self.p_name} cost now: {self.cost}") self.save() @@ -274,7 +270,7 @@ class Team(BaseModel): is_ai = IntegerField(null=True) def __str__(self): - return f'S{self.season} {self.lname}' + return f"S{self.season} {self.lname}" @staticmethod def get_by_owner(gmid, season=None): @@ -300,8 +296,8 @@ class Team(BaseModel): return Team.get_or_none(Team.season == season, Team.abbrev == abbrev.upper()) def team_hash(self): - hash_string = f'{self.sname[-1]}{self.gmid / 6950123:.0f}{self.sname[-2]}{self.gmid / 42069123:.0f}' - logging.info(f'string: {hash_string}') + hash_string = f"{self.sname[-1]}{self.gmid / 6950123:.0f}{self.sname[-2]}{self.gmid / 42069123:.0f}" + logging.info(f"string: {hash_string}") return hash_string @@ -338,9 +334,9 @@ class Card(BaseModel): def __str__(self): if self.player: - return f'{self.player} - {self.team.sname}' + return f"{self.player} - {self.team.sname}" else: - return f'Blank - {self.team.sname}' + return f"Blank - {self.team.sname}" @staticmethod def select_season(season): @@ -382,7 +378,7 @@ class Roster(BaseModel): card_26 = ForeignKeyField(Card) def __str__(self): - return f'{self.team} Roster' + return f"{self.team} Roster" # def get_cards(self, team): # all_cards = Card.select().where(Card.roster == self) @@ -499,7 +495,7 @@ class Award(BaseModel): class Paperdex(BaseModel): team = ForeignKeyField(Team) player = ForeignKeyField(Player) - created = DateTimeField(default=int(datetime.timestamp(datetime.now())*1000)) + created = DateTimeField(default=datetime.now) # def add_to_paperdex(self, team, cards: list): # for x in players: @@ -548,14 +544,25 @@ class GauntletRun(BaseModel): wins = IntegerField(default=0) losses = IntegerField(default=0) gsheet = CharField(null=True) - created = DateTimeField(default=int(datetime.timestamp(datetime.now())*1000)) - ended = DateTimeField(default=0) + created = DateTimeField(default=datetime.now) + ended = DateTimeField(null=True) -db.create_tables([ - Roster, BattingStat, PitchingStat, Result, Award, Paperdex, Reward, GameRewards, Notification, GauntletReward, - GauntletRun -]) +db.create_tables( + [ + Roster, + BattingStat, + PitchingStat, + Result, + Award, + Paperdex, + Reward, + GameRewards, + Notification, + GauntletReward, + GauntletRun, + ] +) class BattingCard(BaseModel): @@ -569,16 +576,18 @@ class BattingCard(BaseModel): hit_and_run = CharField() running = IntegerField() offense_col = IntegerField() - hand = CharField(default='R') + hand = CharField(default="R") -bc_index = ModelIndex(BattingCard, (BattingCard.player, BattingCard.variant), unique=True) +bc_index = ModelIndex( + BattingCard, (BattingCard.player, BattingCard.variant), unique=True +) BattingCard.add_index(bc_index) class BattingCardRatings(BaseModel): battingcard = ForeignKeyField(BattingCard) - vs_hand = CharField(default='R') + vs_hand = CharField(default="R") pull_rate = FloatField() center_rate = FloatField() slap_rate = FloatField() @@ -610,7 +619,9 @@ class BattingCardRatings(BaseModel): bcr_index = ModelIndex( - BattingCardRatings, (BattingCardRatings.battingcard, BattingCardRatings.vs_hand), unique=True + BattingCardRatings, + (BattingCardRatings.battingcard, BattingCardRatings.vs_hand), + unique=True, ) BattingCardRatings.add_index(bcr_index) @@ -626,16 +637,18 @@ class PitchingCard(BaseModel): closer_rating = IntegerField(null=True) batting = CharField(null=True) offense_col = IntegerField() - hand = CharField(default='R') + hand = CharField(default="R") -pc_index = ModelIndex(PitchingCard, (PitchingCard.player, PitchingCard.variant), unique=True) +pc_index = ModelIndex( + PitchingCard, (PitchingCard.player, PitchingCard.variant), unique=True +) PitchingCard.add_index(pc_index) class PitchingCardRatings(BaseModel): pitchingcard = ForeignKeyField(PitchingCard) - vs_hand = CharField(default='R') + vs_hand = CharField(default="R") homerun = FloatField() bp_homerun = FloatField() triple = FloatField() @@ -669,7 +682,9 @@ class PitchingCardRatings(BaseModel): pcr_index = ModelIndex( - PitchingCardRatings, (PitchingCardRatings.pitchingcard, PitchingCardRatings.vs_hand), unique=True + PitchingCardRatings, + (PitchingCardRatings.pitchingcard, PitchingCardRatings.vs_hand), + unique=True, ) PitchingCardRatings.add_index(pcr_index) @@ -687,12 +702,16 @@ class CardPosition(BaseModel): pos_index = ModelIndex( - CardPosition, (CardPosition.player, CardPosition.variant, CardPosition.position), unique=True + CardPosition, + (CardPosition.player, CardPosition.variant, CardPosition.position), + unique=True, ) CardPosition.add_index(pos_index) -db.create_tables([BattingCard, BattingCardRatings, PitchingCard, PitchingCardRatings, CardPosition]) +db.create_tables( + [BattingCard, BattingCardRatings, PitchingCard, PitchingCardRatings, CardPosition] +) db.close() @@ -870,4 +889,3 @@ db.close() # # # scout_db.close() -