by moving to en-bloc unicode conversion to act on scripts stdout
Both python-json and simplejson always return unicode strings when using
their loads() method on unicode strings. This is true at least since
2009. This makes checking each substring unnecessary, because we do not
need to recursively check the strings contained in the inventory dict
later one-by-one
This commit makes parsing of large dynamic inventory at least 2 seconds
faster.
cf: https://github.com/towolf/ansible-large-inventory-testcase
raiseAnsibleError("Inventory script (%s) had an execution error: %s"%(filename,stderr))
raiseAnsibleError("Inventory script (%s) had an execution error: %s"%(filename,stderr))
self.data=stdout
# make sure script output is unicode so that json loader will output
# unicode strings itself
try:
self.data=to_unicode(stdout,errors="strict")
exceptExceptionase:
raiseAnsibleError("inventory data from {0} contained characters that cannot be interpreted as UTF-8: {1}".format(to_str(self.filename),to_str(e)))
# see comment about _meta below
# see comment about _meta below
self.host_vars_from_top=None
self.host_vars_from_top=None
self._parse(stderr)
self._parse(stderr)
@ -78,8 +84,6 @@ class InventoryScript:
sys.stderr.write(err+"\n")
sys.stderr.write(err+"\n")
raiseAnsibleError("failed to parse executable inventory script results from {0}: data needs to be formatted as a json dict".format(to_str(self.filename)))
raiseAnsibleError("failed to parse executable inventory script results from {0}: data needs to be formatted as a json dict".format(to_str(self.filename)))