import re import time from .loggers import logger # Простая транслитерация TRANSLIT_MAP = { "а": "a", "б": "b", "в": "v", "г": "g", "д": "d", "е": "e", "ё": "yo", "ж": "zh", "з": "z", "и": "i", "й": "y", "к": "k", "л": "l", "м": "m", "н": "n", "о": "o", "п": "p", "р": "r", "с": "s", "т": "t", "у": "u", "ф": "f", "х": "h", "ц": "c", "ч": "ch", "ш": "sh", "щ": "sch", "ъ": "", "ы": "y", "ь": "", "э": "e", "ю": "yu", "я": "ya", } # Заглавные буквы → в ту же латиницу, но без capital (ниже мы в lower() всё равно переводим) TRANSLIT_MAP.update({k.upper(): v for k, v in TRANSLIT_MAP.items()}) def transliterate(text: str) -> str: return "".join(TRANSLIT_MAP.get(ch, ch) for ch in text) def safeFilename(name: str) -> str: try: # 1. Транслитерация кириллицы name = transliterate(name) # 2. Приводим к нижнему регистру name = name.lower() # 3. Заменяем всё, что не буква/цифра, на "_" name = re.sub(r"[^a-z0-9]+", "_", name) # 4. Убираем повторяющиеся "_" name = re.sub(r"_+", "_", name).strip("_") # 5. Ограничиваем длину name = name[:80] or "file" # 6. Добавляем таймштамп timestamp = int(time.time() * 1000) # миллисекунды return f"{name}_{timestamp}" except Exception as e: logger.error(f"Ошибка создания названия файла: {str(e)}") return "file"