|
|
|
|
|
from sqlalchemy import text
|
|
|
from sqlalchemy.exc import OperationalError
|
|
|
from db import init_db, get_session_safe
|
|
|
from models import Course
|
|
|
|
|
|
def ensure_db_ready():
|
|
|
"""
|
|
|
Garante que o schema exista antes de utilizar a sessão.
|
|
|
"""
|
|
|
db = get_session_safe()
|
|
|
try:
|
|
|
db.execute(text("SELECT 1"))
|
|
|
try:
|
|
|
db.query(Course).limit(1).all()
|
|
|
return db
|
|
|
except OperationalError:
|
|
|
db.close()
|
|
|
init_db()
|
|
|
db2 = get_session_safe()
|
|
|
try:
|
|
|
db2.query(Course).limit(1).all()
|
|
|
return db2
|
|
|
except Exception:
|
|
|
db2.close()
|
|
|
raise
|
|
|
except Exception:
|
|
|
db.close()
|
|
|
raise
|
|
|
|
|
|
def commit_with_retry(db, on_retry_init: bool = True) -> None:
|
|
|
try:
|
|
|
db.commit()
|
|
|
except OperationalError:
|
|
|
db.rollback()
|
|
|
if on_retry_init:
|
|
|
init_db()
|
|
|
try:
|
|
|
db.commit()
|
|
|
return
|
|
|
except Exception as e2:
|
|
|
db.rollback()
|
|
|
raise e2
|
|
|
raise |