!/usr/bin/env python import glob import argparse import yaml
def extend_dict(merged, a):
if isinstance(merged, dict): for k, v in a.items(): if k in merged: extend_dict(merged[k], v) else: merged[k] = v else: if isinstance(merged, list): extend_list(merged, a) else: merged += a
def extend_list(merged, a):
missing = [] for itema in a: if not isinstance(itema, dict) or itema in missing: continue if 'name' in itema: match = next((i for i in merged if i["name"] == itema["name"]), False) if match: extend_dict(match, itema) else: missing += [itema, ] merged += missing
if __name__ == ‘__main__’:
parser = argparse.ArgumentParser(description="Merge the data libraries in the tutorials into a single large one") parser.add_argument('--nondocker', action='store_true', help="For running outside of docker usecase") args = parser.parse_args() merged = {} if args.nondocker: for filename in sorted(glob.glob('./topics/*/tutorials/*/data-library.yaml')): a = yaml.safe_load(open(filename)) extend_dict(merged, a) else: for filename in sorted(glob.iglob('./**/data-library.yaml')): a = yaml.safe_load(open(filename)) extend_dict(merged, a) print(yaml.dump(merged, default_flow_style=False))