From 96f961b0f8deb14e16b9f087984e6ba320a00cb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D1=88=D0=BA=D0=B8=D0=BD=20=D0=A1=D0=B5=D1=80?= =?UTF-8?q?=D0=B3=D0=B5=D0=B9?= Date: Tue, 2 Dec 2025 09:16:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D1=84=D0=B8=D0=BA=D1=81=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=83=D0=BC=D0=B5=D0=BD=D0=B0=20=D0=B7=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=D0=BB=20=D0=BF=D1=80=D0=B8=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbapp/mainapp/utils.py | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) 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)