Add distribution logic on TLE model and API endpoint
Signed-off-by: Alfredos-Panagiotis Damkalis <fredy@fredy.gr>spacecruft
parent
e1b859887f
commit
f18140e153
|
@ -49,11 +49,20 @@ class TransmitterView(viewsets.ReadOnlyModelViewSet): # pylint: disable=R0901
|
|||
|
||||
class TleView(viewsets.ReadOnlyModelViewSet): # pylint: disable=R0901
|
||||
"""SatNOGS DB Tle API view class"""
|
||||
renderer_classes = [JSONRenderer]
|
||||
renderer_classes = [JSONRenderer, BrowsableAPIRenderer]
|
||||
queryset = LatestTle.objects.all()
|
||||
serializer_class = serializers.TleSerializer
|
||||
filterset_class = filters.TleViewFilter
|
||||
|
||||
def get_queryset(self):
|
||||
"""
|
||||
This view should return a list of all the purchases
|
||||
for the currently authenticated user.
|
||||
"""
|
||||
if self.request.user.has_perm('base.access_all_tles'):
|
||||
return LatestTle.all_latest_tles.all()
|
||||
return self.queryset
|
||||
|
||||
|
||||
class TelemetryView( # pylint: disable=R0901
|
||||
mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.CreateModelMixin,
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
# Generated by Django 2.2.14 on 2020-08-05 04:07
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('base', '0022_add_tle_model'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='tle',
|
||||
options={'ordering': ['-updated'], 'permissions': [('access_all_tles', 'Access all TLEs')]},
|
||||
),
|
||||
]
|
|
@ -528,6 +528,7 @@ class Tle(models.Model):
|
|||
models.Index(fields=['-updated']),
|
||||
models.Index(fields=['tle1', 'tle2', 'tle_source', 'satellite'])
|
||||
]
|
||||
permissions = [('access_all_tles', 'Access all TLEs')]
|
||||
|
||||
def __str__(self):
|
||||
return '{:d} - {:s}'.format(self.id, self.tle0)
|
||||
|
@ -548,13 +549,28 @@ class LatestTleManager(models.Manager): # pylint: disable=R0903
|
|||
"""
|
||||
subquery = Tle.objects.filter(satellite=OuterRef('satellite')).order_by('-updated')
|
||||
return super(LatestTleManager,
|
||||
self).get_queryset().filter(updated=Subquery(subquery.values('updated')[:1]))
|
||||
self).get_queryset().filter(pk=Subquery(subquery.values('pk')[:1]))
|
||||
|
||||
|
||||
class LatestDistributableTleManager(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(tle_source__in=settings.TLE_SOURCES_REDISTRIBUTABLE
|
||||
).filter(satellite=OuterRef('satellite')
|
||||
).order_by('-updated')
|
||||
return super(LatestDistributableTleManager,
|
||||
self).get_queryset().filter(pk=Subquery(subquery.values('pk')[:1]))
|
||||
|
||||
|
||||
class LatestTle(Tle):
|
||||
"""LatestTle is the latest entry of a Satellite Tle objects
|
||||
"""
|
||||
objects = LatestTleManager()
|
||||
objects = LatestDistributableTleManager()
|
||||
all_latest_tles = LatestTleManager()
|
||||
|
||||
class Meta:
|
||||
proxy = True
|
||||
|
|
Loading…
Reference in New Issue