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