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