add uplink_mode field for transciever and transponder transmitter type
Signed-off-by: Flawinne Julien flawinne.julien at protonmail dot com add uplink_mode field for transciever and transponder Signed-off-by: Flawinne Julien flawinne.julien@protonmail.com adapt unit test for transmitter model Update migration for taking account of the invert value update uplink_mode migration condition Not request TLE with NORAD ID above 99000 Signed-off-by: Alfredos-Panagiotis Damkalis <fredy@fredy.gr> rename mode transmitter field to downlink_mode adapt unit test for transmitter model update uplink_mode migration condition add uplink_mode field for transciever and transponder transmitter type Signed-off-by: Flawinne Julien flawinne.julien at protonmail dot com keep mode id add forgotten field mode id add missing , fix yapf errormerge-requests/435/head
parent
34f2641bef
commit
062152aeec
|
@ -6,12 +6,15 @@ import django_filters
|
|||
from django_filters import rest_framework as filters
|
||||
from django_filters.rest_framework import FilterSet
|
||||
|
||||
from db.base.models import DemodData, Satellite, Transmitter
|
||||
from db.base.models import DemodData, Mode, Satellite, Transmitter
|
||||
|
||||
|
||||
class TransmitterViewFilter(FilterSet):
|
||||
"""SatNOGS DB Transmitter API View Filter"""
|
||||
alive = filters.BooleanFilter(field_name='status', label='Alive', method='filter_status')
|
||||
mode = django_filters.ModelChoiceFilter(
|
||||
field_name='downlink_mode', lookup_expr='exact', queryset=Mode.objects.all()
|
||||
)
|
||||
|
||||
# see https://django-filter.readthedocs.io/en/master/ref/filters.html for
|
||||
# W0613
|
||||
|
@ -25,7 +28,10 @@ class TransmitterViewFilter(FilterSet):
|
|||
|
||||
class Meta:
|
||||
model = Transmitter
|
||||
fields = ['uuid', 'mode', 'type', 'satellite__norad_cat_id', 'alive', 'status', 'service']
|
||||
fields = [
|
||||
'uuid', 'mode', 'uplink_mode', 'type', 'satellite__norad_cat_id', 'alive', 'status',
|
||||
'service'
|
||||
]
|
||||
|
||||
|
||||
class SatelliteViewFilter(FilterSet):
|
||||
|
|
|
@ -28,8 +28,9 @@ class SatelliteSerializer(serializers.ModelSerializer):
|
|||
class TransmitterSerializer(serializers.ModelSerializer):
|
||||
"""SatNOGS DB Transmitter API Serializer"""
|
||||
norad_cat_id = serializers.SerializerMethodField()
|
||||
mode_id = serializers.SerializerMethodField()
|
||||
mode = serializers.SerializerMethodField()
|
||||
mode_id = serializers.SerializerMethodField()
|
||||
uplink_mode = serializers.SerializerMethodField()
|
||||
alive = serializers.SerializerMethodField()
|
||||
updated = serializers.DateTimeField(source='created')
|
||||
|
||||
|
@ -37,8 +38,8 @@ class TransmitterSerializer(serializers.ModelSerializer):
|
|||
model = Transmitter
|
||||
fields = (
|
||||
'uuid', 'description', 'alive', 'type', 'uplink_low', 'uplink_high', 'uplink_drift',
|
||||
'downlink_low', 'downlink_high', 'downlink_drift', 'mode_id', 'mode', 'invert', 'baud',
|
||||
'norad_cat_id', 'status', 'updated', 'citation', 'service'
|
||||
'downlink_low', 'downlink_high', 'downlink_drift', 'mode', 'mode_id', 'uplink_mode',
|
||||
'invert', 'baud', 'norad_cat_id', 'status', 'updated', 'citation', 'service'
|
||||
)
|
||||
|
||||
# Keeping alive field for compatibility issues
|
||||
|
@ -47,16 +48,20 @@ class TransmitterSerializer(serializers.ModelSerializer):
|
|||
return obj.status == TRANSMITTER_STATUS[0]
|
||||
|
||||
def get_mode_id(self, obj):
|
||||
"""Returns mode ID"""
|
||||
"""Returns downlink mode id"""
|
||||
return obj.downlink_mode.id
|
||||
|
||||
def get_mode(self, obj):
|
||||
"""Returns downlink mode name"""
|
||||
try:
|
||||
return obj.mode.id
|
||||
return obj.downlink_mode.name
|
||||
except Exception: # pylint: disable=W0703
|
||||
return None
|
||||
|
||||
def get_mode(self, obj):
|
||||
"""Returns mode name"""
|
||||
def get_uplink_mode(self, obj):
|
||||
"""Returns uplink mode name"""
|
||||
try:
|
||||
return obj.mode.name
|
||||
return obj.uplink_mode.name
|
||||
except Exception: # pylint: disable=W0703
|
||||
return None
|
||||
|
||||
|
|
|
@ -90,9 +90,9 @@ class SatelliteAdmin(admin.ModelAdmin):
|
|||
class TransmitterEntryAdmin(admin.ModelAdmin):
|
||||
"""Defines TransmitterEntry view in django admin UI"""
|
||||
list_display = (
|
||||
'uuid', 'description', 'satellite', 'service', 'type', 'mode', 'baud', 'downlink_low',
|
||||
'downlink_high', 'downlink_drift', 'uplink_low', 'uplink_high', 'uplink_drift', 'reviewed',
|
||||
'approved', 'status', 'created', 'citation', 'user'
|
||||
'uuid', 'description', 'satellite', 'service', 'type', 'downlink_mode', 'uplink_mode',
|
||||
'baud', 'downlink_low', 'downlink_high', 'downlink_drift', 'uplink_low', 'uplink_high',
|
||||
'uplink_drift', 'reviewed', 'approved', 'status', 'created', 'citation', 'user'
|
||||
)
|
||||
search_fields = ('satellite__id', 'uuid', 'satellite__name', 'satellite__norad_cat_id')
|
||||
list_filter = (
|
||||
|
@ -101,7 +101,8 @@ class TransmitterEntryAdmin(admin.ModelAdmin):
|
|||
'type',
|
||||
'status',
|
||||
'service',
|
||||
'mode',
|
||||
'downlink_mode',
|
||||
'uplink_mode',
|
||||
'baud',
|
||||
)
|
||||
readonly_fields = ('uuid', 'satellite')
|
||||
|
@ -111,21 +112,22 @@ class TransmitterEntryAdmin(admin.ModelAdmin):
|
|||
class TransmitterSuggestionAdmin(admin.ModelAdmin):
|
||||
"""Defines TransmitterSuggestion view in django admin UI"""
|
||||
list_display = (
|
||||
'uuid', 'description', 'satellite', 'service', 'type', 'mode', 'baud', 'downlink_low',
|
||||
'downlink_high', 'downlink_drift', 'uplink_low', 'uplink_high', 'uplink_drift', 'status',
|
||||
'created', 'citation', 'user'
|
||||
'uuid', 'description', 'satellite', 'service', 'type', 'downlink_mode', 'uplink_mode',
|
||||
'baud', 'downlink_low', 'downlink_high', 'downlink_drift', 'uplink_low', 'uplink_high',
|
||||
'uplink_drift', 'status', 'created', 'citation', 'user'
|
||||
)
|
||||
search_fields = ('satellite__id', 'uuid', 'satellite__name', 'satellite__norad_cat_id')
|
||||
list_filter = (
|
||||
'type',
|
||||
'mode',
|
||||
'downlink_mode',
|
||||
'uplink_mode',
|
||||
'baud',
|
||||
'service',
|
||||
)
|
||||
readonly_fields = (
|
||||
'uuid', 'description', 'status', 'type', 'uplink_low', 'uplink_high', 'uplink_drift',
|
||||
'downlink_low', 'downlink_high', 'downlink_drift', 'mode', 'invert', 'baud', 'satellite',
|
||||
'reviewed', 'approved', 'created', 'citation', 'user'
|
||||
'downlink_low', 'downlink_high', 'downlink_drift', 'downlink_mode', 'uplink_mode',
|
||||
'invert', 'baud', 'satellite', 'reviewed', 'approved', 'created', 'citation', 'user'
|
||||
)
|
||||
actions = ['approve_suggestion', 'reject_suggestion']
|
||||
|
||||
|
@ -193,16 +195,17 @@ class TransmitterSuggestionAdmin(admin.ModelAdmin):
|
|||
class TransmitterAdmin(admin.ModelAdmin):
|
||||
"""Defines Transmitter view in django admin UI"""
|
||||
list_display = (
|
||||
'uuid', 'description', 'satellite', 'service', 'type', 'mode', 'baud', 'downlink_low',
|
||||
'downlink_high', 'downlink_drift', 'uplink_low', 'uplink_high', 'uplink_drift', 'status',
|
||||
'created', 'citation', 'user'
|
||||
'uuid', 'description', 'satellite', 'service', 'type', 'downlink_mode', 'uplink_mode',
|
||||
'baud', 'downlink_low', 'downlink_high', 'downlink_drift', 'uplink_low', 'uplink_high',
|
||||
'uplink_drift', 'status', 'created', 'citation', 'user'
|
||||
)
|
||||
search_fields = ('satellite__id', 'uuid', 'satellite__name', 'satellite__norad_cat_id')
|
||||
list_filter = (
|
||||
'type',
|
||||
'status',
|
||||
'service',
|
||||
'mode',
|
||||
'downlink_mode',
|
||||
'uplink_mode',
|
||||
'baud',
|
||||
)
|
||||
readonly_fields = ('uuid', 'satellite')
|
||||
|
|
|
@ -30,6 +30,6 @@ class TransmitterEntryForm(forms.ModelForm):
|
|||
model = TransmitterEntry
|
||||
fields = [
|
||||
'description', 'status', 'type', 'uplink_low', 'uplink_high', 'downlink_low',
|
||||
'downlink_high', 'uplink_drift', 'downlink_drift', 'mode', 'invert', 'baud',
|
||||
'satellite', 'citation', 'service'
|
||||
'downlink_high', 'uplink_drift', 'downlink_drift', 'downlink_mode', 'uplink_mode',
|
||||
'invert', 'baud', 'satellite', 'citation', 'service'
|
||||
]
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 2.2.6 on 2019-11-08 18:40
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('base', '0011_transmitterentry_service'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='transmitterentry',
|
||||
old_name='mode',
|
||||
new_name='downlink_mode',
|
||||
),
|
||||
]
|
|
@ -0,0 +1,39 @@
|
|||
# Generated by Django 2.2.6 on 2019-11-08 18:42
|
||||
|
||||
from django.db import migrations, models
|
||||
from django.db.models import F
|
||||
import django.db.models.deletion
|
||||
|
||||
def copy_field(apps, schema_editor):
|
||||
models = apps.get_model('base', 'TransmitterEntry')
|
||||
modes = apps.get_model('base', 'Mode')
|
||||
for transmitter in models.objects.all().iterator():
|
||||
if transmitter.type != "Transmitter":
|
||||
transmitter.uplink_mode = transmitter.downlink_mode
|
||||
if transmitter.invert == True:
|
||||
if transmitter.downlink_mode.name == "USB":
|
||||
transmitter.uplink_mode = modes.objects.get(name="LSB")
|
||||
elif transmitter.downlink_mode.name == "LSB":
|
||||
transmitter.uplink_mode = modes.objects.get(name="USB")
|
||||
|
||||
transmitter.save()
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('base', '0012_auto_20191108_1840'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='transmitterentry',
|
||||
name='uplink_mode',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transmitter_uplink_entries', to='base.Mode'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='transmitterentry',
|
||||
name='downlink_mode',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transmitter_downlink_entries', to='base.Mode'),
|
||||
),
|
||||
migrations.RunPython(copy_field, reverse_code=migrations.RunPython.noop),
|
||||
]
|
|
@ -167,8 +167,19 @@ class TransmitterEntry(models.Model):
|
|||
downlink_low = models.BigIntegerField(blank=True, null=True)
|
||||
downlink_high = models.BigIntegerField(blank=True, null=True)
|
||||
downlink_drift = models.IntegerField(blank=True, null=True)
|
||||
mode = models.ForeignKey(
|
||||
Mode, blank=True, null=True, on_delete=models.SET_NULL, related_name='transmitter_entries'
|
||||
downlink_mode = models.ForeignKey(
|
||||
Mode,
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=models.SET_NULL,
|
||||
related_name='transmitter_downlink_entries'
|
||||
)
|
||||
uplink_mode = models.ForeignKey(
|
||||
Mode,
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=models.SET_NULL,
|
||||
related_name='transmitter_uplink_entries'
|
||||
)
|
||||
invert = models.BooleanField(default=False)
|
||||
baud = models.FloatField(validators=[MinValueValidator(0)], blank=True, null=True)
|
||||
|
|
|
@ -79,7 +79,8 @@ class TransmitterFactory(factory.django.DjangoModelFactory):
|
|||
uplink_high = fuzzy.FuzzyInteger(200000000, 500000000, step=10000)
|
||||
downlink_low = fuzzy.FuzzyInteger(200000000, 500000000, step=10000)
|
||||
downlink_high = fuzzy.FuzzyInteger(200000000, 500000000, step=10000)
|
||||
mode = factory.SubFactory(ModeFactory)
|
||||
downlink_mode = factory.SubFactory(ModeFactory)
|
||||
uplink_mode = factory.SubFactory(ModeFactory)
|
||||
invert = fuzzy.FuzzyChoice(choices=[True, False])
|
||||
baud = fuzzy.FuzzyInteger(4000, 22000, step=1000)
|
||||
satellite = factory.SubFactory(SatelliteFactory)
|
||||
|
@ -102,7 +103,8 @@ class TransmitterSuggestionFactory(factory.django.DjangoModelFactory):
|
|||
uplink_high = fuzzy.FuzzyInteger(200000000, 500000000, step=10000)
|
||||
downlink_low = fuzzy.FuzzyInteger(200000000, 500000000, step=10000)
|
||||
downlink_high = fuzzy.FuzzyInteger(200000000, 500000000, step=10000)
|
||||
mode = factory.SubFactory(ModeFactory)
|
||||
downlink_mode = factory.SubFactory(ModeFactory)
|
||||
uplink_mode = factory.SubFactory(ModeFactory)
|
||||
invert = fuzzy.FuzzyChoice(choices=[True, False])
|
||||
baud = fuzzy.FuzzyInteger(4000, 22000, step=1000)
|
||||
satellite = factory.SubFactory(SatelliteFactory)
|
||||
|
|
|
@ -85,7 +85,9 @@ def calculate_mode_stats(transmitters):
|
|||
mode_data = []
|
||||
|
||||
for mode in modes:
|
||||
filtered_transmitters = transmitters.filter(mode=mode).count()
|
||||
filtered_transmitters = transmitters.filter(
|
||||
downlink_mode=mode
|
||||
).count() + transmitters.filter(uplink_mode=mode).count()
|
||||
mode_label.append(mode.name)
|
||||
mode_data.append(filtered_transmitters)
|
||||
|
||||
|
|
|
@ -27,22 +27,26 @@ function transmitter_suggestion_type(selection) {
|
|||
case 'Transmitter':
|
||||
$('.input-group').show();
|
||||
$('input').prop( 'disabled', false );
|
||||
$('select').prop( 'disabled', false );
|
||||
$('input[name=\'uplink_low\']').prop( 'disabled', true );
|
||||
$('input[name=\'uplink_high\']').prop( 'disabled', true );
|
||||
$('input[name=\'uplink_drift\']').prop( 'disabled', true );
|
||||
$('input[name=\'downlink_high\']').prop( 'disabled', true );
|
||||
$('input[name=\'invert\']').prop( 'disabled', true );
|
||||
$('select[name=\'uplink_mode\']').prop( 'disabled', true );
|
||||
$('.input-group').has('input[name=\'uplink_low\']').hide();
|
||||
$('.input-group').has('input[name=\'uplink_high\']').hide();
|
||||
$('.input-group').has('input[name=\'uplink_drift\']').hide();
|
||||
$('.input-group').has('input[name=\'downlink_high\']').hide();
|
||||
$('.input-group').has('input[name=\'invert\']').hide();
|
||||
$('.input-group').has('select[name=\'uplink_mode\']').hide();
|
||||
|
||||
$('.input-group-addon:contains(\'Downlink Low\')').html('Downlink');
|
||||
break;
|
||||
case 'Transceiver':
|
||||
$('.input-group').show();
|
||||
$('input').prop( 'disabled', false );
|
||||
$('select').prop( 'disabled', false );
|
||||
$('input[name=\'uplink_high\']').prop( 'disabled', true );
|
||||
$('input[name=\'downlink_high\']').prop( 'disabled', true );
|
||||
$('input[name=\'invert\']').prop( 'disabled', true );
|
||||
|
@ -56,6 +60,7 @@ function transmitter_suggestion_type(selection) {
|
|||
case 'Transponder':
|
||||
$('.input-group').show();
|
||||
$('input').prop( 'disabled', false );
|
||||
$('select').prop( 'disabled', false );
|
||||
$('input[name=\'downlink_low\']').prev().html('Downlink Low');
|
||||
$('input[name=\'uplink_low\']').prev().html('Uplink Low');
|
||||
break;
|
||||
|
|
|
@ -114,8 +114,11 @@
|
|||
{% if transmitter.service %}
|
||||
{% include "includes/field.html" with name="Service" value=transmitter.service %}
|
||||
{% endif %}
|
||||
{% if transmitter.mode %}
|
||||
{% include "includes/field.html" with name="Mode" value=transmitter.mode %}
|
||||
{% if transmitter.downlink_mode %}
|
||||
{% include "includes/field.html" with name="Downlink Mode" value=transmitter.downlink_mode %}
|
||||
{% endif %}
|
||||
{% if transmitter.uplink_mode %}
|
||||
{% include "includes/field.html" with name="Uplink Mode" value=transmitter.uplink_mode %}
|
||||
{% endif %}
|
||||
{% if transmitter.baud %}
|
||||
{% include "includes/field.html" with name="Baud" value=transmitter.baud %}
|
||||
|
@ -243,11 +246,22 @@
|
|||
</select>
|
||||
</div>
|
||||
<div class="input-group transmitter-element-suggest">
|
||||
<div class="input-group-addon">Mode</div>
|
||||
<select class="form-control" name="mode">
|
||||
<div class="input-group-addon">Downlink mode</div>
|
||||
<select class="form-control" name="downlink_mode">
|
||||
<option value="" selected></option>
|
||||
{% for mode in modes %}
|
||||
<option value="{{ mode.id }}" {% ifequal transmitter.mode mode %}selected{% endifequal %}>
|
||||
<option value="{{ mode.id }}" {% ifequal transmitter.downlink_mode mode %}selected{% endifequal %}>
|
||||
{{ mode }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="input-group transmitter-element-suggest">
|
||||
<div class="input-group-addon">Uplink mode</div>
|
||||
<select class="form-control" name="uplink_mode">
|
||||
<option value="" selected></option>
|
||||
{% for mode in modes %}
|
||||
<option value="{{ mode.id }}" {% ifequal transmitter.uplink_mode mode %}selected{% endifequal %}>
|
||||
{{ mode }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
|
@ -358,8 +372,11 @@
|
|||
{% if transmitter_suggestion.service %}
|
||||
{% include "includes/field.html" with name="Service" value=transmitter_suggestion.service original=transmitter_suggestion.transmitter.service %}
|
||||
{% endif %}
|
||||
{% if transmitter_suggestion.mode %}
|
||||
{% include "includes/field.html" with name="Mode" value=transmitter_suggestion.mode original=transmitter_suggestion.transmitter.mode %}
|
||||
{% if transmitter_suggestion.downlink_mode %}
|
||||
{% include "includes/field.html" with name="Downlink Mode" value=transmitter_suggestion.downlink_mode original=transmitter_suggestion.transmitter.downlink_mode %}
|
||||
{% endif %}
|
||||
{% if transmitter_suggestion.uplink_mode %}
|
||||
{% include "includes/field.html" with name="Uplink Mode" value=transmitter_suggestion.uplink_mode original=transmitter_suggestion.transmitter.uplink_mode %}
|
||||
{% endif %}
|
||||
{% if transmitter_suggestion.invert %}
|
||||
{% include "includes/field.html" with name="Invert" value=transmitter_suggestion.invert original=transmitter_suggestion.transmitter.invert %}
|
||||
|
@ -584,8 +601,19 @@
|
|||
</select>
|
||||
</div>
|
||||
<div class="input-group transmitter-element-suggest">
|
||||
<div class="input-group-addon">Mode</div>
|
||||
<select class="form-control" name="mode">
|
||||
<div class="input-group-addon">Downlink Mode</div>
|
||||
<select class="form-control" name="downlink_mode">
|
||||
<option value="" selected></option>
|
||||
{% for mode in modes %}
|
||||
<option value="{{ mode.id }}">
|
||||
{{ mode }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="input-group transmitter-element-suggest">
|
||||
<div class="input-group-addon">Uplink mode</div>
|
||||
<select class="form-control" name="uplink_mode">
|
||||
<option value="" selected></option>
|
||||
{% for mode in modes %}
|
||||
<option value="{{ mode.id }}">
|
||||
|
|
Loading…
Reference in New Issue