""" data/database.py The base definitions for database access and definition """ from datetime import datetime import os from dotenv import load_dotenv from sqlalchemy import create_engine, Date, Integer, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, sessionmaker load_dotenv() class Base(DeclarativeBase): pass class DataAccessLayer: def __init__(self): self.engine = None self.conn_string = os.getenv("DATABASE_URL") def connect(self): self.engine = create_engine(self.conn_string) Base.metadata.create_all(self.engine) self.Session = sessionmaker(bind=self.engine) dal = DataAccessLayer() class PowerballDraw(Base): __tablename__ = 'powerball_draws' draw_date: Mapped[datetime.date] = mapped_column(Date, primary_key=True) main_ball1: Mapped[int] = mapped_column(Integer) main_ball2: Mapped[int] = mapped_column(Integer) main_ball3: Mapped[int] = mapped_column(Integer) main_ball4: Mapped[int] = mapped_column(Integer) main_ball5: Mapped[int] = mapped_column(Integer) powerball: Mapped[int] = mapped_column(Integer) power_play: Mapped[int] = mapped_column(Integer) 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=})" 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" 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