add prune_empty and delete()
This commit is contained in:
parent
85a2eb6acc
commit
f766a3ad64
@ -799,6 +799,35 @@ class MutableLibrary(Library, MutableMapping[str, 'Pattern'], metaclass=ABCMeta)
|
||||
new._merge(key, self, key)
|
||||
return new
|
||||
|
||||
def prune_empty(
|
||||
self,
|
||||
repeat: bool = True,
|
||||
) -> Set[str]:
|
||||
# TODO doc prune_empty
|
||||
trimmed = set()
|
||||
while empty := set(name for name, pat in lib.items() if pat.is_empty()):
|
||||
for name in empty:
|
||||
del lib[name]
|
||||
for pat in lib.values():
|
||||
pat.refs = [ref for ref in pat.refs if ref.target not in empty]
|
||||
|
||||
trimmed |= empty
|
||||
if not repeat:
|
||||
break
|
||||
return trimmed
|
||||
|
||||
def delete(
|
||||
self: ML,
|
||||
key: str,
|
||||
delete_refs: bool = True,
|
||||
) -> ML:
|
||||
# TODO doc delete()
|
||||
del self[key]
|
||||
if delete_refs:
|
||||
for pat in lib.values():
|
||||
pat.refs = [ref for ref in pat.refs if ref.target != key]
|
||||
return self
|
||||
|
||||
|
||||
class WrapROLibrary(Library):
|
||||
mapping: Mapping[str, 'Pattern']
|
||||
|
Loading…
Reference in New Issue
Block a user