"""Общий каталог картинок для бота и админки (Docker volume).""" from __future__ import annotations import logging import shutil from pathlib import Path from common.config import AdminSettings logger = logging.getLogger(__name__) #: Встроенная картинка приветствия (лежит в образе бота и админки). BUILTIN_WELCOME = Path("images/welcome_image.jpg") #: Имя файла в volume, которое ждёт сид последовательности `welcome`. WELCOME_IMAGE_NAME = "welcome_image.jpg" def ensure_media(settings: AdminSettings) -> Path: """Создать каталог и положить туда встроенное приветствие, если его нет.""" directory = Path(settings.media_dir) directory.mkdir(parents=True, exist_ok=True) target = directory / WELCOME_IMAGE_NAME if not target.exists() and BUILTIN_WELCOME.is_file(): try: shutil.copyfile(BUILTIN_WELCOME, target) logger.info("Приветственная картинка скопирована в %s", target) except OSError: logger.warning("Не удалось скопировать приветственную картинку в %s", target, exc_info=True) return directory def media_path(settings: AdminSettings, name: str) -> Path: """Безопасный путь к файлу в media (без выхода из каталога).""" return Path(settings.media_dir) / Path(name).name