Python 3: fix AnsibleError formatting

If you convert the error string to bytes and embed it inside another
error string, you get

  Prefix:

  b'Embedded\nerror\nstring'

which is not what we want.

But we also don't want Unicode in error messages causing unexpected
UnicodeEncodeErrors when on Python 2.

So let's convert the error message into the native string type (bytes on
Python 2, unicode on Python 3).
This commit is contained in:
Marius Gedminas 2015-10-15 09:38:14 +03:00
parent 5617f6aad4
commit ca826508d9

View file

@ -19,11 +19,18 @@
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
import os
from ansible.errors.yaml_strings import * from ansible.errors.yaml_strings import *
from ansible.utils.unicode import to_unicode, to_bytes from ansible.utils.unicode import to_unicode, to_bytes
if str is bytes:
# Python 2
to_str = to_bytes
else:
# Python 3
to_str = to_unicode
class AnsibleError(Exception): class AnsibleError(Exception):
''' '''
This is the base class for all errors raised from Ansible code, This is the base class for all errors raised from Ansible code,
@ -49,7 +56,7 @@ class AnsibleError(Exception):
if obj and isinstance(obj, AnsibleBaseYAMLObject): if obj and isinstance(obj, AnsibleBaseYAMLObject):
extended_error = self._get_extended_error() extended_error = self._get_extended_error()
if extended_error: if extended_error:
self.message = 'ERROR! %s\n\n%s' % (message, to_bytes(extended_error)) self.message = 'ERROR! %s\n\n%s' % (message, to_str(extended_error))
else: else:
self.message = 'ERROR! %s' % message self.message = 'ERROR! %s' % message