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