36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
from dotenv import dotenv_values, load_dotenv
|
|
import os
|
|
|
|
|
|
class EnvConfigLoader:
|
|
"""
|
|
Classe para carregar todas as variáveis de ambiente (.env)
|
|
e permitir acesso via atributo (settings.VAR).
|
|
"""
|
|
|
|
def __init__(self, env_file: str = ".env"):
|
|
|
|
# Garante que o .env será carregado no ambiente do sistema
|
|
load_dotenv(env_file)
|
|
|
|
# Lê todas as variáveis (do arquivo + sistema)
|
|
self._values = {
|
|
**dotenv_values(env_file), # Conteúdo do .env
|
|
**os.environ, # Variáveis já existentes no ambiente
|
|
}
|
|
|
|
def __getattr__(self, name: str):
|
|
"""Permite acessar como settings.VAR"""
|
|
# Normaliza o nome para maiúsculo
|
|
key = name.upper()
|
|
if key in self._values:
|
|
return self._values[key]
|
|
raise AttributeError(f"A variável '{name}' não existe no .env")
|
|
|
|
def __repr__(self):
|
|
"""Exibe todas as variáveis carregadas"""
|
|
return f"<Settings {self._values}>"
|
|
|
|
def all(self) -> dict:
|
|
"""Retorna todas as variáveis como dicionário"""
|
|
return dict(self._values)
|