Make UnsafeProxy work on Python 3

Instead of str and unicode we have to deal with bytes and str.
This commit is contained in:
Marius Gedminas 2015-10-13 09:41:08 +03:00
parent af6a316d9b
commit e511d6d458

View file

@ -56,20 +56,41 @@ __all__ = ['UnsafeProxy', 'AnsibleUnsafe', 'wrap_var']
class AnsibleUnsafe(object):
__UNSAFE__ = True
class AnsibleUnsafeStr(str, AnsibleUnsafe):
pass
try:
unicode
except NameError:
# Python 3
class AnsibleUnsafeBytes(bytes, AnsibleUnsafe):
pass
class AnsibleUnsafeUnicode(unicode, AnsibleUnsafe):
pass
class AnsibleUnsafeStr(str, AnsibleUnsafe):
pass
class UnsafeProxy(object):
def __new__(cls, obj, *args, **kwargs):
if obj.__class__ == str:
return AnsibleUnsafeStr(obj)
elif obj.__class__ == bytes:
return AnsibleUnsafeBytes(obj)
else:
return obj
else:
# 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
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
def _wrap_dict(v):
for k in v.keys():
@ -77,12 +98,14 @@ def _wrap_dict(v):
v[k] = wrap_var(v[k])
return v
def _wrap_list(v):
for idx, item in enumerate(v):
if item is not None:
v[idx] = wrap_var(item)
return v
def wrap_var(v):
if isinstance(v, dict):
v = _wrap_dict(v)