69 lines
2.1 KiB
Python
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"
|
|
)
|