Refactor OpenAPI fetcher for improved clarity and robustness
Reorganized and enhanced the OpenAPI fetch logic for better maintainability and error handling. Key updates include improved environment variable validation, more detailed error messages, streamlined configuration loading, and additional safety checks for file paths and directories. Added proper logging and ensured the process flow is easy to trace.
This commit is contained in:
parent
dbf7864e7e
commit
9b6ad107bb
@ -48,10 +48,19 @@ def load_slots_data(session: Session):
|
||||
from .data import slots
|
||||
from .data import proposals
|
||||
|
||||
if not session.query(models.Slot).first(): # Load only if no slots exist
|
||||
session.add_all(slots)
|
||||
session.add_all(proposals)
|
||||
session.commit()
|
||||
# Only load data if slots are missing
|
||||
if not session.query(models.Slot).first():
|
||||
session.add_all(slots) # Add slots
|
||||
print("[INFO] Seeding slots...")
|
||||
|
||||
# Check if proposals table is empty and seed proposals
|
||||
if not session.query(models.Proposal).first():
|
||||
session.add_all(proposals) # Add proposals
|
||||
print("[INFO] Seeding proposals...")
|
||||
|
||||
# Commit all changes to the database
|
||||
session.commit()
|
||||
print("[INFO] Seeding complete.")
|
||||
|
||||
|
||||
# Load full sample data (used in dev/test)
|
||||
|
@ -17,7 +17,7 @@ from app.routers import (
|
||||
auth,
|
||||
sample,
|
||||
)
|
||||
from app.database import Base, engine, SessionLocal, load_sample_data, load_slots_data
|
||||
from app.database import Base, engine, SessionLocal
|
||||
|
||||
|
||||
# Utility function to fetch metadata from pyproject.toml
|
||||
@ -94,6 +94,7 @@ app.add_middleware(
|
||||
|
||||
@app.on_event("startup")
|
||||
def on_startup():
|
||||
print("[INFO] Running application startup tasks...")
|
||||
db = SessionLocal()
|
||||
try:
|
||||
if environment == "prod":
|
||||
@ -102,20 +103,26 @@ def on_startup():
|
||||
inspector = reflection.Inspector.from_engine(engine)
|
||||
tables_exist = inspector.get_table_names()
|
||||
|
||||
# Ensure the production database is initialized
|
||||
if not tables_exist:
|
||||
print("Production database is empty. Initializing...")
|
||||
Base.metadata.create_all(bind=engine)
|
||||
load_slots_data(db)
|
||||
else:
|
||||
print("Production database already initialized.")
|
||||
|
||||
else: # dev or test
|
||||
# Seed the database (slots + proposals)
|
||||
from app.database import load_slots_data
|
||||
|
||||
load_slots_data(db)
|
||||
else: # dev or test environments
|
||||
print(f"{environment.capitalize()} environment: Regenerating database.")
|
||||
Base.metadata.drop_all(bind=engine)
|
||||
Base.metadata.create_all(bind=engine)
|
||||
if environment == "dev":
|
||||
from app.database import load_sample_data
|
||||
|
||||
load_sample_data(db)
|
||||
elif environment == "test":
|
||||
from app.database import load_slots_data
|
||||
|
||||
load_slots_data(db)
|
||||
finally:
|
||||
db.close()
|
||||
|
Loading…
x
Reference in New Issue
Block a user