diff --git a/dbapp/mainapp/utils.py b/dbapp/mainapp/utils.py index 9ddb634..29ff99d 100644 --- a/dbapp/mainapp/utils.py +++ b/dbapp/mainapp/utils.py @@ -203,10 +203,17 @@ def find_mirror_satellites(mirror_names: list) -> list: Алгоритм: 1. Для каждого имени зеркала: - - Обрезать пробелы и привести к нижнему регистру + - Обрезать пробелы + - Извлечь первую часть имени (до скобки), если есть двойное имя + - Привести к нижнему регистру - Найти все спутники, в имени или альтернативном имени которых содержится это имя 2. Вернуть список найденных спутников + Примеры обработки: + - "DSN-3 (SUPERBIRD-C2)" -> "dsn-3" + - "Turksat 3A" -> "turksat 3a" + - " Amos 4 " -> "amos 4" + Args: mirror_names: список имен зеркал @@ -221,15 +228,26 @@ def find_mirror_satellites(mirror_names: list) -> list: if not mirror_name or mirror_name == "-": continue - # Обрезаем пробелы и приводим к нижнему регистру - mirror_name_clean = mirror_name.strip().lower() + # Обрезаем пробелы + mirror_name_clean = mirror_name.strip() - if not mirror_name_clean: + if not mirror_name_clean or mirror_name_clean == "-": + continue + + # Извлекаем первую часть имени (до скобки), если есть двойное имя + # Например: "DSN-3 (SUPERBIRD-C2)" -> "DSN-3" + if "(" in mirror_name_clean: + mirror_name_clean = mirror_name_clean.split("(")[0].strip() + + # Приводим к нижнему регистру для поиска + mirror_name_lower = mirror_name_clean.lower() + + if not mirror_name_lower: continue # Ищем спутники, в имени или альтернативном имени которых содержится имя зеркала satellites = Satellite.objects.filter( - Q(name__icontains=mirror_name_clean) | Q(alternative_name__icontains=mirror_name_clean) + Q(name__icontains=mirror_name_lower) | Q(alternative_name__icontains=mirror_name_lower) ) found_satellites.extend(satellites)