File size: 1,173 Bytes
9aaf513
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import functools
import os
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from functools import wraps
from sqlalchemy.exc import SQLAlchemyError
from fastapi import HTTPException
from sqlmodel import SQLModel
from dotenv import load_dotenv

from backend.common.config_loader import read_env


@functools.lru_cache
def init_db():
    db_url = read_env("DB_URL", "sqlite:///backend/records.db")
    engine = create_engine(db_url, connect_args={"check_same_thread": False})
    SQLModel.metadata.create_all(engine)
    return sessionmaker(autocommit=False, autoflush=False, bind=engine)


def get_db_session():
    db_instance = init_db()
    return db_instance()


def handle_database_errors(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        session = None
        try:
            session = get_db_session()
            kwargs['session'] = session

            return func(*args, **kwargs)
        except Exception as e:
            print(f"Database error has occurred: {e}")
            raise
        finally:
            if session:
                session.close()
    return wrapper