utils: fix logging details of http errors (#30069)

This commit is contained in:
Frédéric Péters 2019-01-24 14:13:12 +01:00
parent bfb8fdff41
commit 4ba28f811b
3 changed files with 38 additions and 2 deletions

View File

@ -244,7 +244,7 @@ class Request(RequestSession):
if request.body:
extra['request_payload'] = repr(request.body)
log_function = self.logger.info
if response:
if response is not None:
message = message + ' (=> %s)' % response.status_code
extra['response_status'] = response.status_code
if self.logger.level == 10: # DEBUG

View File

@ -74,7 +74,7 @@ def test_log_on_connector_availability_change(db, connector):
with HTTMock(down_mock): # set connector as down
connector.availability()
assert len(ResourceLog.objects.all()) == 2
assert ResourceLog.objects.all()[0].message == 'GET http://example.net/'
assert ResourceLog.objects.all()[0].message == 'GET http://example.net/ (=> 404)'
assert ResourceLog.objects.all()[1].level == 'error'
assert ResourceLog.objects.all()[1].message == u'connector "éléphant" (Feed) is now down'

View File

@ -37,6 +37,11 @@ def httpbin_mock(url, request):
return response(200, {"message": "Are you really josh ?"},
headers={"Content-Type": "application/json"}, request=request)
@urlmatch(netloc=r'(.*\.)?httperror\.org$')
def http400_mock(url, request):
return response(400, {"foo": "bar"},
headers={"Content-Type": "application/json"}, request=request)
def test_log_level(caplog, log_level):
url = 'https://httpbin.org/post'
@ -69,6 +74,37 @@ def test_log_level(caplog, log_level):
assert not hasattr(record, 'response_content')
assert not hasattr(record, 'response_headers')
def test_log_error(caplog, log_level):
url = 'https://httperror.org/plop'
logger = logging.getLogger('requests')
logger.setLevel(log_level)
with HTTMock(http400_mock):
requests = Request(logger=logger)
response = requests.post(url, json={'name':'josh'})
records = [record for record in caplog.records if record.name == 'requests']
records_length = len(records)
if logger.level > 40:
assert records_length == 0
else:
assert records_length == 1
record = records[0]
assert record.request_url == url
assert record.response_status == response.status_code
if logger.level == 10: # DEBUG
assert record.request_payload == '\'{"name": "josh"}\''
assert record.response_content == repr(response.content)
assert record.response_headers
else:
assert not hasattr(record, 'request_payload')
assert not hasattr(record, 'response_content')
assert not hasattr(record, 'response_headers')
@pytest.fixture(params=['xml', 'whatever', 'jpeg', 'pdf'])
def endpoint_response(request):
response_request = mock.Mock(