Add Tle and LatestTle models
Signed-off-by: Alfredos-Panagiotis Damkalis <fredy@fredy.gr>spacecruft
parent
fda7defc8b
commit
ce1c189f02
|
@ -9,7 +9,7 @@ from django.shortcuts import redirect
|
|||
from django.urls import reverse
|
||||
|
||||
from db.base.models import Artifact, DemodData, ExportedFrameset, Mode, \
|
||||
Operator, Satellite, Telemetry, Transmitter, TransmitterEntry, \
|
||||
Operator, Satellite, Telemetry, Tle, Transmitter, TransmitterEntry, \
|
||||
TransmitterSuggestion
|
||||
from db.base.tasks import check_celery, decode_all_data
|
||||
|
||||
|
@ -219,6 +219,17 @@ class TransmitterAdmin(admin.ModelAdmin):
|
|||
readonly_fields = ('uuid', 'satellite')
|
||||
|
||||
|
||||
@admin.register(Tle)
|
||||
class TleAdmin(admin.ModelAdmin):
|
||||
"""Define TLE view in django admin UI"""
|
||||
list_display = ('satellite_name', 'tle0', 'tle1', 'updated', 'tle_source')
|
||||
list_filter = ('tle_source', 'satellite__name')
|
||||
|
||||
def satellite_name(self, obj): # pylint: disable=no-self-use
|
||||
"""Return the satellite name"""
|
||||
return obj.satellite.name
|
||||
|
||||
|
||||
@admin.register(Telemetry)
|
||||
class TelemetryAdmin(admin.ModelAdmin):
|
||||
"""Defines Telemetry view in django admin UI"""
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
# Generated by Django 2.2.14 on 2020-08-03 02:04
|
||||
|
||||
import django.core.validators
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('base', '0021_auto_20200808_1725'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Tle',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('tle0', models.CharField(blank=True, max_length=69, validators=[django.core.validators.MinLengthValidator(1), django.core.validators.MaxLengthValidator(69)])),
|
||||
('tle1', models.CharField(blank=True, max_length=69, validators=[django.core.validators.MinLengthValidator(69), django.core.validators.MaxLengthValidator(69)])),
|
||||
('tle2', models.CharField(blank=True, max_length=69, validators=[django.core.validators.MinLengthValidator(69), django.core.validators.MaxLengthValidator(69)])),
|
||||
('tle_source', models.CharField(blank=True, max_length=300)),
|
||||
('updated', models.DateTimeField(auto_now=True)),
|
||||
('satellite', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='tles', to='base.Satellite')),
|
||||
],
|
||||
options={
|
||||
'ordering': ['-updated'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='LatestTle',
|
||||
fields=[
|
||||
],
|
||||
options={
|
||||
'proxy': True,
|
||||
'indexes': [],
|
||||
'constraints': [],
|
||||
},
|
||||
bases=('base.tle',),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='tle',
|
||||
index=models.Index(fields=['-updated'], name='base_tle_updated_8936f7_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='tle',
|
||||
index=models.Index(fields=['tle1', 'tle2', 'tle_source', 'satellite'], name='base_tle_tle1_30ea48_idx'),
|
||||
),
|
||||
migrations.AddConstraint(
|
||||
model_name='tle',
|
||||
constraint=models.UniqueConstraint(fields=('tle1', 'tle2', 'tle_source', 'satellite'), name='unique_entry_from_source_for_satellite'),
|
||||
),
|
||||
]
|
|
@ -9,8 +9,8 @@ from django.conf import settings
|
|||
from django.contrib.auth.models import User
|
||||
from django.core.cache import cache
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core.validators import MaxValueValidator, MinValueValidator, \
|
||||
URLValidator
|
||||
from django.core.validators import MaxLengthValidator, MaxValueValidator, \
|
||||
MinLengthValidator, MinValueValidator, URLValidator
|
||||
from django.db import models
|
||||
from django.db.models import OuterRef, Subquery
|
||||
from django.db.models.signals import post_save, pre_save
|
||||
|
@ -496,6 +496,73 @@ class Transmitter(TransmitterEntry):
|
|||
proxy = True
|
||||
|
||||
|
||||
class Tle(models.Model):
|
||||
"""Model for TLEs."""
|
||||
tle0 = models.CharField(
|
||||
max_length=69, blank=True, validators=[MinLengthValidator(1),
|
||||
MaxLengthValidator(69)]
|
||||
)
|
||||
tle1 = models.CharField(
|
||||
max_length=69, blank=True, validators=[MinLengthValidator(69),
|
||||
MaxLengthValidator(69)]
|
||||
)
|
||||
tle2 = models.CharField(
|
||||
max_length=69, blank=True, validators=[MinLengthValidator(69),
|
||||
MaxLengthValidator(69)]
|
||||
)
|
||||
tle_source = models.CharField(max_length=300, blank=True)
|
||||
updated = models.DateTimeField(auto_now=True, blank=True)
|
||||
satellite = models.ForeignKey(
|
||||
Satellite, related_name='tles', on_delete=models.CASCADE, null=True, blank=True
|
||||
)
|
||||
|
||||
class Meta:
|
||||
ordering = ['-updated']
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=['tle1', 'tle2', 'tle_source', 'satellite'],
|
||||
name='unique_entry_from_source_for_satellite'
|
||||
),
|
||||
]
|
||||
indexes = [
|
||||
models.Index(fields=['-updated']),
|
||||
models.Index(fields=['tle1', 'tle2', 'tle_source', 'satellite'])
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return '{:d} - {:s}'.format(self.id, self.tle0)
|
||||
|
||||
@property
|
||||
def str_array(self):
|
||||
"""Return TLE in string array format"""
|
||||
# tle fields are unicode, pyephem and others expect python strings
|
||||
return [str(self.tle0), str(self.tle1), str(self.tle2)]
|
||||
|
||||
|
||||
class LatestTleManager(models.Manager): # pylint: disable=R0903
|
||||
"""Django Manager for latest Tle objects"""
|
||||
def get_queryset(self):
|
||||
"""Returns query of latest Tle
|
||||
|
||||
:returns: the latest Tle for each Satellite
|
||||
"""
|
||||
subquery = Tle.objects.filter(satellite=OuterRef('satellite')).order_by('-updated')
|
||||
return super(LatestTleManager,
|
||||
self).get_queryset().filter(updated=Subquery(subquery.values('updated')[:1]))
|
||||
|
||||
|
||||
class LatestTle(Tle):
|
||||
"""LatestTle is the latest entry of a Satellite Tle objects
|
||||
"""
|
||||
objects = LatestTleManager()
|
||||
|
||||
class Meta:
|
||||
proxy = True
|
||||
|
||||
def __str__(self):
|
||||
return '{:d} - {:s}'.format(self.id, self.tle0)
|
||||
|
||||
|
||||
class Telemetry(models.Model):
|
||||
"""Model for satellite telemetry decoders."""
|
||||
satellite = models.ForeignKey(
|
||||
|
|
Loading…
Reference in New Issue