"""Утилиты для парсинга данных.""" 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