from json import dumps, loads from tomlkit import dumps as toml_dumps from bundlewrap.metadata import metadata_to_json from bundlewrap.utils import Fault from bundlewrap.utils.text import toml_clean def resolve_faults(dictionary: dict) -> dict: return loads(metadata_to_json(dictionary)) def ensure_fault_or_none(maybe_fault): if maybe_fault is None or isinstance(maybe_fault, Fault): return maybe_fault return Fault(maybe_fault, lambda f: f, f=maybe_fault) def join_faults(faults, by=' '): result = [] id_list = [] for item in faults: result.append(ensure_fault_or_none(item)) if isinstance(item, Fault): id_list += item.id_list else: id_list.append(item) id_list += [ 'joined_by', by, ] return Fault( id_list, lambda o: by.join([i.value for i in o]), o=result, ) def dict_as_json(json): return Fault( 'dict_as_json', lambda o: metadata_to_json(o) + '\n', o=json ) def dict_as_toml(toml): return Fault( 'dict_as_toml', lambda o: toml_clean(toml_dumps(resolve_faults(o), sort_keys=True)) + '\n', o=toml )