1
0
Fork 0

Fix last_seen on jobs GET

merge-requests/136/head
Nikos Roussos 2015-06-21 17:44:25 -07:00
parent 3c0c7aa23d
commit cb8ed897c3
4 changed files with 29 additions and 29 deletions

View File

@ -1,5 +1,3 @@
from django.utils.timezone import now
from rest_framework import permissions from rest_framework import permissions
@ -12,18 +10,6 @@ class SafeMethodsOnlyPermission(permissions.BasePermission):
return request.method in permissions.SAFE_METHODS return request.method in permissions.SAFE_METHODS
class StationOwnerCanViewPermission(permissions.BasePermission):
"""Only the owner can view station jobs"""
def has_object_permission(self, request, view, obj):
can_view = False
if request.user.is_authenticated() and request.user == obj.ground_station.owner:
can_view = True
if can_view:
obj.last_seen = now()
obj.save()
return can_view
class StationOwnerCanEditPermission(permissions.BasePermission): class StationOwnerCanEditPermission(permissions.BasePermission):
"""Only the owner can edit station jobs""" """Only the owner can edit station jobs"""
def has_object_permission(self, request, view, obj): def has_object_permission(self, request, view, obj):

View File

@ -1,8 +1,9 @@
from django.utils.timezone import now from django.utils.timezone import now
from django.shortcuts import get_object_or_404
from rest_framework import viewsets, mixins from rest_framework import viewsets, mixins
from network.api.perms import StationOwnerCanViewPermission, StationOwnerCanEditPermission from network.api.perms import StationOwnerCanEditPermission
from network.api import serializers, filters from network.api import serializers, filters
from network.base.models import (Antenna, Data, Observation, Satellite, from network.base.models import (Antenna, Data, Observation, Satellite,
Station, Transponder) Station, Transponder)
@ -46,9 +47,13 @@ class JobView(viewsets.ReadOnlyModelViewSet):
serializer_class = serializers.JobSerializer serializer_class = serializers.JobSerializer
filter_class = filters.DataViewFilter filter_class = filters.DataViewFilter
filter_fields = ('ground_station') filter_fields = ('ground_station')
permission_classes = [
StationOwnerCanViewPermission
]
def get_queryset(self): def get_queryset(self):
return self.queryset.filter(start__gte=now()) queryset = self.queryset.filter(start__gte=now())
gs_id = self.request.QUERY_PARAMS.get('ground_station', None)
if gs_id and self.request.user.is_authenticated():
gs = get_object_or_404(Station, id=gs_id)
if gs.owner == self.request.user:
gs.last_seen = now()
gs.save()
return queryset

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('base', '0001_squashed_0017_auto_20150509_0912'),
]
operations = [
migrations.AlterField(
model_name='station',
name='created',
field=models.DateTimeField(auto_now_add=True),
),
]

View File

@ -5,7 +5,6 @@ from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models from django.db import models
from django.utils.timezone import now from django.utils.timezone import now
from django.conf import settings from django.conf import settings
from django.db.models.signals import post_save
from django.utils.html import format_html from django.utils.html import format_html
from network.users.models import User from network.users.models import User
@ -21,13 +20,6 @@ ANTENNA_TYPES = (
MODE_CHOICES = ['FM', 'AFSK', 'BFSK', 'APRS', 'SSTV', 'CW', 'FMN', 'SSTV', 'GMSK', 'SSB'] MODE_CHOICES = ['FM', 'AFSK', 'BFSK', 'APRS', 'SSTV', 'CW', 'FMN', 'SSTV', 'GMSK', 'SSB']
def station_ping(sender, instance, created, **kwargs):
if not created:
ground_station = Station.objects.get(pk=instance.ground_station.pk)
ground_station.last_seen = now()
ground_station.save()
class Antenna(models.Model): class Antenna(models.Model):
"""Model for antennas tracked with SatNOGS.""" """Model for antennas tracked with SatNOGS."""
frequency = models.FloatField(validators=[MinValueValidator(0)]) frequency = models.FloatField(validators=[MinValueValidator(0)])
@ -155,5 +147,3 @@ class Data(models.Model):
class Meta: class Meta:
ordering = ['-start', '-end'] ordering = ['-start', '-end']
post_save.connect(station_ping, sender=Data)