import collections as _collections
import jmespath
+
try:
import simplejson as _json
except ImportError: # Python2.7 calls it json.
def __init__(self, *args, **kwargs):
"""Put arguments to OrderedDict, sort, pass to super, cache values."""
self_unsorted = _collections.OrderedDict(*args, **kwargs)
- items_sorted = sorted(self_unsorted.items(), key=repr)
+ items_sorted = sorted(list(self_unsorted.items()), key=repr)
sup = super(_Hsfod, self) # possibly something else than OrderedDict
sup.__init__(items_sorted)
# Repr string is used for sorting, keys are more important than values.
- self.__repr = '{' + repr(self.keys()) + ':' + repr(self.values()) + '}'
+ self.__repr = (
+ "{" + repr(list(self.keys())) + ":" + repr(list(self.values())) + "}"
+ )
self.__hash = hash(self.__repr)
def __repr__(self):
Also, allows to use something different from RequestsLibrary.To_Json
"""
- pretty_json = _json.dumps(obj, separators=(',', ': '), indent=indent)
- return pretty_json + '\n' # to avoid diff "no newline" warning line
+ pretty_json = _json.dumps(obj, separators=(",", ": "), indent=indent)
+ return pretty_json + "\n" # to avoid diff "no newline" warning line
def sort_bits(obj, keys_with_bits=[]):
TODO: Should this docstring include links to support dict and OrderedDict safety?
"""
if isinstance(obj, dict):
- for key, value in obj.iteritems():
+ for key, value in obj.items():
# Unicode is not str and vice versa, isinstance has to check for both.
# Luckily, "in" recognizes equivalent strings in different encodings.
# Type "bytes" is added for Python 3 compatibility.
- if key in keys_with_bits and isinstance(value, (unicode, str, bytes)):
+ if key in keys_with_bits and isinstance(value, (str, bytes)):
obj[key] = " ".join(sorted(value.split(" ")))
else:
sort_bits(value, keys_with_bits)
:return: corrected
"""
if isinstance(obj, dict):
- for key, value in obj.iteritems():
+ for key, value in obj.items():
# Unicode is not str and vice versa, isinstance has to check for both.
# Luckily, "in" recognizes equivalent strings in different encodings.
# Type "bytes" is added for Python 3 compatibility.
- if key in keys_with_volatiles and isinstance(value, (unicode, str, bytes, int, bool)):
+ if key in keys_with_volatiles and isinstance(
+ value, (str, bytes, int, bool)
+ ):
obj[key] = "*"
else:
hide_volatile(value, keys_with_volatiles)
return obj
-def normalize_json_text(text, strict=False, indent=1, keys_with_bits=[], keys_with_volatiles=[], jmes_path=None):
+def normalize_json_text(
+ text,
+ strict=False,
+ indent=1,
+ keys_with_bits=[],
+ keys_with_volatiles=[],
+ jmes_path=None,
+):
"""
Attempt to return sorted indented JSON string.
if strict:
raise err
else:
- return str(err) + '\n' + text
+ return str(err) + "\n" + text
if keys_with_bits:
sort_bits(object_decoded, keys_with_bits)
if keys_with_volatiles: