import json from collections import OrderedDict from pathlib import Path def resolve_path(*p: str): return Path(*p).expanduser().resolve().absolute() def safe_list_get(l, idx, default): """ https://stackoverflow.com/a/5125636 :param l: :param idx: :param default: :return: """ try: return l[idx] except IndexError: return default def deep_sort(obj): """ https://stackoverflow.com/a/59218649 :param obj: :return: """ if isinstance(obj, dict): obj = OrderedDict(sorted(obj.items())) for k, v in obj.items(): if isinstance(v, dict) or isinstance(v, list): obj[k] = deep_sort(v) if isinstance(obj, list): for i, v in enumerate(obj): if isinstance(v, dict) or isinstance(v, list): obj[i] = deep_sort(v) obj = sorted(obj, key=lambda x: json.dumps(x)) return obj def indefinite_article(word): if word[0].lower() in 'aeiou': return 'an' else: return 'a'