Привязка LyngSat сразу в функция импорта

This commit is contained in:
2025-11-18 10:06:31 +03:00
parent 06a39278d2
commit 55759ec705

View File

@@ -69,6 +69,45 @@ def find_matching_transponder(satellite, frequency, polarization):
# Возвращаем самый свежий транспондер # Возвращаем самый свежий транспондер
return transponders.first() return transponders.first()
def find_matching_lyngsat(satellite, frequency, polarization, tolerance_mhz=0.1):
"""
Находит подходящий источник LyngSat для заданных параметров.
Алгоритм:
1. Фильтрует источники LyngSat по спутнику и поляризации
2. Проверяет, совпадает ли частота с заданной точностью (по умолчанию ±0.1 МГц)
3. Возвращает самый свежий источник (по last_update)
Args:
satellite: объект Satellite
frequency: частота в МГц
polarization: объект Polarization
tolerance_mhz: допуск по частоте в МГц (по умолчанию 0.1)
Returns:
LyngSat или None: найденный источник LyngSat или None
"""
# Импортируем здесь, чтобы избежать циклических импортов
from lyngsatapp.models import LyngSat
if not satellite or not polarization or frequency == -1.0:
return None
# Фильтруем источники LyngSat по спутнику и поляризации
lyngsat_sources = LyngSat.objects.filter(
id_satellite=satellite,
polarization=polarization,
frequency__isnull=False
).filter(
# Проверяем, входит ли частота в допуск
frequency__gte=frequency - tolerance_mhz,
frequency__lte=frequency + tolerance_mhz
).order_by('-last_update') # Сортируем по дате обновления (самые свежие первыми)
# Возвращаем самый свежий источник
return lyngsat_sources.first()
# ============================================================================ # ============================================================================
# Константы # Константы
# ============================================================================ # ============================================================================
@@ -433,11 +472,15 @@ def _create_objitem_from_row(row, sat, source, user_to_use, consts):
# Находим подходящий транспондер # Находим подходящий транспондер
transponder = find_matching_transponder(sat, freq, polarization_obj) transponder = find_matching_transponder(sat, freq, polarization_obj)
# Создаем новый ObjItem и связываем с Source и Transponder # Находим подходящий источник LyngSat (точность 0.1 МГц)
lyngsat_source = find_matching_lyngsat(sat, freq, polarization_obj, tolerance_mhz=0.1)
# Создаем новый ObjItem и связываем с Source, Transponder и LyngSat
obj_item = ObjItem.objects.create( obj_item = ObjItem.objects.create(
name=source_name, name=source_name,
source=source, source=source,
transponder=transponder, transponder=transponder,
lyngsat_source=lyngsat_source,
created_by=user_to_use created_by=user_to_use
) )
@@ -767,11 +810,15 @@ def _create_objitem_from_csv_row(row, source, user_to_use):
# Находим подходящий транспондер # Находим подходящий транспондер
transponder = find_matching_transponder(sat_obj, row["freq"], pol_obj) transponder = find_matching_transponder(sat_obj, row["freq"], pol_obj)
# Создаем новый ObjItem и связываем с Source и Transponder # Находим подходящий источник LyngSat (точность 0.1 МГц)
lyngsat_source = find_matching_lyngsat(sat_obj, row["freq"], pol_obj, tolerance_mhz=0.1)
# Создаем новый ObjItem и связываем с Source, Transponder и LyngSat
obj_item = ObjItem.objects.create( obj_item = ObjItem.objects.create(
name=row["obj"], name=row["obj"],
source=source, source=source,
transponder=transponder, transponder=transponder,
lyngsat_source=lyngsat_source,
created_by=user_to_use created_by=user_to_use
) )