38 lines
1.0 KiB
Python
38 lines
1.0 KiB
Python
from glob import glob
|
||
from loguru import logger
|
||
from typing import Optional
|
||
|
||
from .config import settings
|
||
|
||
__all__ = ("find_photo",)
|
||
|
||
|
||
class PhotoCache:
|
||
_cache: Optional[bytes] = None
|
||
|
||
@classmethod
|
||
async def find_photo(cls, file: str = None) -> bytes:
|
||
"""
|
||
Загружает фото в память и возвращает его как байты.
|
||
"""
|
||
if cls._cache:
|
||
return cls._cache
|
||
|
||
pattern: str = file or settings.DEFAULT_PHOTO
|
||
files: list[str] = glob(pattern)
|
||
if not files:
|
||
logger.bind(user="@Console").error(f"Файл {pattern} не найден.")
|
||
raise FileNotFoundError(f"Файл {pattern} не найден.")
|
||
|
||
chosen_file: str = files[0]
|
||
logger.bind(user="@Console").info(f"Выбран файл: {chosen_file}")
|
||
|
||
with open(chosen_file, "rb") as f:
|
||
cls._cache = f.read()
|
||
|
||
return cls._cache
|
||
|
||
|
||
# Создаем функцию для обратной совместимости
|
||
find_photo = PhotoCache.find_photo
|