from typing import Optional from sqlalchemy import create_engine from sqlalchemy.engine import Engine from actions.config.config import Config 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") # 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