создана часть бекенда
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
import re
|
||||
import time
|
||||
|
||||
# Простая транслитерация
|
||||
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:
|
||||
# 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}"
|
||||
Reference in New Issue
Block a user