Skip to content

Commit

Permalink
Fix compatibility to fetch_url change in ansible-core devel (#339) (#340
Browse files Browse the repository at this point in the history
)

* Fix compatibility to fetch_url change in ansible-core devel.

* Adjust tests.

(cherry picked from commit 5de50b9)

Co-authored-by: Felix Fontein <felix@fontein.de>
  • Loading branch information
patchback[bot] and felixfontein authored Nov 17, 2021
1 parent 0cb10be commit ff4966a
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 5 deletions.
2 changes: 2 additions & 0 deletions changelogs/fragments/fetch_url-devel.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
minor_changes:
- "acme_* modules - fix usage of ``fetch_url`` with changes in latest ansible-core ``devel`` branch (https://github.com/ansible-collections/community.crypto/pull/339)."
16 changes: 13 additions & 3 deletions plugins/module_utils/acme/acme.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@
import locale

from ansible.module_utils.basic import missing_required_lib
from ansible.module_utils.urls import fetch_url
from ansible.module_utils.common.text.converters import to_bytes
from ansible.module_utils.urls import fetch_url
from ansible.module_utils.six import PY3

from ansible_collections.community.crypto.plugins.module_utils.acme.backend_openssl_cli import (
OpenSSLCLIBackend,
Expand Down Expand Up @@ -228,9 +229,14 @@ def send_signed_request(self, url, payload, key_data=None, jws_header=None, pars
resp, info = fetch_url(self.module, url, data=data, headers=headers, method='POST')
_assert_fetch_url_success(self.module, resp, info)
result = {}

try:
# In Python 2, reading from a closed response yields a TypeError.
# In Python 3, read() simply returns ''
if PY3 and resp.closed:
raise TypeError
content = resp.read()
except AttributeError:
except (AttributeError, TypeError):
content = info.pop('body', None)

if content or not parse_json_result:
Expand Down Expand Up @@ -284,8 +290,12 @@ def get_request(self, uri, parse_json_result=True, headers=None, get_only=False,
_assert_fetch_url_success(self.module, resp, info)

try:
# In Python 2, reading from a closed response yields a TypeError.
# In Python 3, read() simply returns ''
if PY3 and resp.closed:
raise TypeError
content = resp.read()
except AttributeError:
except (AttributeError, TypeError):
content = info.pop('body', None)

# Process result
Expand Down
8 changes: 6 additions & 2 deletions plugins/module_utils/acme/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
from __future__ import absolute_import, division, print_function
__metaclass__ = type

from ansible.module_utils.six import binary_type
from ansible.module_utils.common.text.converters import to_text
from ansible.module_utils.six import binary_type, PY3


def format_error_problem(problem, subproblem_prefix=''):
Expand Down Expand Up @@ -52,8 +52,12 @@ def __init__(self, module, msg=None, info=None, response=None, content=None, con
# Try to get hold of content, if response is given and content is not provided
if content is None and content_json is None and response is not None:
try:
# In Python 2, reading from a closed response yields a TypeError.
# In Python 3, read() simply returns ''
if PY3 and response.closed:
raise TypeError
content = response.read()
except AttributeError:
except (AttributeError, TypeError):
content = info.pop('body', None)

# Make sure that content_json is None or a dictionary
Expand Down
2 changes: 2 additions & 0 deletions tests/unit/plugins/module_utils/acme/test_errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,12 +115,14 @@ def test_format_error_problem(problem, subproblem_prefix, result):
def create_regular_response(response_text):
response = MagicMock()
response.read = MagicMock(return_value=response_text.encode('utf-8'))
response.closed = False
return response


def create_error_response():
response = MagicMock()
response.read = MagicMock(side_effect=AttributeError('read'))
response.closed = True
return response


Expand Down

0 comments on commit ff4966a

Please sign in to comment.