Source code for qtframework.config.providers

"""Configuration providers for different sources."""

from __future__ import annotations

import pathlib
from abc import ABC, abstractmethod
from typing import Any


[docs] class ConfigProvider(ABC): """Abstract configuration provider."""
[docs] @abstractmethod def load(self) -> dict[str, Any]: """Load configuration data.""" ...
[docs] @abstractmethod def save(self, data: dict[str, Any]) -> bool: """Save configuration data.""" ...
[docs] class FileProvider(ConfigProvider): """File-based configuration provider.""" def __init__(self, path: str) -> None: """Initialize file provider.""" self.path = path
[docs] def load(self) -> dict[str, Any]: """Load from file.""" return {}
[docs] def save(self, data: dict[str, Any]) -> bool: """Save to file.""" return True
[docs] class JsonProvider(FileProvider): """JSON configuration provider."""
[docs] def load(self) -> dict[str, Any]: """Load from JSON.""" import json try: with pathlib.Path(self.path).open(encoding="utf-8") as f: data: dict[str, Any] = json.load(f) return data except: return {}
[docs] class YamlProvider(FileProvider): """YAML configuration provider."""
[docs] def load(self) -> dict[str, Any]: """Load from YAML.""" try: import yaml with pathlib.Path(self.path).open(encoding="utf-8") as f: data: dict[str, Any] = yaml.safe_load(f) or {} return data except: return {}
[docs] class EnvProvider(ConfigProvider): """Environment variable configuration provider.""" def __init__(self, prefix: str = "") -> None: """Initialize env provider.""" self.prefix = prefix
[docs] def load(self) -> dict[str, Any]: """Load from environment.""" import os data = {} for key, value in os.environ.items(): if self.prefix and not key.startswith(self.prefix): continue data[key] = value return data
[docs] def save(self, data: dict[str, Any]) -> bool: """Cannot save to environment.""" return False