Files
man-card/man_card/config.py
2026-01-31 21:39:48 +00:00

54 lines
1.6 KiB
Python

"""Configuration management module."""
import os
from dataclasses import dataclass, field
from pathlib import Path
from typing import Optional
@dataclass
class Config:
"""Application configuration."""
default_format: str = "pdf"
default_dpi: int = 150
default_template: str = "default"
page_size: str = "a4"
@classmethod
def from_env(cls) -> "Config":
"""Load configuration from environment variables."""
return cls(
default_format=os.getenv("MANCARD_DEFAULT_FORMAT", "pdf"),
default_dpi=int(os.getenv("MANCARD_DEFAULT_DPI", "150")),
default_template=os.getenv("MANCARD_DEFAULT_TEMPLATE", "default"),
page_size=os.getenv("MANCARD_PAGE_SIZE", "a4")
)
@classmethod
def from_dotenv(cls, path: Optional[str] = None) -> "Config":
"""Load configuration from .env file."""
try:
from dotenv import load_dotenv
if path is None:
path = Path(__file__).parent.parent / ".env"
elif isinstance(path, str):
path = Path(path)
if path.exists():
load_dotenv(path)
except ImportError:
pass
return cls.from_env()
def merge(self, **overrides) -> "Config":
"""Create a new config with overridden values."""
data = {
"default_format": self.default_format,
"default_dpi": self.default_dpi,
"default_template": self.default_template,
"page_size": self.page_size
}
data.update({k: v for k, v in overrides.items() if v is not None})
return cls(**data)