Commit 2d77c643 by James Cammarata

Merge pull request #12723 from mgedmin/py3k

Make ansible.vars.unsafe_proxy Python 3 friendly
parents 42618748 e511d6d4
...@@ -52,18 +52,37 @@ ...@@ -52,18 +52,37 @@
__all__ = ['UnsafeProxy', 'AnsibleUnsafe', 'wrap_var'] __all__ = ['UnsafeProxy', 'AnsibleUnsafe', 'wrap_var']
import __builtin__
class AnsibleUnsafe(object): class AnsibleUnsafe(object):
__UNSAFE__ = True __UNSAFE__ = True
class AnsibleUnsafeStr(str, AnsibleUnsafe): try:
unicode
except NameError:
# Python 3
class AnsibleUnsafeBytes(bytes, AnsibleUnsafe):
pass pass
class AnsibleUnsafeUnicode(unicode, AnsibleUnsafe): class AnsibleUnsafeStr(str, AnsibleUnsafe):
pass pass
class UnsafeProxy(object): 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): def __new__(cls, obj, *args, **kwargs):
if obj.__class__ == unicode: if obj.__class__ == unicode:
return AnsibleUnsafeUnicode(obj) return AnsibleUnsafeUnicode(obj)
...@@ -72,18 +91,21 @@ class UnsafeProxy(object): ...@@ -72,18 +91,21 @@ class UnsafeProxy(object):
else: else:
return obj return obj
def _wrap_dict(v): def _wrap_dict(v):
for k in v.keys(): for k in v.keys():
if v[k] is not None: if v[k] is not None:
v[k] = wrap_var(v[k]) v[k] = wrap_var(v[k])
return v return v
def _wrap_list(v): def _wrap_list(v):
for idx, item in enumerate(v): for idx, item in enumerate(v):
if item is not None: if item is not None:
v[idx] = wrap_var(item) v[idx] = wrap_var(item)
return v return v
def wrap_var(v): def wrap_var(v):
if isinstance(v, dict): if isinstance(v, dict):
v = _wrap_dict(v) v = _wrap_dict(v)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment