Source code for aiida.engine.processes.utils
"""Module with utilities."""
from collections.abc import Mapping
from aiida.orm import Node
[docs]
def prune_mapping(value):
"""Prune a nested mapping from all mappings that are completely empty.
.. note:: A nested mapping that is completely empty means it contains at most other empty mappings. Other null
values, such as `None` or empty lists, should not be pruned.
:param value: A nested mapping of port values.
:return: The same mapping but without any nested namespace that is completely empty.
"""
if isinstance(value, Mapping) and not isinstance(value, Node): # type: ignore[unreachable]
result = {}
for key, sub_value in value.items():
pruned = prune_mapping(sub_value)
# If `pruned` is an "empty'ish" mapping and not an instance of `Node`, skip it, otherwise keep it.
if not (
isinstance(pruned, Mapping) and not pruned and not isinstance(pruned, Node) # type: ignore[unreachable]
):
result[key] = pruned
return result
return value