feat(Env): Ajusta a conexão do firebird para variavel de ambiente
This commit is contained in:
parent
e62cb2ab5c
commit
9970c3700f
4 changed files with 132 additions and 93 deletions
86
actions/env/env_config_loader.py
vendored
Normal file
86
actions/env/env_config_loader.py
vendored
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
import os
|
||||
import json
|
||||
from types import SimpleNamespace
|
||||
from typing import Any, Dict
|
||||
|
||||
|
||||
class EnvConfigLoader:
|
||||
"""
|
||||
Carrega variáveis de ambiente com um prefixo comum
|
||||
e permite acessá-las diretamente via ponto, sem agrupar subníveis.
|
||||
|
||||
Exemplo:
|
||||
ORIUS_API_FDB_HOST=localhost
|
||||
ORIUS_API_FDB_PORT=3050
|
||||
ORIUS_API_FDB_POOL_SIZE=5
|
||||
|
||||
config = EnvConfigLoader("ORIUS_API_FDB")
|
||||
print(config.host) # localhost
|
||||
print(config.port) # 3050
|
||||
print(config.pool_size) # 5
|
||||
"""
|
||||
|
||||
def __init__(self, prefix: str):
|
||||
self.prefix = prefix.upper().strip("_")
|
||||
self._data = self._load()
|
||||
# transforma o dicionário em objeto (sem agrupar)
|
||||
self._object = SimpleNamespace(**self._data)
|
||||
|
||||
# -------------------------------
|
||||
# Conversão de valores automáticos
|
||||
# -------------------------------
|
||||
def _convert_value(self, value: str) -> Any:
|
||||
value = value.strip()
|
||||
|
||||
# Boolean
|
||||
if value.lower() in ["true", "false"]:
|
||||
return value.lower() == "true"
|
||||
|
||||
# Integer
|
||||
if value.isdigit():
|
||||
return int(value)
|
||||
|
||||
# Float
|
||||
try:
|
||||
return float(value)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
# JSON (dicts, arrays)
|
||||
try:
|
||||
return json.loads(value)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return value
|
||||
|
||||
# -------------------------------
|
||||
# Carrega variáveis do ambiente
|
||||
# -------------------------------
|
||||
def _load(self) -> Dict[str, Any]:
|
||||
prefix_match = f"{self.prefix}_"
|
||||
data = {}
|
||||
|
||||
for key, value in os.environ.items():
|
||||
if key.startswith(prefix_match):
|
||||
subkey = key[len(prefix_match) :].lower() # tudo em minúsculo
|
||||
data[subkey] = self._convert_value(value)
|
||||
|
||||
return data
|
||||
|
||||
# -------------------------------
|
||||
# Permite acesso direto via ponto
|
||||
# -------------------------------
|
||||
def __getattr__(self, name: str) -> Any:
|
||||
if hasattr(self._object, name):
|
||||
return getattr(self._object, name)
|
||||
raise AttributeError(f"'{self.prefix}' não contém '{name}'")
|
||||
|
||||
# -------------------------------
|
||||
# Acesso via dicionário
|
||||
# -------------------------------
|
||||
def __getitem__(self, key: str) -> Any:
|
||||
return getattr(self._object, key.lower(), None)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return json.dumps(self._data, indent=2, ensure_ascii=False)
|
||||
|
|
@ -3,6 +3,7 @@ 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:
|
||||
|
|
@ -10,28 +11,29 @@ class Firebird:
|
|||
|
||||
@classmethod
|
||||
def get_engine(cls) -> Engine:
|
||||
# Obtem as configurações do arquivo JSON
|
||||
database = Config.get('database/firebird.json')
|
||||
|
||||
# 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://{database.user}:"
|
||||
f"{database.password}@"
|
||||
f"{database.host}:"
|
||||
f"{database.port}/"
|
||||
f"{database.name}"
|
||||
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": database.charset},
|
||||
pool_pre_ping=bool(database.pool.pre_ping),
|
||||
pool_size=database.pool.size,
|
||||
max_overflow=database.pool.max_overflow,
|
||||
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
|
||||
|
|
|
|||
17
env.bat
Normal file
17
env.bat
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
@echo off
|
||||
echo === Registrando variáveis de ambiente ORIUS_API ===
|
||||
|
||||
setx ORIUS_API_FDB_HOST "localhost"
|
||||
setx ORIUS_API_FDB_NAME "S:\Bases\SANTARITA.FDB"
|
||||
setx ORIUS_API_FDB_PORT "3050"
|
||||
setx ORIUS_API_FDB_USER "SYSDBA"
|
||||
setx ORIUS_API_FDB_PASSWORD "302b3c"
|
||||
setx ORIUS_API_FDB_CHARSET "UTF8"
|
||||
setx ORIUS_API_FDB_POOL_PRE_PING "true"
|
||||
setx ORIUS_API_FDB_POOL_SIZE "5"
|
||||
setx ORIUS_API_FDB_POOL_MAX_OVERFLOW "10"
|
||||
|
||||
echo.
|
||||
echo ✅ Variáveis ORIUS_API registradas com sucesso!
|
||||
echo Reinicie o terminal ou o computador para aplicar as alterações.
|
||||
pause
|
||||
|
|
@ -1,90 +1,24 @@
|
|||
@echo off
|
||||
setlocal EnableExtensions EnableDelayedExpansion
|
||||
setlocal
|
||||
|
||||
:: ===== Configuração/ajuda =====
|
||||
if /I "%~1"=="-h" goto :help
|
||||
if /I "%~1"=="/h" goto :help
|
||||
if /I "%~1"=="--help" goto :help
|
||||
echo ===============================
|
||||
echo 🧹 Limpando cache do Python (somente raiz)
|
||||
echo ===============================
|
||||
|
||||
:: Pasta raiz = 1º argumento ou pasta atual
|
||||
set "ROOT=%~1"
|
||||
if not defined ROOT set "ROOT=%cd%"
|
||||
|
||||
:: Checa flag /dry-run em qualquer argumento
|
||||
set "DRYRUN="
|
||||
for %%A in (%*) do (
|
||||
if /I "%%~A"=="/dry-run" set "DRYRUN=1"
|
||||
)
|
||||
|
||||
:: Normaliza ROOT removendo aspas extras
|
||||
for %%# in ("%ROOT%") do set "ROOT=%%~f#"
|
||||
|
||||
if not exist "%ROOT%" (
|
||||
echo [ERRO] Pasta nao encontrada: "%ROOT%"
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
:: ===== Timestamp e log =====
|
||||
set "TS=%date%_%time%"
|
||||
set "TS=%TS:/=%"
|
||||
set "TS=%TS::=%"
|
||||
set "TS=%TS:.=%"
|
||||
set "TS=%TS:,=%"
|
||||
set "TS=%TS: =0%"
|
||||
set "LOG=%ROOT%\cleanup_pycache_%TS%.log"
|
||||
|
||||
echo ================================================== > "%LOG%"
|
||||
echo Limpeza de __pycache__ >> "%LOG%"
|
||||
echo Pasta raiz: "%ROOT%" >> "%LOG%"
|
||||
if defined DRYRUN (echo Modo: DRY-RUN (apenas listar) >> "%LOG%") else (echo Modo: EXECUTANDO REMOCOES >> "%LOG%")
|
||||
echo Iniciado: %date% %time% >> "%LOG%"
|
||||
echo ================================================== >> "%LOG%"
|
||||
|
||||
set /a FOUND=0, OK=0, ERR=0
|
||||
|
||||
:: ===== Procura e (opcionalmente) remove =====
|
||||
for /d /r "%ROOT%" %%D in (__pycache__) do (
|
||||
set /a FOUND+=1
|
||||
if defined DRYRUN (
|
||||
echo [LISTAR] "%%~fD"
|
||||
>>"%LOG%" echo [LISTAR] "%%~fD"
|
||||
) else (
|
||||
echo [APAGAR] "%%~fD"
|
||||
rd /s /q "%%~fD" 1>nul 2>nul
|
||||
if exist "%%~fD" (
|
||||
set /a ERR+=1
|
||||
>>"%LOG%" echo [FALHA] "%%~fD"
|
||||
) else (
|
||||
set /a OK+=1
|
||||
>>"%LOG%" echo [OK] "%%~fD"
|
||||
REM Remove pastas __pycache__ e .pytest_cache na raiz
|
||||
for %%i in (__pycache__ .pytest_cache) do (
|
||||
if exist "%%i" (
|
||||
echo Removendo diretório %%i ...
|
||||
rmdir /s /q "%%i"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
echo.>>"%LOG%"
|
||||
echo Pastas encontradas: %FOUND% >> "%LOG%"
|
||||
echo Removidas com sucesso: %OK% >> "%LOG%"
|
||||
echo Falhas: %ERR% >> "%LOG%"
|
||||
echo Finalizado: %date% %time% >> "%LOG%"
|
||||
|
||||
:: ===== Resumo no console =====
|
||||
echo.
|
||||
echo ===== RESUMO =====
|
||||
echo Pasta raiz: "%ROOT%"
|
||||
if defined DRYRUN (echo Modo: DRY-RUN ^(nao removeu nada^))
|
||||
echo Pastas encontradas: %FOUND%
|
||||
if not defined DRYRUN (
|
||||
echo Removidas com sucesso: %OK%
|
||||
echo Falhas: %ERR%
|
||||
REM Remove arquivos .pyc na raiz
|
||||
for %%f in (*.pyc) do (
|
||||
echo Removendo arquivo %%f ...
|
||||
del /q "%%f"
|
||||
)
|
||||
echo Log salvo em: "%LOG%"
|
||||
exit /b 0
|
||||
|
||||
:help
|
||||
echo Uso:
|
||||
echo cleanup_pycache.bat [PASTA_RAIZ] [/dry-run]
|
||||
echo.
|
||||
echo Ex.: cleanup_pycache.bat "D:\Projetos\MeuApp"
|
||||
echo Ex.: cleanup_pycache.bat /dry-run
|
||||
echo Ex.: cleanup_pycache.bat "D:\Repos" /dry-run
|
||||
exit /b 0
|
||||
echo ✅ Cache do Python limpo com sucesso!
|
||||
endlocal
|
||||
pause
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue