Files
MatrixBridge/config.py

62 lines
1.5 KiB
Python

"""Configuration loader for the Matrix Bridge.
Loads settings from config.json and provides typed access via dataclasses.
"""
from __future__ import annotations
import json
import os
from dataclasses import dataclass, field
from typing import Optional
DEFAULT_CONFIG_PATH = os.path.join(os.path.dirname(__file__), "config.json")
@dataclass
class MatrixConfig:
server: str
user_id: str
room_id: str
credentials_file: str
@dataclass
class AgentConfig:
base_url: str
@dataclass
class BridgeConfig:
poll_interval_seconds: int = 1
state_file: str = "/home/admin/agent-dir/bridge-state.json"
matrix_poll_timeout: int = 0
agent_timeout_seconds: int = 30
agent_retries: int = 3
max_message_length: int = 40000
processed_ids_limit: int = 200
agent_response_timeout: int = 300
api_host: str = "10.0.1.2"
api_port: int = 8082
@dataclass
class Config:
matrix: MatrixConfig
agent: AgentConfig
bridge: BridgeConfig = field(default_factory=BridgeConfig)
@classmethod
def load(cls, path: str = DEFAULT_CONFIG_PATH) -> "Config":
"""Load configuration from a JSON file."""
with open(path, "r") as f:
data = json.load(f)
matrix = MatrixConfig(**data.get("matrix", {}))
agent = AgentConfig(**data.get("agent", {}))
bridge_data = data.get("bridge", {})
bridge = BridgeConfig(**bridge_data)
return cls(matrix=matrix, agent=agent, bridge=bridge)