File size: 1,162 Bytes
3168916
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# core/db_ready.py
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