From e2b8f5497c758ebb1f347f3faf9fda5f00f106fc Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Wed, 27 May 2026 08:16:35 -0400 Subject: [PATCH] Reformatted code to pythonic standards --- data/database.py | 79 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 58 insertions(+), 21 deletions(-) diff --git a/data/database.py b/data/database.py index 5bd1a3b..3e6ea7a 100644 --- a/data/database.py +++ b/data/database.py @@ -6,13 +6,19 @@ from datetime import date, datetime from typing import Any, Sequence, TypeVar -from sqlalchemy import create_engine, Date, engine, func, Integer, MetaData, Row, text +from sqlalchemy import ( + create_engine, Date, func, Integer, MetaData, + Row, text, +) from sqlalchemy.exc import IntegrityError, PendingRollbackError -from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, sessionmaker, Session +from sqlalchemy.orm import ( + DeclarativeBase, Mapped, mapped_column, Session, sessionmaker, +) from sqlalchemy_utils import create_database, database_exists from util.environment import load_environment_variables + project_variables = load_environment_variables() """ @@ -31,6 +37,7 @@ DATABASE_NAMING_CONVENTION = { "pk": "pk_%(table_name)s", } + class Base(DeclarativeBase): metadata = MetaData(naming_convention=DATABASE_NAMING_CONVENTION) @@ -52,18 +59,28 @@ class PowerballDraw(Base): def __repr__(self): - return f"PowerballDraw({self.draw_date=}, {self.main_ball1=}, {self.main_ball2=}, {self.main_ball3=}, " \ - f"{self.main_ball4=}, {self.main_ball5=}, {self.powerball=}, {self.power_play=})" + return (f"PowerballDraw({self.draw_date=}, {self.main_ball1=}, " + f"{self.main_ball2=}, {self.main_ball3=}, ") \ + f"{self.main_ball4=}, {self.main_ball5=}, {self.power + ball=}, {self.power_play=})" + def __str__(self): - return f"{self.draw_date}, [{self.main_ball1}, {self.main_ball2}, {self.main_ball3}, {self.main_ball4}, " \ - f"{self.main_ball5}], {self.powerball}, {self.power_play if self.power_play else 1}x" + return (f"{self.draw_date}, [{self.main_ball1}, {self.main_ball2}, " + f"{self.main_ball3}, {self.main_ball4}, ") \ + f"{self.main_ball5}], {self.powe + rball}, {self.power_play if self.power_play else 1}x" + def __eq__(self, other): - return self.draw_date == other.draw_date and self.main_ball1 == other.main_ball1 and \ - self.main_ball2 == other.main_ball2 and self.main_ball3 == other.main_ball3 and \ - self.main_ball4 == other.main_ball4 and self.main_ball5 == other.main_ball5 and \ - self.powerball == other.powerball and self.power_play == other.power_play + return (self.draw_date == other.draw_date and self.main_ball1 == + other.main_ball1 and \ + self.main_ball2 == other.main_ball2 and self.main_ball3 == + other.main_ball3 and \ + self.main_ball4 == other.main_ball4 and self.main_ball5 == + other.main_ball5 and \ + self.powerball == other.powerball and self.power_play == + other.power_play) class MegaMillionsDraw(Base): @@ -80,18 +97,28 @@ class MegaMillionsDraw(Base): def __repr__(self): - return f"MegaMillionsDraw({self.draw_date=}, {self.main_ball1=}, {self.main_ball2=}, {self.main_ball3=}, " \ - f"{self.main_ball4=}, {self.main_ball5=}, {self.mega_ball=}, {self.megaplier=})" + return (f"MegaMillionsDraw({self.draw_date=}, {self.main_ball1=}, " + f"{self.main_ball2=}, {self.main_ball3=}, ") \ + f"{self.main_ball4=}, {self.main_ball5=}, {self.mega_ + ball=}, {self.megaplier=})" + def __str__(self): - return f"{self.draw_date}, [{self.main_ball1}, {self.main_ball2}, {self.main_ball3}, {self.main_ball4}, " \ - f"{self.main_ball5}], {self.mega_ball}, {self.megaplier if self.megaplier else 1}x" + return (f"{self.draw_date}, [{self.main_ball1}, {self.main_ball2}, " + f"{self.main_ball3}, {self.main_ball4}, ") \ + f"{self.main_ball5}], {self.mega + _ball}, {self.megaplier if self.megaplier else 1}x" + def __eq__(self, other): - return self.draw_date == other.draw_date and self.main_ball1 == other.main_ball1 and \ - self.main_ball2 == other.main_ball2 and self.main_ball3 == other.main_ball3 and \ - self.main_ball4 == other.main_ball4 and self.main_ball5 == other.main_ball5 and \ - self.mega_ball == other.mega_ball and self.megaplier == other.megaplier + return (self.draw_date == other.draw_date and self.main_ball1 == + other.main_ball1 and \ + self.main_ball2 == other.main_ball2 and self.main_ball3 == + other.main_ball3 and \ + self.main_ball4 == other.main_ball4 and self.main_ball5 == + other.main_ball5 and \ + self.mega_ball == other.mega_ball and self.megaplier == + other.megaplier) class DataAccessLayer: @@ -112,13 +139,18 @@ class DataAccessLayer: class DataAccessLayer2: def __init__(self): - self.engine = create_engine(project_variables["LP_DATABASE_URL"], echo=False) + self.engine = create_engine( + project_variables["LP_DATABASE_URL"], echo=False, + ) if not database_exists(self.engine.url): create_database(self.engine.url) Base.metadata.create_all(self.engine) - self.session_local: sessionmaker[Session] = sessionmaker(bind=self.engine) + self.session_local: sessionmaker[Session] = sessionmaker( + bind=self.engine, + ) self.session_factory = self.session_local + def execute_query(self, query) -> Sequence[Row[Any]]: with self.session_factory() as session: try: @@ -127,6 +159,7 @@ class DataAccessLayer2: finally: session.close() + def add(self, record: Table) -> None: with self.session_factory() as session: try: @@ -139,13 +172,17 @@ class DataAccessLayer2: finally: session.close() + def count(self, table_name: str, from_date: date | None = None) -> int: with self.session_factory() as session: if from_date: - return session.query(table_name).where(table_name.draw_date >= from_date).count() + return session.query(table_name).where( + table_name.draw_date >= from_date, + ).count() else: return session.query(table_name).count() + def most_recent(self, table_name: Table) -> Row[Table] | None: with self.session_factory() as session: return session.query(func.max(table_name.draw_date)).first()