diff options
author | James Cammarata <jimi@sngx.net> | 2015-11-04 11:26:06 -0500 |
---|---|---|
committer | James Cammarata <jimi@sngx.net> | 2015-11-04 11:26:06 -0500 |
commit | 89d713aa520fe17131efe78218f20ad09fe99688 (patch) | |
tree | 08105f897a84dff59371a36c5f0d4e558c75dd1f /lib/ansible/vars/unsafe_proxy.py | |
parent | 61ace1d3c486b294a1badad7b5f60fc40b763755 (diff) | |
download | ansible-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.py | 19 |
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(): |