Refactor environment-specific configurations and data loading.
Refactored database and server configuration to handle environments (dev, test, prod) explicitly, including tailored database setup and SSL management. Separated slot and sample data loading for better control during initialization. Improved environment variable usage and error handling for production certificates.
This commit is contained in:
@ -59,7 +59,7 @@ slotQRCodes = [
|
||||
def timedelta_to_str(td: timedelta) -> str:
|
||||
days, seconds = td.days, td.seconds
|
||||
hours = days * 24 + seconds // 3600
|
||||
minutes = (seconds % 3600) // 60
|
||||
minutes = (seconds % 172800) // 60
|
||||
return f"PT{hours}H{minutes}M"
|
||||
|
||||
|
||||
|
@ -6,18 +6,31 @@ from sqlalchemy.orm import sessionmaker
|
||||
from . import models
|
||||
import os
|
||||
|
||||
# Get username and password from environment variables
|
||||
db_username = os.getenv("DB_USERNAME")
|
||||
db_password = os.getenv("DB_PASSWORD")
|
||||
# Fetch the environment (default to "dev")
|
||||
environment = os.getenv("ENVIRONMENT", "dev")
|
||||
|
||||
# Construct the database URL
|
||||
SQLALCHEMY_DATABASE_URL = f"mysql://{db_username}:{db_password}@localhost:3306/aare_db"
|
||||
# Configure database per environment
|
||||
if environment == "prod":
|
||||
db_username = os.getenv("DB_USERNAME", "prod_user")
|
||||
db_password = os.getenv("DB_PASSWORD", "prod_password")
|
||||
db_host = os.getenv("DB_HOST", "localhost")
|
||||
db_name = os.getenv("DB_NAME", "aare_prod_db")
|
||||
elif environment == "test":
|
||||
db_username = os.getenv("DB_USERNAME", "test_user")
|
||||
db_password = os.getenv("DB_PASSWORD", "test_password")
|
||||
db_host = os.getenv("DB_HOST", "localhost")
|
||||
db_name = os.getenv("DB_NAME", "aare_test_db")
|
||||
else: # Default is dev
|
||||
db_username = os.getenv("DB_USERNAME", "dev_user")
|
||||
db_password = os.getenv("DB_PASSWORD", "dev_password")
|
||||
db_host = os.getenv("DB_HOST", "localhost")
|
||||
db_name = os.getenv("DB_NAME", "aare_dev_db")
|
||||
|
||||
# Remove the `connect_args` parameter
|
||||
SQLALCHEMY_DATABASE_URL = f"mysql://{db_username}:{db_password}@{db_host}/{db_name}"
|
||||
|
||||
# Create engine and session
|
||||
engine = create_engine(SQLALCHEMY_DATABASE_URL)
|
||||
|
||||
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
||||
|
||||
Base = declarative_base()
|
||||
|
||||
|
||||
@ -30,12 +43,17 @@ def get_db():
|
||||
db.close()
|
||||
|
||||
|
||||
def init_db():
|
||||
Base.metadata.create_all(bind=engine)
|
||||
# Load only slots (minimal data)
|
||||
def load_slots_data(session: Session):
|
||||
from .data import slots
|
||||
|
||||
if not session.query(models.Slot).first(): # Load only if no slots exist
|
||||
session.add_all(slots)
|
||||
session.commit()
|
||||
|
||||
|
||||
# Load full sample data (used in dev/test)
|
||||
def load_sample_data(session: Session):
|
||||
# Import models inside function to avoid circular dependency
|
||||
from .data import (
|
||||
contacts,
|
||||
return_addresses,
|
||||
@ -50,7 +68,7 @@ def load_sample_data(session: Session):
|
||||
sample_events,
|
||||
)
|
||||
|
||||
# If any data already exists, skip seeding
|
||||
# If any data exists, don't reseed
|
||||
if session.query(models.ContactPerson).first():
|
||||
return
|
||||
|
||||
|
Reference in New Issue
Block a user