restore initial json parsing attempt to loader

fixes issues with extra vars json strings not being parsed correctly by the yaml parser
This commit is contained in:
Brian Coca 2016-03-03 13:25:47 -05:00
parent 7160b40ab1
commit ea5e089056

View file

@ -72,24 +72,29 @@ class DataLoader():
Creates a python datastructure from the given data, which can be either Creates a python datastructure from the given data, which can be either
a JSON or YAML string. a JSON or YAML string.
''' '''
new_data = None
# YAML parser will take JSON as it is a subset.
if isinstance(data, AnsibleUnicode):
# The PyYAML's libyaml bindings use PyUnicode_CheckExact so
# they are unable to cope with our subclass.
# Unwrap and re-wrap the unicode so we can keep track of line
# numbers
in_data = text_type(data)
else:
in_data = data
try: try:
new_data = self._safe_load(in_data, file_name=file_name) # we first try to load this data as JSON
except YAMLError as yaml_exc: new_data = json.loads(data)
self._handle_error(yaml_exc, file_name, show_content) except:
# must not be JSON, let the rest try
if isinstance(data, AnsibleUnicode):
# The PyYAML's libyaml bindings use PyUnicode_CheckExact so
# they are unable to cope with our subclass.
# Unwrap and re-wrap the unicode so we can keep track of line
# numbers
in_data = text_type(data)
else:
in_data = data
try:
new_data = self._safe_load(in_data, file_name=file_name)
except YAMLError as yaml_exc:
self._handle_error(yaml_exc, file_name, show_content)
if isinstance(data, AnsibleUnicode):
new_data = AnsibleUnicode(new_data)
new_data.ansible_pos = data.ansible_pos
if isinstance(data, AnsibleUnicode):
new_data = AnsibleUnicode(new_data)
new_data.ansible_pos = data.ansible_pos
return new_data return new_data
def load_from_file(self, file_name): def load_from_file(self, file_name):