Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def assert_dicts_equal(self, dic, upd, ref):
if not is_dict_like(upd):
upd = OrderedDict(upd)
self.assertTrue(all(dic[k] == upd[k] for k in upd.keys()))
self.assertTrue(all(dic[k] == ref[k] for k in ref.keys()
if k not in upd))
def dicts_equal(dic, ref, ordered=False):
"""Compare (maybe nested) dicts.
"""
if not is_dict_like(dic) or not is_dict_like(ref):
return dic == ref
fnc = list if ordered else sorted
if fnc(dic.keys()) != fnc(ref.keys()):
return False
for key in ref.keys():
if key not in dic or not dicts_equal(dic[key], ref[key]):
return False
return True
**options):
"""
Load data from given string or stream 'content_or_strm'.
:param load_fn: Callable to load data
:param content_or_strm: data content or stream provides it
:param container: callble to make a container object
:param allow_primitives:
True if the parser.load* may return objects of primitive data types
other than mapping types such like JSON parser
:param options: keyword options passed to 'load_fn'
:return: container object holding data
"""
ret = load_fn(content_or_strm, **options)
if anyconfig.utils.is_dict_like(ret):
return container() if (ret is None or not ret) else container(ret)
return ret if allow_primitives else container(ret)
- ac_schema_strict: True if more strict (precise) schema is needed
- ac_schema_typemap: Type to JSON schema type mappings
:return: A dict represents JSON schema of this node
"""
if data is None:
return dict(type="null")
_type = type(data)
if _type in _SIMPLE_TYPES:
typemap = options.get("ac_schema_typemap", _SIMPLETYPE_MAP)
scm = dict(type=typemap[_type])
elif anyconfig.utils.is_dict_like(data):
scm = object_to_schema(data, **options)
elif anyconfig.utils.is_list_like(data):
scm = array_to_schema(data, **options)
return scm
def container_to_etree(obj, parent=None, to_str=None, **options):
"""
Convert a dict-like object to XML ElementTree.
:param obj: Container instance to convert to
:param parent: XML ElementTree parent node object or None
:param to_str: Callable to convert value to string or None
:param options: Keyword options,
- tags: Dict of tags for special nodes to keep XML info, attributes,
text and children nodes, e.g. {"attrs": "@attrs", "text": "#text"}
"""
if to_str is None:
to_str = _to_str_fn(**options)
if not anyconfig.utils.is_dict_like(obj):
if parent is not None and obj:
parent.text = to_str(obj) # Parent is a leaf text node.
return parent # All attributes and text should be set already.
options = _complement_tag_options(options)
(attrs, text, children) = operator.itemgetter(*_ATC)(options)
for key, val in anyconfig.compat.iteritems(obj):
if key == attrs:
_elem_set_attrs(val, parent, to_str)
elif key == text:
parent.text = to_str(val)
elif key == children:
for celem in _elem_from_descendants(val, **options):
parent.append(celem)
else:
:param key: key of mapping object to update
:param val: value to update self[key]
:param merge_lists:
Merge not only dicts but also lists. For example,
[1, 2, 3], [3, 4] ==> [1, 2, 3, 4]
[1, 2, 2], [2, 4] ==> [1, 2, 2, 4]
:return: None but 'self' will be updated
"""
if val is None:
val = other[key]
if key in self:
val0 = self[key] # Original value
if anyconfig.utils.is_dict_like(val0): # It needs recursive updates.
merge(self[key], val, merge_lists=merge_lists, **options)
elif merge_lists and _are_list_like(val, val0):
_merge_list(self, key, val)
else:
_merge_other(self, key, val)
else:
self[key] = val
def _output_result(cnf, outpath, otype, inpaths, itype,
extra_opts=None):
"""
:param cnf: Configuration object to print out
:param outpath: Output file path or None
:param otype: Output type or None
:param inpaths: List of input file paths
:param itype: Input type or None
:param extra_opts: Map object will be given to API.dump as extra options
"""
fmsg = ("Uknown file type and cannot detect appropriate backend "
"from its extension, '%s'")
if not anyconfig.utils.is_dict_like(cnf):
_exit_with_output(str(cnf)) # Print primitive types as it is.
if not outpath or outpath == "-":
outpath = sys.stdout
if otype is None:
otype = _output_type_by_input_path(inpaths, itype, fmsg)
_try_dump(cnf, outpath, otype, fmsg, extra_opts=extra_opts)