45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
"""Utility helper functions."""
|
|
|
|
from typing import Tuple
|
|
from config.settings import settings
|
|
|
|
|
|
def parse_range(value: str, default_min: int = 5) -> tuple:
|
|
"""Парсит строку диапазона 'мин-макс' или одиночное число."""
|
|
# Очищаем от кавычек и пробелов
|
|
value = str(value).replace("'", "").replace('"', "").replace("`", "").strip()
|
|
|
|
if '-' in value:
|
|
parts = value.split('-')
|
|
if len(parts) != 2:
|
|
raise ValueError(f"Неверный формат: {value}. Пример: 10-30")
|
|
try:
|
|
min_val = int(parts[0].strip())
|
|
max_val = int(parts[1].strip())
|
|
except ValueError:
|
|
raise ValueError(f"Не числа: {value}. Пример: 10-30")
|
|
|
|
if min_val < default_min:
|
|
raise ValueError(f"Минимум: {default_min}")
|
|
if min_val >= max_val:
|
|
raise ValueError("Мин должно быть меньше макс")
|
|
return min_val, max_val
|
|
else:
|
|
try:
|
|
val = int(value)
|
|
except ValueError:
|
|
raise ValueError(f"Не число: {value}")
|
|
if val < default_min:
|
|
raise ValueError(f"Минимум: {default_min}")
|
|
return val, val
|
|
|
|
|
|
|
|
def format_range(min_val: int, max_val: int) -> str:
|
|
"""Format range for display."""
|
|
return f"{min_val}-{max_val}" if min_val != max_val else str(min_val)
|
|
|
|
|
|
def extract_domain(url: str) -> str:
|
|
"""Extract domain from URL."""
|
|
return url.replace("https://", "").replace("http://", "").split("/")[0] |