def _schema_copy()

in mozilla_schema_generator/subset_pings.py [0:0]


def _schema_copy(src, pattern, dst=None, delete=True, prefix=()):
    if src.get("type") != "object" or "properties" not in src:
        # only recurse into objects with explicitly defined properties
        return None
    src_props = src["properties"]
    dst_props = {}
    for name, src_subschema in list(src_props.items()):
        path = ".".join((*prefix, name))
        if pattern.fullmatch(path):
            prop = src_props.pop(name) if delete else deepcopy(src_props[name])
        else:
            prop = _schema_copy(
                src_subschema,
                pattern,
                dst=None if dst is None else dst["properties"].get(name, None),
                delete=delete,
                prefix=(*prefix, name),
            )
        if prop is not None:
            dst_props[name] = prop
    if dst_props:
        if dst is None:
            return {"properties": dst_props, "type": "object"}
        else:
            dst["properties"].update(dst_props)
            return dst
    return None