def return_if_object(module, response, allow_not_found=False):
    # If not found, return nothing.
    if allow_not_found and response.status_code == 404:
        return None

    # If no content, return nothing.
    if response.status_code == 204:
        return None

    try:
        module.raise_for_status(response)
        result = response.json()
    except getattr(json.decoder, 'JSONDecodeError', ValueError):
        module.fail_json(msg="Invalid JSON response with error: %s" %
                         response.text)

    if navigate_hash(result, ['error', 'errors']):
        module.fail_json(msg=navigate_hash(result, ['error', 'errors']))

    return result
Example #2
0
def return_if_object(module, response, allow_not_found=False):
    # If not found, return nothing.
    if allow_not_found and response.status_code == 404:
        return None

    # If no content, return nothing.
    if response.status_code == 204:
        return None

    # SQL only: return on 403 if not exist
    if allow_not_found and response.status_code == 403:
        return None

    try:
        result = response.json()
    except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst:
        module.fail_json(msg="Invalid JSON response with error: %s" % inst)

    if navigate_hash(result, ['error', 'message']):
        module.fail_json(msg=navigate_hash(result, ['error', 'message']))

    return result
def raise_if_errors(response, err_path, module):
    errors = navigate_hash(response, err_path)
    if errors is not None:
        module.fail_json(msg=errors)
 def test_default(self):
     value = {'key': 'value'}
     default = 'not found'
     self.assertEqual(navigate_hash(value, ['key', 'key2'], default),
                      default)
 def test_multilevel(self):
     value = {'key': {'key2': 'value'}}
     self.assertEqual(navigate_hash(value, ['key', 'key2']),
                      value['key']['key2'])
 def test_one_level(self):
     value = {'key': 'value'}
     self.assertEqual(navigate_hash(value, ['key']), value['key'])