saas_api/database/firebird.py

45 lines
1.3 KiB
Python

from typing import Optional
from sqlalchemy import create_engine
from sqlalchemy.engine import Engine
from actions.env.env_config_loader import EnvConfigLoader
class Firebird:
_engine: Optional[Engine] = None
@classmethod
def get_engine(cls) -> Engine:
# Instancia o loader com o prefixo correto
env_database = EnvConfigLoader(prefix="ORIUS_API_FDB")
print(env_database)
# Cria a engine apenas uma vez
if cls._engine is None:
# DSN para o SQLAlchemy usando firebird-driver
dsn = (
f"firebird+firebird://{env_database.user}:"
f"{env_database.password}@"
f"{env_database.host}:"
f"{env_database.port}/"
f"{env_database.name}"
)
# Criação da engine SQLAlchemy
cls._engine = create_engine(
dsn,
connect_args={"charset": env_database.charset},
pool_pre_ping=bool(env_database.pool_pre_ping),
pool_size=env_database.pool_size,
max_overflow=env_database.pool_max_overflow,
)
return cls._engine
@classmethod
def dispose(cls):
if cls._engine:
cls._engine.dispose()
cls._engine = None