primer commit
This commit is contained in:
commit
83f704c85d
12 files changed
+717
No files matched your search
@@ -0,0 +1,82 @@
|
||||
from dataclasses import dataclass
|
||||
from typing import Optional
|
||||
import json
|
||||
import os
|
||||
|
||||
@dataclass
|
||||
class HanaConfig:
|
||||
server: str
|
||||
port: int
|
||||
database: str
|
||||
user: str
|
||||
password: str
|
||||
|
||||
@dataclass
|
||||
class OutlookConfig:
|
||||
client_id: str
|
||||
client_secret: str
|
||||
tenant_id: str
|
||||
from_email: str
|
||||
to_email: list[str]
|
||||
attachments_folder: str = "./attachments"
|
||||
verify_ssl: bool = True
|
||||
ca_bundle: Optional[str] = None
|
||||
|
||||
@dataclass
|
||||
class CrystalConfig:
|
||||
path: str
|
||||
version: str
|
||||
|
||||
@dataclass
|
||||
class PowerbiConfig:
|
||||
url: str
|
||||
|
||||
@dataclass
|
||||
class Config:
|
||||
hana: HanaConfig
|
||||
outlook: OutlookConfig
|
||||
crystal: CrystalConfig
|
||||
powerbi: PowerbiConfig
|
||||
|
||||
@staticmethod
|
||||
def load(path: str = "config.json") -> 'Config':
|
||||
if not os.path.exists(path):
|
||||
raise FileNotFoundError(f"No se encontró el archivo de configuración: {path}")
|
||||
|
||||
with open(path, 'r', encoding='utf-8') as f:
|
||||
data = json.load(f)
|
||||
|
||||
hana_data = data.get('hana', {})
|
||||
outlook_data = data.get('outlook', {})
|
||||
crystal_data = data.get('crystal', {})
|
||||
|
||||
# Validar campos requeridos para HANA
|
||||
required_hana = ['server', 'port', 'database', 'user', 'password']
|
||||
for field in required_hana:
|
||||
if field not in hana_data:
|
||||
raise KeyError(f"Falta el campo requerido '{field}' en la sección 'hana' de {path}")
|
||||
|
||||
# Validar campos requeridos para Outlook
|
||||
required_outlook = ['client_id', 'client_secret', 'tenant_id', 'from_email', 'to_email']
|
||||
for field in required_outlook:
|
||||
if field not in outlook_data:
|
||||
raise KeyError(f"Falta el campo requerido '{field}' en la sección 'outlook' de {path}")
|
||||
|
||||
# Validar campos requeridos para Crystal
|
||||
required_crystal = ['path', 'version']
|
||||
for field in required_crystal:
|
||||
if field not in crystal_data:
|
||||
raise KeyError(f"Falta el campo requerido '{field}' en la sección 'crystal' de {path}")
|
||||
|
||||
powerbi_data = data.get('powerbi', {})
|
||||
required_powerbi = ['url']
|
||||
for field in required_powerbi:
|
||||
if field not in powerbi_data:
|
||||
raise KeyError(f"Falta el campo requerido '{field}' en la sección 'powerbi' de {path}")
|
||||
|
||||
hana = HanaConfig(**hana_data)
|
||||
outlook = OutlookConfig(**outlook_data)
|
||||
crystal = CrystalConfig(**crystal_data)
|
||||
powerbi=PowerbiConfig(**powerbi_data)
|
||||
|
||||
return Config(hana=hana, outlook=outlook, crystal=crystal,powerbi=powerbi)
|
||||
Reference in new issue
Block a user