2014-10-15 13:20:46 -06:00
|
|
|
from rest_framework import serializers
|
|
|
|
|
2018-12-02 07:44:00 -07:00
|
|
|
from network.base.models import Observation, Station, DemodData, Antenna, Transmitter
|
2016-04-25 08:54:38 -06:00
|
|
|
|
|
|
|
|
|
|
|
class DemodDataSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = DemodData
|
|
|
|
fields = ('payload_demod', )
|
2014-10-15 13:20:46 -06:00
|
|
|
|
|
|
|
|
2017-09-11 04:33:49 -06:00
|
|
|
class ObservationSerializer(serializers.ModelSerializer):
|
2016-04-25 08:54:38 -06:00
|
|
|
transmitter = serializers.SerializerMethodField()
|
2016-05-06 03:00:33 -06:00
|
|
|
norad_cat_id = serializers.SerializerMethodField()
|
2017-03-02 16:12:49 -07:00
|
|
|
station_name = serializers.SerializerMethodField()
|
|
|
|
station_lat = serializers.SerializerMethodField()
|
|
|
|
station_lng = serializers.SerializerMethodField()
|
2018-07-31 09:33:04 -06:00
|
|
|
station_alt = serializers.SerializerMethodField()
|
2016-04-25 08:54:38 -06:00
|
|
|
demoddata = DemodDataSerializer(many=True)
|
|
|
|
|
2014-10-15 13:20:46 -06:00
|
|
|
class Meta:
|
2017-09-11 04:33:49 -06:00
|
|
|
model = Observation
|
2018-02-02 09:29:40 -07:00
|
|
|
fields = ('id', 'start', 'end', 'ground_station', 'transmitter', 'norad_cat_id',
|
|
|
|
'payload', 'waterfall', 'demoddata', 'station_name', 'station_lat',
|
2018-05-18 19:31:13 -06:00
|
|
|
'station_lng', 'station_alt', 'vetted_status', 'archived', 'archive_url',
|
|
|
|
'client_version', 'client_metadata', 'vetted_user', 'vetted_datetime',
|
|
|
|
'rise_azimuth', 'set_azimuth', 'max_altitude', 'tle')
|
2016-05-06 03:00:33 -06:00
|
|
|
read_only_fields = ['id', 'start', 'end', 'observation', 'ground_station',
|
2018-05-18 19:31:13 -06:00
|
|
|
'transmitter', 'norad_cat_id', 'archived', 'archive_url',
|
|
|
|
'station_name', 'station_lat', 'station_lng', 'vetted_user',
|
|
|
|
'station_alt', 'vetted_status', 'vetted_datetime', 'rise_azimuth',
|
|
|
|
'set_azimuth', 'max_altitude', 'tle']
|
2015-02-14 12:58:11 -07:00
|
|
|
|
2016-04-25 08:54:38 -06:00
|
|
|
def update(self, instance, validated_data):
|
2017-08-12 09:25:53 -06:00
|
|
|
validated_data.pop('demoddata')
|
2017-09-11 04:33:49 -06:00
|
|
|
super(ObservationSerializer, self).update(instance, validated_data)
|
2017-08-12 09:25:53 -06:00
|
|
|
return instance
|
2016-04-25 08:54:38 -06:00
|
|
|
|
|
|
|
def get_transmitter(self, obj):
|
|
|
|
try:
|
2017-09-11 04:33:49 -06:00
|
|
|
return obj.transmitter.uuid
|
2016-04-25 08:54:38 -06:00
|
|
|
except AttributeError:
|
|
|
|
return ''
|
|
|
|
|
2016-05-06 03:00:33 -06:00
|
|
|
def get_norad_cat_id(self, obj):
|
2017-09-11 04:33:49 -06:00
|
|
|
return obj.satellite.norad_cat_id
|
2016-05-06 03:00:33 -06:00
|
|
|
|
2017-03-02 16:12:49 -07:00
|
|
|
def get_station_name(self, obj):
|
2017-10-09 11:37:29 -06:00
|
|
|
try:
|
|
|
|
return obj.ground_station.name
|
2017-11-17 07:31:21 -07:00
|
|
|
except AttributeError:
|
2017-10-09 11:37:29 -06:00
|
|
|
return None
|
2017-03-02 16:12:49 -07:00
|
|
|
|
|
|
|
def get_station_lat(self, obj):
|
2017-10-09 11:37:29 -06:00
|
|
|
try:
|
|
|
|
return obj.ground_station.lat
|
2017-11-17 07:31:21 -07:00
|
|
|
except AttributeError:
|
2017-10-09 11:37:29 -06:00
|
|
|
return None
|
2017-03-02 16:12:49 -07:00
|
|
|
|
|
|
|
def get_station_lng(self, obj):
|
2017-10-09 11:37:29 -06:00
|
|
|
try:
|
|
|
|
return obj.ground_station.lng
|
2017-11-17 07:31:21 -07:00
|
|
|
except AttributeError:
|
2017-10-09 11:37:29 -06:00
|
|
|
return None
|
2017-03-02 16:12:49 -07:00
|
|
|
|
2018-07-31 09:33:04 -06:00
|
|
|
def get_station_alt(self, obj):
|
|
|
|
try:
|
|
|
|
return obj.ground_station.alt
|
|
|
|
except AttributeError:
|
|
|
|
return None
|
|
|
|
|
2015-02-14 12:58:11 -07:00
|
|
|
|
2018-08-24 08:14:24 -06:00
|
|
|
class AntennaSerializer(serializers.ModelSerializer):
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Antenna
|
|
|
|
fields = ('frequency', 'frequency_max', 'band', 'antenna_type')
|
|
|
|
|
|
|
|
|
2018-04-01 05:52:20 -06:00
|
|
|
class StationSerializer(serializers.ModelSerializer):
|
2018-08-24 08:14:24 -06:00
|
|
|
antenna = AntennaSerializer(many=True)
|
2018-04-01 05:52:20 -06:00
|
|
|
altitude = serializers.SerializerMethodField()
|
|
|
|
min_horizon = serializers.SerializerMethodField()
|
|
|
|
observations = serializers.SerializerMethodField()
|
|
|
|
status = serializers.SerializerMethodField()
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Station
|
|
|
|
fields = ('id', 'name', 'altitude', 'min_horizon', 'lat', 'lng',
|
|
|
|
'qthlocator', 'location', 'antenna', 'created', 'last_seen',
|
2019-02-07 11:06:39 -07:00
|
|
|
'status', 'observations', 'description', 'client_version',
|
|
|
|
'target_utilization')
|
2018-04-01 05:52:20 -06:00
|
|
|
|
|
|
|
def get_altitude(self, obj):
|
|
|
|
return obj.alt
|
|
|
|
|
|
|
|
def get_min_horizon(self, obj):
|
|
|
|
return obj.horizon
|
|
|
|
|
|
|
|
def get_antenna(self, obj):
|
|
|
|
def antenna_name(antenna):
|
|
|
|
return (antenna.band + " " + antenna.get_antenna_type_display())
|
|
|
|
try:
|
|
|
|
return [antenna_name(ant) for ant in obj.antenna.all()]
|
|
|
|
except AttributeError:
|
|
|
|
return None
|
|
|
|
|
|
|
|
def get_observations(self, obj):
|
|
|
|
try:
|
|
|
|
return obj.observations_count
|
|
|
|
except AttributeError:
|
|
|
|
return None
|
|
|
|
|
|
|
|
def get_status(self, obj):
|
|
|
|
try:
|
|
|
|
return obj.get_status_display()
|
|
|
|
except AttributeError:
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
2015-02-14 12:58:11 -07:00
|
|
|
class JobSerializer(serializers.ModelSerializer):
|
|
|
|
frequency = serializers.SerializerMethodField()
|
2019-01-29 22:32:49 -07:00
|
|
|
frequency_drift = serializers.SerializerMethodField()
|
2015-02-14 12:58:11 -07:00
|
|
|
tle0 = serializers.SerializerMethodField()
|
|
|
|
tle1 = serializers.SerializerMethodField()
|
|
|
|
tle2 = serializers.SerializerMethodField()
|
2016-04-05 11:57:46 -06:00
|
|
|
mode = serializers.SerializerMethodField()
|
2017-03-27 12:32:12 -06:00
|
|
|
transmitter = serializers.SerializerMethodField()
|
2017-12-21 14:25:24 -07:00
|
|
|
baud = serializers.SerializerMethodField()
|
2015-02-14 12:58:11 -07:00
|
|
|
|
|
|
|
class Meta:
|
2017-09-11 04:33:49 -06:00
|
|
|
model = Observation
|
2015-02-14 12:58:11 -07:00
|
|
|
fields = ('id', 'start', 'end', 'ground_station', 'tle0', 'tle1', 'tle2',
|
2019-01-29 22:32:49 -07:00
|
|
|
'frequency', 'frequency_drift', 'mode', 'transmitter', 'baud')
|
2015-02-14 12:58:11 -07:00
|
|
|
|
|
|
|
def get_frequency(self, obj):
|
2017-09-11 04:33:49 -06:00
|
|
|
return obj.transmitter.downlink_low
|
2015-02-14 12:58:11 -07:00
|
|
|
|
2019-01-29 22:32:49 -07:00
|
|
|
def get_frequency_drift(self, obj):
|
|
|
|
return obj.transmitter.downlink_drift
|
|
|
|
|
2017-03-27 12:32:12 -06:00
|
|
|
def get_transmitter(self, obj):
|
2017-09-11 04:33:49 -06:00
|
|
|
return obj.transmitter.uuid
|
2017-03-27 12:32:12 -06:00
|
|
|
|
2015-02-14 12:58:11 -07:00
|
|
|
def get_tle0(self, obj):
|
2017-09-11 04:33:49 -06:00
|
|
|
return obj.tle.tle0
|
2015-02-14 12:58:11 -07:00
|
|
|
|
|
|
|
def get_tle1(self, obj):
|
2017-09-11 04:33:49 -06:00
|
|
|
return obj.tle.tle1
|
2015-02-14 12:58:11 -07:00
|
|
|
|
|
|
|
def get_tle2(self, obj):
|
2017-09-11 04:33:49 -06:00
|
|
|
return obj.tle.tle2
|
2015-09-09 02:12:36 -06:00
|
|
|
|
2016-04-05 11:57:46 -06:00
|
|
|
def get_mode(self, obj):
|
2016-04-12 03:56:09 -06:00
|
|
|
try:
|
2017-09-11 04:33:49 -06:00
|
|
|
return obj.transmitter.mode.name
|
2017-11-17 07:31:21 -07:00
|
|
|
except AttributeError:
|
2016-04-12 03:56:09 -06:00
|
|
|
return ''
|
2016-04-05 11:57:46 -06:00
|
|
|
|
2017-12-21 14:25:24 -07:00
|
|
|
def get_baud(self, obj):
|
|
|
|
return obj.transmitter.baud
|
|
|
|
|
2015-09-09 02:12:36 -06:00
|
|
|
|
2018-12-02 07:44:00 -07:00
|
|
|
class TransmitterSerializer(serializers.ModelSerializer):
|
|
|
|
mode = serializers.SerializerMethodField()
|
|
|
|
norad_cat_id = serializers.SerializerMethodField()
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Transmitter
|
2019-01-29 22:32:49 -07:00
|
|
|
fields = ('uuid', 'description', 'alive', 'type', 'uplink_low', 'uplink_high',
|
|
|
|
'uplink_drift', 'downlink_low', 'downlink_high', 'downlink_drift',
|
|
|
|
'mode', 'invert', 'baud', 'satellite', 'norad_cat_id',
|
2018-12-16 11:31:21 -07:00
|
|
|
'success_rate', 'bad_rate', 'unvetted_rate', 'good_count',
|
|
|
|
'bad_count', 'unvetted_count', 'data_count')
|
2018-12-02 07:44:00 -07:00
|
|
|
|
|
|
|
def get_mode(self, obj):
|
|
|
|
if obj.mode is None:
|
|
|
|
return "No Mode"
|
|
|
|
return obj.mode.name
|
|
|
|
|
|
|
|
def get_norad_cat_id(self, obj):
|
|
|
|
return obj.satellite.norad_cat_id
|