61 lines
2.2 KiB
Python
61 lines
2.2 KiB
Python
# Copyright (c) 2025 Patrick Motsch
|
|
# All rights reserved.
|
|
"""
|
|
Teamsbot Feature - Configuration utilities.
|
|
Loads and manages bot configuration from FeatureInstance.config.
|
|
"""
|
|
|
|
import logging
|
|
from typing import Optional, Dict, Any
|
|
|
|
from .datamodelTeamsbot import TeamsbotConfig
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def loadConfigFromInstance(instanceId: str) -> TeamsbotConfig:
|
|
"""
|
|
Load TeamsbotConfig from a FeatureInstance's config JSONB field.
|
|
Falls back to default config if not found or invalid.
|
|
"""
|
|
try:
|
|
from modules.interfaces.interfaceDbApp import getRootInterface
|
|
from modules.interfaces.interfaceFeatures import getFeatureInterface
|
|
|
|
rootInterface = getRootInterface()
|
|
featureInterface = getFeatureInterface(rootInterface.db)
|
|
instance = featureInterface.getFeatureInstance(instanceId)
|
|
|
|
if not instance:
|
|
logger.warning(f"FeatureInstance '{instanceId}' not found, using default config")
|
|
return TeamsbotConfig()
|
|
|
|
configDict = instance.get("config") if isinstance(instance, dict) else getattr(instance, "config", None)
|
|
|
|
if configDict and isinstance(configDict, dict):
|
|
# Extract teamsbot-specific config if nested
|
|
teamsbotConfig = configDict.get("teamsbot", configDict)
|
|
return TeamsbotConfig(**teamsbotConfig)
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error loading teamsbot config for instance '{instanceId}': {e}")
|
|
|
|
return TeamsbotConfig()
|
|
|
|
|
|
def saveConfigToInstance(instanceId: str, config: TeamsbotConfig) -> bool:
|
|
"""Save TeamsbotConfig to FeatureInstance.config JSONB field."""
|
|
try:
|
|
from modules.interfaces.interfaceDbApp import getRootInterface
|
|
from modules.interfaces.interfaceFeatures import getFeatureInterface
|
|
|
|
rootInterface = getRootInterface()
|
|
featureInterface = getFeatureInterface(rootInterface.db)
|
|
|
|
featureInterface.updateFeatureInstanceConfig(instanceId, config.model_dump())
|
|
logger.info(f"Teamsbot config saved for instance '{instanceId}'")
|
|
return True
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error saving teamsbot config for instance '{instanceId}': {e}")
|
|
return False
|