Fixing HTTPError case of fetch_url for Python 3 compatibility. (#45628)

* Fixing HTTPError case of fetch_url for Python 3 compatibility.

* Adding unit test.

* PEP8.

* Changelog.
This commit is contained in:
Felix Fontein 2018-09-19 17:53:16 +02:00 committed by Matt Martz
parent d34cf93f1a
commit bc69aeca7f
3 changed files with 7 additions and 3 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- "fetch_url did not always return lower-case header names in case of HTTP errors (https://github.com/ansible/ansible/pull/45628)."

View file

@ -1303,7 +1303,8 @@ def fetch_url(module, url, data=None, headers=None, method=None,
# Try to add exception info to the output but don't fail if we can't
try:
info.update(dict(**e.info()))
# Lowercase keys, to conform to py2 behavior, so that py3 and py2 are predictable
info.update(dict((k.lower(), v) for k, v in e.info().items()))
except:
pass

View file

@ -178,13 +178,14 @@ def test_fetch_url_httperror(open_url_mock, fake_ansible_module):
'http://ansible.com/',
500,
'Internal Server Error',
{},
{'Content-Type': 'application/json'},
StringIO('TESTS')
)
r, info = fetch_url(fake_ansible_module, 'http://ansible.com/')
assert info == {'msg': 'HTTP Error 500: Internal Server Error', 'body': 'TESTS', 'status': 500, 'url': 'http://ansible.com/'}
assert info == {'msg': 'HTTP Error 500: Internal Server Error', 'body': 'TESTS',
'status': 500, 'url': 'http://ansible.com/', 'content-type': 'application/json'}
def test_fetch_url_urlerror(open_url_mock, fake_ansible_module):