1
0
Fork 0

Add distribution logic on TLE model and API endpoint

Signed-off-by: Alfredos-Panagiotis Damkalis <fredy@fredy.gr>
spacecruft
Alfredos-Panagiotis Damkalis 2020-08-06 11:29:01 +03:00
parent e1b859887f
commit f18140e153
3 changed files with 45 additions and 3 deletions

View File

@ -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,

View File

@ -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')]},
),
]

View File

@ -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