summaryrefslogtreecommitdiff
path: root/lib/ansible/vars/unsafe_proxy.py
diff options
context:
space:
mode:
authorJames Cammarata <jimi@sngx.net>2015-11-04 11:26:06 -0500
committerJames Cammarata <jimi@sngx.net>2015-11-04 11:26:06 -0500
commit89d713aa520fe17131efe78218f20ad09fe99688 (patch)
tree08105f897a84dff59371a36c5f0d4e558c75dd1f /lib/ansible/vars/unsafe_proxy.py
parent61ace1d3c486b294a1badad7b5f60fc40b763755 (diff)
downloadansible-perf_improvements.tar.gz
Fixing up performanceperf_improvements
Diffstat (limited to 'lib/ansible/vars/unsafe_proxy.py')
-rw-r--r--lib/ansible/vars/unsafe_proxy.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/ansible/vars/unsafe_proxy.py b/lib/ansible/vars/unsafe_proxy.py
index 47b56db723..ac5cce24af 100644
--- a/lib/ansible/vars/unsafe_proxy.py
+++ b/lib/ansible/vars/unsafe_proxy.py
@@ -53,11 +53,12 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
+import json
+
from ansible.utils.unicode import to_unicode
from ansible.compat.six import string_types, text_type
-__all__ = ['UnsafeProxy', 'AnsibleUnsafe', 'wrap_var']
-
+__all__ = ['UnsafeProxy', 'AnsibleUnsafe', 'AnsibleJSONUnsafeEncoder', 'AnsibleJSONUnsafeDecoder', 'wrap_var']
class AnsibleUnsafe(object):
__UNSAFE__ = True
@@ -76,6 +77,20 @@ class UnsafeProxy(object):
return AnsibleUnsafeText(obj)
return obj
+class AnsibleJSONUnsafeEncoder(json.JSONEncoder):
+ def encode(self, obj):
+ if isinstance(obj, AnsibleUnsafe):
+ return super(AnsibleJSONUnsafeEncoder, self).encode(dict(__ansible_unsafe=True, value=unicode(obj)))
+ else:
+ return super(AnsibleJSONUnsafeEncoder, self).encode(obj)
+
+class AnsibleJSONUnsafeDecoder(json.JSONDecoder):
+ def decode(self, obj):
+ value = super(AnsibleJSONUnsafeDecoder, self).decode(obj)
+ if isinstance(value, dict) and '__ansible_unsafe' in value:
+ return UnsafeProxy(value.get('value', ''))
+ else:
+ return value
def _wrap_dict(v):
for k in v.keys():