Spaces:
Runtime error
Runtime error
# SPDX-License-Identifier: MIT | |
""" | |
Commonly useful filters for `attr.asdict`. | |
""" | |
from ._make import Attribute | |
def _split_what(what): | |
""" | |
Returns a tuple of `frozenset`s of classes and attributes. | |
""" | |
return ( | |
frozenset(cls for cls in what if isinstance(cls, type)), | |
frozenset(cls for cls in what if isinstance(cls, str)), | |
frozenset(cls for cls in what if isinstance(cls, Attribute)), | |
) | |
def include(*what): | |
""" | |
Include *what*. | |
:param what: What to include. | |
:type what: `list` of classes `type`, field names `str` or | |
`attrs.Attribute`\\ s | |
:rtype: `callable` | |
.. versionchanged:: 23.1.0 Accept strings with field names. | |
""" | |
cls, names, attrs = _split_what(what) | |
def include_(attribute, value): | |
return ( | |
value.__class__ in cls | |
or attribute.name in names | |
or attribute in attrs | |
) | |
return include_ | |
def exclude(*what): | |
""" | |
Exclude *what*. | |
:param what: What to exclude. | |
:type what: `list` of classes `type`, field names `str` or | |
`attrs.Attribute`\\ s. | |
:rtype: `callable` | |
.. versionchanged:: 23.3.0 Accept field name string as input argument | |
""" | |
cls, names, attrs = _split_what(what) | |
def exclude_(attribute, value): | |
return not ( | |
value.__class__ in cls | |
or attribute.name in names | |
or attribute in attrs | |
) | |
return exclude_ | |