Uecko_ERP_FactuGES_sync/app/config/settings.py
2025-11-30 10:43:57 +01:00

82 lines
3.0 KiB
Python

import logging
import os
from os.path import join, dirname
from typing import Any, Dict, Optional
from dotenv import load_dotenv
def _required(name: str) -> str:
"""
Devuelve el valor de la variable de entorno `name`.
Lanza RuntimeError si no existe o está vacía.
"""
value = os.getenv(name)
if value is None or value == "":
# Comentario: fail fast con mensaje claro
raise RuntimeError(f"Missing required environment variable: {name}")
return value
def load_config() -> Dict[str, Any]:
"""
Carga la configuración desde variables de entorno.
- En dev: carga dev.env y luego valida.
- En prod: NO carga ningún .env, solo usa entorno del sistema/contendor.
- Si falta alguna variable requerida -> RuntimeError.
"""
env = os.getenv("ENV", "dev")
if env == "dev":
dotenv_path = join(dirname(__file__), "../../enviroment/dev.env")
load_dotenv(dotenv_path)
elif env == "prod":
# En producción NO se carga archivo .env
# Las variables vienen del contenedor (docker run -e VAR=...)
pass
else:
raise RuntimeError(f"Unknown ENV: {env}")
config: Dict[str, Any] = {
# Opcionales (con valor por defecto)
"ENV": env,
"ENVIRONMENT": os.getenv("ENVIRONMENT", env),
"LOCAL_TZ": os.getenv("LOCAL_TZ", "Europe/Madrid"),
"LAST_RUN_PATH": _required("LAST_RUN_PATH"),
# FACTUGES (requeridas)
"FACTUGES_HOST": _required("FACTUGES_HOST"),
"FACTUGES_PORT": _required("FACTUGES_PORT"),
"FACTUGES_DATABASE": _required("FACTUGES_DATABASE"),
"FACTUGES_USER": _required("FACTUGES_USER"),
"FACTUGES_PASSWORD": _required("FACTUGES_PASSWORD"),
# UECKO MySQL (requeridas salvo puerto)
"UECKO_MYSQL_HOST": _required("UECKO_MYSQL_HOST"),
"UECKO_MYSQL_PORT": os.getenv("UECKO_MYSQL_PORT", "3306"),
"UECKO_MYSQL_DATABASE": _required("UECKO_MYSQL_DATABASE"),
"UECKO_MYSQL_USER": _required("UECKO_MYSQL_USER"),
"UECKO_MYSQL_PASSWORD": _required("UECKO_MYSQL_PASSWORD"),
# Constantes/CTE (requeridas)
"CTE_COMPANY_ID": _required("CTE_COMPANY_ID"),
"CTE_SERIE": _required("CTE_SERIE"),
"CTE_STATUS_INVOICE": _required("CTE_STATUS_INVOICE"),
"CTE_IS_PROFORMA": _required("CTE_IS_PROFORMA"),
"CTE_STATUS_VERIFACTU": _required("CTE_STATUS_VERIFACTU"),
"CTE_LANGUAGE_CODE": _required("CTE_LANGUAGE_CODE"),
"CTE_COUNTRY_CODE": _required("CTE_COUNTRY_CODE"),
"CTE_IS_COMPANY": _required("CTE_IS_COMPANY"),
"CTE_SYNC_RESULT_OK": _required("CTE_SYNC_RESULT_OK"),
"CTE_SYNC_RESULT_FAIL": _required("CTE_SYNC_RESULT_FAIL"),
# Verifactu (requeridas)
"VERIFACTU_BASE_URL": _required("VERIFACTU_BASE_URL"),
"VERIFACTU_API_KEY": _required("VERIFACTU_API_KEY"),
"VERIFACTU_NIFS_API_KEY": _required("VERIFACTU_NIFS_API_KEY"),
}
return config