def _process_response(self, request, response): Logger.debug('Process response') with silk_meta_profiler(): collector = DataCollector() collector.stop_python_profiler() silk_request = collector.request if silk_request: silk_request = self.edit_request_model_function(silk_request, request) silk_response = ResponseModelFactory(response).construct_response_model() silk_response.save() silk_request.end_time = timezone.now() collector.finalise() else: Logger.error( 'No request model was available when processing response. ' 'Did something go wrong in process_request/process_view?' '\n' + str(request) + '\n\n' + str(response) ) # Need to save the data outside the silk_meta_profiler # Otherwise the meta time collected in the context manager # is not taken in account if silk_request: silk_request.save() Logger.debug('Process response done.')
def test_plain(self): mock = Mock() mock._headers = {HTTP_CONTENT_TYPE: 'text/plain'} mock.content = 'sdfsdf' mock.get = mock._headers.get factory = ResponseModelFactory(mock) body, content = factory.body() self.assertFalse(body) self.assertEqual(content, mock.content)
def test_plain(self): mock = Mock() mock.headers = {HTTP_CONTENT_TYPE: 'text/plain'} mock.content = 'sdfsdf' mock.get = mock.headers.get factory = ResponseModelFactory(mock) body, content = factory.body() self.assertFalse(body) self.assertEqual(content, mock.content)
def test_utf_plain(self): mock = Mock() mock._headers = {HTTP_CONTENT_TYPE: 'text/plain; charset=UTF-8'} mock.content = u'语' mock.get = mock._headers.get factory = ResponseModelFactory(mock) body, content = factory.body() self.assertFalse(body) self.assertEqual(content, mock.content)
def test_utf_json_encoded(self): mock = Mock() mock._headers = {HTTP_CONTENT_TYPE: 'application/json; charset=UTF-8'} d = {'x': u'语'} mock.content = json.dumps(d) mock.get = mock._headers.get factory = ResponseModelFactory(mock) body, content = factory.body() self.assertDictEqual(json.loads(body), d) self.assertEqual(content, mock.content)
def test_utf_json_not_encoded(self): mock = Mock() mock._headers = {HTTP_CONTENT_TYPE: 'application/json; charset=UTF-8'} d = {'x': u'语'} mock.content = json.dumps(d) mock.get = mock._headers.get factory = ResponseModelFactory(mock) body, content = factory.body() self.assertDictEqual(json.loads(body), d) self.assertEqual(content, mock.content)
def test_invalid_encoding_json(self): mock = Mock() mock._headers = {HTTP_CONTENT_TYPE: 'application/json; charset=asdas-8'} d = {'x': u'语'} mock.content = json.dumps(d).encode('UTF-8') mock.get = mock._headers.get factory = ResponseModelFactory(mock) body, content = factory.body() self.assertDictEqual(json.loads(body, encoding='UTF-8'), d) self.assertEqual(mock.content.decode('UTF-8'), content)
def test_utf_json_encoded_no_charset(self): """default to UTF-8""" mock = Mock() mock._headers = {HTTP_CONTENT_TYPE: 'application/json'} d = {'x': u'语'} mock.content = json.dumps(d).encode('UTF-8') mock.get = mock._headers.get factory = ResponseModelFactory(mock) body, content = factory.body() self.assertDictEqual(json.loads(body), d) self.assertEqual(content, mock.content.decode('UTF-8'))
def test_bytes_compat(self): """ Test ResponseModelFactory formats json with bytes content """ mock = Mock() mock.headers = {HTTP_CONTENT_TYPE: 'application/json;'} d = {'k': 'v'} mock.content = bytes(json.dumps(d), 'utf-8') mock.get = mock.headers.get factory = ResponseModelFactory(mock) body, content = factory.body() self.assertDictEqual(json.loads(body), d)
def test_invalid_encoding_json(self): mock = Mock() mock._headers = { HTTP_CONTENT_TYPE: 'application/json; charset=asdas-8' } d = {'x': u'语'} mock.content = json.dumps(d).encode('UTF-8') mock.get = mock._headers.get factory = ResponseModelFactory(mock) body, content = factory.body() self.assertDictEqual(json.loads(body, encoding='UTF-8'), d) self.assertEqual(mock.content.decode('UTF-8'), content)
def _process_response(self, response): with silk_meta_profiler(): collector = DataCollector() silk_request = collector.request if silk_request: silk_response = ResponseModelFactory(response).construct_response_model() silk_response.save() silk_request.end_time = timezone.now() collector.finalise() silk_request.save() else: Logger.error('No request model was available when processing response. Did something go wrong in process_request/process_view?')
def test_python2_str_content_compat(self): """ Test ResponseModelFactory formats json for str """ if sys.version_info < (3, 0, 0): mock = Mock() mock._headers = {HTTP_CONTENT_TYPE: 'application/json;'} d = {'k': 'v'} mock.content = str(json.dumps(d)) mock.get = mock._headers.get factory = ResponseModelFactory(mock) body, content = factory.body() self.assertDictEqual(json.loads(body), d)
def test_python2_unicode_content_compat(self): """ Test ResponseModelFactory formats json for unicode """ if sys.version_info < (3, 0, 0): mock = Mock() mock._headers = {HTTP_CONTENT_TYPE: 'application/json;'} d = u'{"k": "v"}' mock.content = d mock.get = mock._headers.get factory = ResponseModelFactory(mock) body, content = factory.body() self.assertDictEqual(json.loads(body), json.loads(d))
def test_python2_bytes_content_compat(self): """ Test that ResponseModelFactory returns correct json string for a bytestring content """ if sys.version_info < (3, 0, 0): mock = Mock() mock._headers = {HTTP_CONTENT_TYPE: 'application/json;'} d = {'k': 'v'} mock.content = bytes(json.dumps(d)) mock.get = mock._headers.get factory = ResponseModelFactory(mock) body, content = factory.body() self.assertDictEqual(json.loads(body), d)
def _process_response(self, response): with silk_meta_profiler(): collector = DataCollector() collector.stop_python_profiler() silk_request = collector.request if silk_request: silk_response = ResponseModelFactory( response).construct_response_model() silk_response.save() silk_request.end_time = timezone.now() collector.finalise() silk_request.save() else: Logger.error( 'No request model was available when processing response. Did something go wrong in process_request/process_view?' )
def _process_response(self, response): with silk_meta_profiler(): collector = DataCollector() collector.stop_python_profiler() silk_request = collector.request if silk_request: try: silk_response = ResponseModelFactory(response).construct_response_model() except IntegrityError: raise #collector.finalise() else: silk_response.save() silk_request.end_time = datetime.datetime.now() collector.finalise() silk_request.save() else: Logger.error('No request model was available when processing response. Did something go wrong in process_request/process_view?')
def _process_response(self, response): Logger.debug('Process response') with silk_meta_profiler(): collector = DataCollector() collector.stop_python_profiler() silk_request = collector.request if silk_request: silk_response = ResponseModelFactory(response).construct_response_model() silk_response.save() else: Logger.error( 'No request model was available when processing response. Did something go wrong in process_request/process_view?') # Need to save the data outside the silk_meta_profiler # Otherwise the meta time collected in the context manager # is not taken in account if silk_request: silk_request.save() Logger.debug('Process response done.')
def test_max_response(self): SilkyConfig().SILKY_MAX_RESPONSE_BODY_SIZE = 10 # 10kb mock_response = Mock() headers = {'CONTENT_TYPE': 'text/plain'} mock_response.get = headers.get mock_response._headers = headers mock_response.content = 'a'.encode('ascii') * 1024 * 100 # 100kb mock_response.status_code = 200 response_model = ResponseModelFactory(mock_response).construct_response_model() self.assertFalse(response_model.raw_body)
def test_no_max_response(self): SilkyConfig().SILKY_MAX_RESPONSE_BODY_SIZE = -1 mock_response = Mock() headers = {'CONTENT_TYPE': 'text/plain'} mock_response.get = headers.get mock_response.headers = headers mock_response.content = b'a' * 1000 # 1000 bytes? mock_response.status_code = 200 response_model = ResponseModelFactory( mock_response).construct_response_model() self.assertTrue(response_model.raw_body)