Настройка локального окружения переменных
This commit is contained in:
65
configs/config.py
Normal file
65
configs/config.py
Normal file
@@ -0,0 +1,65 @@
|
||||
# config.py
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import field_validator
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
|
||||
class _Settings(BaseSettings):
|
||||
model_config = SettingsConfigDict(
|
||||
env_file=".env",
|
||||
env_file_encoding="utf-8",
|
||||
extra="ignore",
|
||||
case_sensitive=False,
|
||||
validate_default=True,
|
||||
)
|
||||
|
||||
BOT_TOKEN: Optional[str] = None
|
||||
PREFIX: Optional[str] = '!'
|
||||
|
||||
WELCOME_CHANNEL_ID: int = 0
|
||||
ADMIN_ROLE_NAME: str = "Администратор"
|
||||
|
||||
WARNINGS_FILE: Path = Path("warnings.json")
|
||||
REMINDERS_FILE: Path = Path("reminders.json")
|
||||
BLACKLIST_FILE: Path = Path("blacklist.json")
|
||||
|
||||
LOG_FILE_NAME: Path = Path("bot.log")
|
||||
LOG_LEVEL: str = "info"
|
||||
|
||||
@field_validator("BOT_TOKEN")
|
||||
def validate_bot_token(cls, v: Optional[str]) -> str:
|
||||
if not v:
|
||||
raise ValueError("Не задан BOT_TOKEN (проверь .env или переменные окружения)")
|
||||
return v
|
||||
|
||||
@field_validator("WELCOME_CHANNEL_ID")
|
||||
def validate_channel_id(cls, v: int) -> int:
|
||||
if v <= 0:
|
||||
raise ValueError("WELCOME_CHANNEL_ID должен быть положительным ID канала")
|
||||
return v
|
||||
|
||||
@field_validator("ADMIN_ROLE_NAME")
|
||||
def validate_admin_role_name(cls, v: str) -> str:
|
||||
if not v.strip():
|
||||
raise ValueError("ADMIN_ROLE_NAME не может быть пустым")
|
||||
return v
|
||||
|
||||
@field_validator("LOG_LEVEL")
|
||||
def validate_log_level(cls, v: str) -> str:
|
||||
allowed: set[str] = {"debug", "info", "warning", "error", "critical"}
|
||||
if v.lower() not in allowed:
|
||||
raise ValueError(f"LOG_LEVEL должен быть одним из: {', '.join(allowed)}")
|
||||
return v.lower()
|
||||
|
||||
@field_validator("WARNINGS_FILE", "REMINDERS_FILE", "BLACKLIST_FILE", "LOG_FILE_NAME", mode="before")
|
||||
def validate_paths(cls, v) -> Optional[Path]:
|
||||
return Path(v) if isinstance(v, str) else v
|
||||
|
||||
|
||||
# Создаём экземпляр класса настроек
|
||||
settings = _Settings()
|
||||
|
||||
# Настройка экспорта в модули
|
||||
__all__ = ("settings",)
|
||||
Reference in New Issue
Block a user