Files
redmine-reporter/redmine_reporter/config.py
Кокос Артем Николаевич 2db0ab1f0b Tighten configuration and export handling
2026-05-22 17:41:56 +07:00

69 lines
2.1 KiB
Python

import os
from typing import Union
from dotenv import load_dotenv
load_dotenv()
DEFAULT_REDMINE_VERIFY = "/etc/ssl/certs/ca-certificates.crt"
FALSE_VALUES = {"0", "false", "no", "off"}
TRUE_VALUES = {"1", "true", "yes", "on"}
class Config:
@classmethod
def get_redmine_url(cls) -> str:
return os.getenv("REDMINE_URL", "").strip().rstrip("/")
@classmethod
def get_redmine_api_key(cls) -> str:
return os.getenv("REDMINE_API_KEY", "").strip()
@classmethod
def get_redmine_user(cls) -> str:
return os.getenv("REDMINE_USER", "").strip()
@classmethod
def get_redmine_password(cls) -> str:
return os.getenv("REDMINE_PASSWORD", "")
@classmethod
def get_redmine_verify(cls) -> Union[bool, str]:
value = os.getenv("REDMINE_VERIFY", "").strip()
if not value:
return DEFAULT_REDMINE_VERIFY
normalized = value.lower()
if normalized in FALSE_VALUES:
return False
if normalized in TRUE_VALUES:
return True
return value
@classmethod
def get_author(cls, cli_author: str = "") -> str:
"""Возвращает автора: из CLI если задан, иначе из .env, иначе — заглушку."""
if cli_author:
return cli_author
return os.getenv("REDMINE_AUTHOR", "").strip()
@classmethod
def get_default_date_range(cls) -> str:
default_from_date = os.getenv("DEFAULT_FROM_DATE", "").strip()
default_to_date = os.getenv("DEFAULT_TO_DATE", "").strip()
if default_from_date and default_to_date:
return f"{default_from_date}--{default_to_date}"
# fallback hardcoded
return "2025-12-19--2026-01-31"
@classmethod
def validate(cls) -> None:
if not cls.get_redmine_url():
raise ValueError("REDMINE_URL is required (set via env or .env)")
if cls.get_redmine_api_key():
return
if not (cls.get_redmine_user() and cls.get_redmine_password()):
raise ValueError(
"REDMINE_API_KEY is required, or set both REDMINE_USER and REDMINE_PASSWORD"
)