|
|
@ -53,45 +53,27 @@
|
|
|
|
from __future__ import (absolute_import, division, print_function)
|
|
|
|
from __future__ import (absolute_import, division, print_function)
|
|
|
|
__metaclass__ = type
|
|
|
|
__metaclass__ = type
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from ansible.utils.unicode import to_unicode
|
|
|
|
|
|
|
|
from ansible.compat.six import string_types, text_type
|
|
|
|
|
|
|
|
|
|
|
|
__all__ = ['UnsafeProxy', 'AnsibleUnsafe', 'wrap_var']
|
|
|
|
__all__ = ['UnsafeProxy', 'AnsibleUnsafe', 'wrap_var']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AnsibleUnsafe(object):
|
|
|
|
class AnsibleUnsafe(object):
|
|
|
|
__UNSAFE__ = True
|
|
|
|
__UNSAFE__ = True
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
class AnsibleUnsafeText(text_type, AnsibleUnsafe):
|
|
|
|
unicode
|
|
|
|
|
|
|
|
except NameError:
|
|
|
|
|
|
|
|
# Python 3
|
|
|
|
|
|
|
|
class AnsibleUnsafeBytes(bytes, AnsibleUnsafe):
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AnsibleUnsafeStr(str, AnsibleUnsafe):
|
|
|
|
|
|
|
|
pass
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
class UnsafeProxy(object):
|
|
|
|
class UnsafeProxy(object):
|
|
|
|
def __new__(cls, obj, *args, **kwargs):
|
|
|
|
def __new__(cls, obj, *args, **kwargs):
|
|
|
|
if obj.__class__ == str:
|
|
|
|
# In our usage we should only receive unicode strings.
|
|
|
|
return AnsibleUnsafeStr(obj)
|
|
|
|
# This conditional and conversion exists to sanity check the values
|
|
|
|
elif obj.__class__ == bytes:
|
|
|
|
# we're given but we may want to take it out for testing and sanitize
|
|
|
|
return AnsibleUnsafeBytes(obj)
|
|
|
|
# our input instead.
|
|
|
|
else:
|
|
|
|
if isinstance(obj, string_types):
|
|
|
|
return obj
|
|
|
|
obj = to_unicode(obj, errors='strict')
|
|
|
|
else:
|
|
|
|
return AnsibleUnsafeText(obj)
|
|
|
|
# Python 2
|
|
|
|
|
|
|
|
class AnsibleUnsafeStr(str, AnsibleUnsafe):
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AnsibleUnsafeUnicode(unicode, AnsibleUnsafe):
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UnsafeProxy(object):
|
|
|
|
|
|
|
|
def __new__(cls, obj, *args, **kwargs):
|
|
|
|
|
|
|
|
if obj.__class__ == unicode:
|
|
|
|
|
|
|
|
return AnsibleUnsafeUnicode(obj)
|
|
|
|
|
|
|
|
elif obj.__class__ == str:
|
|
|
|
|
|
|
|
return AnsibleUnsafeStr(obj)
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
return obj
|
|
|
|
return obj
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|