diff options
author | nathaniel gentile <nate@thenateway.io> | 2017-12-15 14:17:15 -0800 |
---|---|---|
committer | Adam Miller <admiller@redhat.com> | 2017-12-15 16:17:15 -0600 |
commit | 441dc369ba0f0080edf3e54235319765517e945a (patch) | |
tree | abdb45d465b5e475a39fe56261f7ed7660b0d775 /lib/ansible/module_utils/urls.py | |
parent | b9bc64c7f911d654950f9dcf6766065cf3199c9c (diff) | |
download | ansible-441dc369ba0f0080edf3e54235319765517e945a.tar.gz |
py3 compatibility: convert bytes to str (#33206)
Fixes #31723
In python3, ansible's fetch_url utility function wraps urllib.request.urlopen.
For HTTP and HTTPS URLs, this function returns a http.client.HTTPResponse object slightly modified.
Calling .read() on an HTTPResponse object returns bytes (note the docstring fix).
Here, to_native is used to convert the bytestrings returned by fetch_url into unicode strings.
This is necessary because:
1. Pre python3.6, json.loads requires passing a string, not a bytestring, as its argument
2. In python3 generally, testing if a string is a substring of a bytestring
using the 'in' operator will raise a TypeError
see:
- https://docs.python.org/3/library/urllib.request.html#urllib.request.urlopen
- https://docs.python.org/3/library/http.client.html#http.client.HTTPResponse.read
- https://docs.python.org/3/library/json.html#json.loads
Diffstat (limited to 'lib/ansible/module_utils/urls.py')
-rw-r--r-- | lib/ansible/module_utils/urls.py | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/ansible/module_utils/urls.py b/lib/ansible/module_utils/urls.py index 8884fe3b93..c6323931c7 100644 --- a/lib/ansible/module_utils/urls.py +++ b/lib/ansible/module_utils/urls.py @@ -941,7 +941,7 @@ def fetch_url(module, url, data=None, headers=None, method=None, :kwarg last_mod_time: Default: None :kwarg int timeout: Default: 10 - :returns: A tuple of (**response**, **info**). Use ``response.body()`` to read the data. + :returns: A tuple of (**response**, **info**). Use ``response.read()`` to read the data. The **info** contains the 'status' and other meta data. When a HttpError (status > 400) occurred then ``info['body']`` contains the error response data:: |