Files
postbot/app/bots/editor/utils/parsers.py

57 lines
1.8 KiB
Python

"""Утилиты для парсинга данных."""
from typing import Dict, Any, List, Set
import re
from urllib.parse import urlparse
def extract_variables(text: str) -> Set[str]:
"""Извлекает переменные из шаблона."""
if not text:
return set()
return set(re.findall(r'\{([^}]+)\}', text))
def validate_url(url: str) -> bool:
"""Проверяет валидность URL."""
try:
parsed = urlparse(url)
return bool(parsed.scheme and parsed.netloc)
except Exception:
return False
def parse_key_value_lines(text: str) -> Dict[str, Any]:
"""Парсинг клавиатуры из текста формата 'текст = ссылка'."""
keyboard = {"rows": []}
current_row = []
lines = text.strip().split('\n')
for line in lines:
line = line.strip()
if not line:
continue
if line == "---":
if current_row:
keyboard["rows"].append(current_row)
current_row = []
continue
parts = line.split('=', 1)
if len(parts) != 2:
raise ValueError(f"Неверный формат строки: {line}")
text, url = parts[0].strip(), parts[1].strip()
# Проверка URL
try:
parsed = urlparse(url)
if not parsed.scheme or not parsed.netloc:
raise ValueError(f"Некорректный URL: {url}")
except Exception:
raise ValueError(f"Некорректный URL: {url}")
current_row.append({"text": text, "url": url})
if current_row:
keyboard["rows"].append(current_row)
return keyboard