예제 #1
0
파일: viewsets.py 프로젝트: LCOGT/valhalla
    def cadence(self, request):
        expanded_requests = []
        for req in request.data.get('requests', []):
            if isinstance(req, dict) and req.get('cadence'):
                cadence_request_serializer = CadenceRequestSerializer(data=req)
                if cadence_request_serializer.is_valid():
                    expanded_requests.extend(
                        expand_cadence_request(
                            cadence_request_serializer.validated_data))
                else:
                    return Response(cadence_request_serializer.errors,
                                    status=400)
            else:
                expanded_requests.append(req)

        # if we couldn't find any valid cadence requests, return that as an error
        if not expanded_requests:
            return Response(
                {
                    'errors':
                    'No visible requests within cadence window parameters'
                },
                status=400)

        # now replace the originally sent requests with the cadence requests and send it back
        ret_data = request.data.copy()
        ret_data['requests'] = expanded_requests

        if (len(ret_data['requests']) > 1):
            ret_data['operator'] = 'MANY'
        ur_serializer = UserRequestSerializer(data=ret_data,
                                              context={'request': request})
        if not ur_serializer.is_valid():
            return Response(ur_serializer.errors, status=400)
        return Response(ret_data)
예제 #2
0
    def test_correct_number_of_requests_overlapping_windows(self):
        r_dict = self.req.as_dict
        r_dict['cadence'] = {
            'start': datetime.datetime(2016, 9, 1, tzinfo=timezone.utc),
            'end': datetime.datetime(2016, 9, 2, tzinfo=timezone.utc),
            'period': 1.0,
            'jitter': 2.0
        }

        requests = expand_cadence_request(r_dict)
        self.assertEqual(len(requests), 5)
예제 #3
0
    def test_correct_number_of_requests_large_cadence(self):
        r_dict = self.req.as_dict
        r_dict['cadence'] = {
            'start': datetime.datetime(2016, 9, 1, tzinfo=timezone.utc),
            'end': datetime.datetime(2016, 10, 1, tzinfo=timezone.utc),
            'period': 24.0,
            'jitter': 12.0
        }

        requests = expand_cadence_request(r_dict)
        self.assertEqual(len(requests), 26)