from pathlib import Path from os.path import join from bundlewrap.items.files import File def add_files_recursive(files, root, common={}, target_root="/", files_root=None): if files_root == None: files_root = root root = Path(root) for p in root.rglob("**/*"): if not p.is_dir(): rel = str(p.relative_to(files_root)) key = join(target_root, rel) files[key] = (files[key] if key in files else {}) | common | { "source": rel, } def tree(root, common={}, target_dir="/", keep_parent=True): files = {} root = Path(root) for p in Path(root).rglob("**/*"): if not p.is_dir(): key = join(target_dir, p.relative_to( root.parent if keep_parent else root)) files[key] = (files[key] if key in files else {}) | common | { "source": str(p), } return files def merge(a, b): for key in b.keys(): a[key] = (a[key] if key in a else {}) | b[key]