Ejemplo n.º 1
0
    def test_user_on_clock(self):
        """Tests the user_on_clock method."""
        log = MissionClockEvent(user=self.user1,
                                team_on_clock=False,
                                team_on_timeout=False)
        log.save()
        log = MissionClockEvent(user=self.user2,
                                team_on_clock=True,
                                team_on_timeout=False)
        log.save()

        self.assertFalse(MissionClockEvent.user_on_clock(self.user1))
        self.assertTrue(MissionClockEvent.user_on_clock(self.user2))
Ejemplo n.º 2
0
    def test_user_on_clock(self):
        """Tests the user_on_clock method."""
        log = MissionClockEvent(user=self.user1,
                                team_on_clock=False,
                                team_on_timeout=False)
        log.save()
        log = MissionClockEvent(user=self.user2,
                                team_on_clock=True,
                                team_on_timeout=False)
        log.save()

        self.assertFalse(MissionClockEvent.user_on_clock(self.user1))
        self.assertTrue(MissionClockEvent.user_on_clock(self.user2))
Ejemplo n.º 3
0
def user_json(user):
    """Generate JSON-style dict for user."""
    return {
        'name': user.username,
        'id': user.pk,
        'on_clock': MissionClockEvent.user_on_clock(user),
        'on_timeout': MissionClockEvent.user_on_timeout(user),
        'in_air': TakeoffOrLandingEvent.user_in_air(user),
        'active': UasTelemetry.user_active(user),
    }
Ejemplo n.º 4
0
def user_json(user):
    """Generate JSON-style dict for user."""
    return {
        'name': user.username,
        'id': user.pk,
        'on_clock': MissionClockEvent.user_on_clock(user),
        'on_timeout': MissionClockEvent.user_on_timeout(user),
        'in_air': TakeoffOrLandingEvent.user_in_air(user),
        'active': UasTelemetry.user_active(user),
    }
Ejemplo n.º 5
0
    def put(self, request, pk):
        """PUT allows updating status."""
        try:
            user = User.objects.get(pk=int(pk))
        except User.DoesNotExist:
            return HttpResponseBadRequest('Unknown team %s' % pk)
        try:
            data = json.loads(request.body)
        except ValueError:
            return HttpResponseBadRequest('Invalid JSON: %s' % request.body)

        # Potential events to update.
        takeoff_event = None
        clock_event = None
        # Update whether UAS is in air.
        if 'in_air' in data:
            in_air = data['in_air']
            if not isinstance(in_air, bool):
                return HttpResponseBadRequest('in_air must be boolean')

            currently_in_air = TakeoffOrLandingEvent.user_in_air(user)
            # New event only necessary if changing status
            if currently_in_air != in_air:
                takeoff_event = TakeoffOrLandingEvent(user=user,
                                                      uas_in_air=in_air)
        # Update whether UAS in on clock or timeout.
        if 'on_clock' in data or 'on_timeout' in data:
            currently_on_clock = MissionClockEvent.user_on_clock(user)

            currently_on_timeout = MissionClockEvent.user_on_timeout(user)
            on_clock = data.get('on_clock', currently_on_clock)
            on_timeout = data.get('on_timeout', currently_on_timeout)
            if (not isinstance(on_clock, bool) or
                    not isinstance(on_timeout, bool)):
                return HttpResponseBadRequest(
                    'on_clock and on_timeout must be boolean.')
            if on_clock and on_timeout:
                return HttpResponseBadRequest(
                    'Cannot be on mission clock and on timeout.')
            # New event only necessary if changing status
            if (on_clock != currently_on_clock or
                    on_timeout != currently_on_timeout):
                clock_event = MissionClockEvent(user=user,
                                                team_on_clock=on_clock,
                                                team_on_timeout=on_timeout)
        # Request was valid. Save updates.
        if takeoff_event:
            takeoff_event.save()
        if clock_event:
            clock_event.save()

        return HttpResponse(
            json.dumps(user_json(user)),
            content_type="application/json")
Ejemplo n.º 6
0
    def put(self, request, pk):
        """PUT allows updating status."""
        try:
            user = User.objects.get(pk=int(pk))
        except User.DoesNotExist:
            return HttpResponseBadRequest('Unknown team %s' % pk)
        try:
            data = json.loads(request.body)
        except ValueError:
            return HttpResponseBadRequest('Invalid JSON: %s' % request.body)

        # Potential events to update.
        takeoff_event = None
        clock_event = None
        # Update whether UAS is in air.
        if 'in_air' in data:
            in_air = data['in_air']
            if not isinstance(in_air, bool):
                return HttpResponseBadRequest('in_air must be boolean')

            currently_in_air = TakeoffOrLandingEvent.user_in_air(user)
            # New event only necessary if changing status
            if currently_in_air != in_air:
                takeoff_event = TakeoffOrLandingEvent(user=user,
                                                      uas_in_air=in_air)
        # Update whether UAS in on clock or timeout.
        if 'on_clock' in data or 'on_timeout' in data:
            currently_on_clock = MissionClockEvent.user_on_clock(user)

            currently_on_timeout = MissionClockEvent.user_on_timeout(user)
            on_clock = data.get('on_clock', currently_on_clock)
            on_timeout = data.get('on_timeout', currently_on_timeout)
            if (not isinstance(on_clock, bool)
                    or not isinstance(on_timeout, bool)):
                return HttpResponseBadRequest(
                    'on_clock and on_timeout must be boolean.')
            if on_clock and on_timeout:
                return HttpResponseBadRequest(
                    'Cannot be on mission clock and on timeout.')
            # New event only necessary if changing status
            if (on_clock != currently_on_clock
                    or on_timeout != currently_on_timeout):
                clock_event = MissionClockEvent(user=user,
                                                team_on_clock=on_clock,
                                                team_on_timeout=on_timeout)
        # Request was valid. Save updates.
        if takeoff_event:
            takeoff_event.save()
        if clock_event:
            clock_event.save()

        return HttpResponse(json.dumps(user_json(user)),
                            content_type="application/json")
Ejemplo n.º 7
0
 def get(self, request):
     """Gets all of the targets ready for review."""
     targets = []
     for user in User.objects.all():
         # Targets still editable aren't ready for review.
         if (MissionClockEvent.user_on_clock(user) or
                 MissionClockEvent.user_on_timeout(user)):
             continue
         # Get targets which have thumbnail.
         targets.extend([t
                         for t in Target.objects.filter(user=user).all()
                         if t.thumbnail])
     # Sort targets by last edit time, convert to json.
     targets = [t.json(is_superuser=request.user.is_superuser)
                for t in sorted(targets,
                                key=lambda t: t.last_modified_time)]
     return JsonResponse(targets, safe=False)
Ejemplo n.º 8
0
 def get(self, request):
     """Gets all of the targets ready for review."""
     targets = []
     for user in User.objects.all():
         # Targets still editable aren't ready for review.
         if (MissionClockEvent.user_on_clock(user)
                 or MissionClockEvent.user_on_timeout(user)):
             continue
         # Get targets which have thumbnail.
         targets.extend([
             t for t in Target.objects.filter(user=user).all()
             if t.thumbnail
         ])
     # Sort targets by last edit time, convert to json.
     targets = [
         t.json(is_superuser=request.user.is_superuser)
         for t in sorted(targets, key=lambda t: t.last_modified_time)
     ]
     return JsonResponse(targets, safe=False)