filters.py
51 lines
| 1.0 KiB
| text/x-python
|
PythonLexer
Matt Harbison
|
r50538 | # SPDX-License-Identifier: MIT | ||
Siddharth Agarwal
|
r34398 | """ | ||
Matt Harbison
|
r50538 | Commonly useful filters for `attr.asdict`. | ||
Siddharth Agarwal
|
r34398 | """ | ||
from ._make import Attribute | ||||
def _split_what(what): | ||||
""" | ||||
Returns a tuple of `frozenset`s of classes and attributes. | ||||
""" | ||||
return ( | ||||
Matt Harbison
|
r50538 | frozenset(cls for cls in what if isinstance(cls, type)), | ||
Siddharth Agarwal
|
r34398 | frozenset(cls for cls in what if isinstance(cls, Attribute)), | ||
) | ||||
def include(*what): | ||||
Matt Harbison
|
r50538 | """ | ||
Include *what*. | ||||
Siddharth Agarwal
|
r34398 | |||
Matt Harbison
|
r50538 | :param what: What to include. | ||
:type what: `list` of `type` or `attrs.Attribute`\\ s | ||||
Siddharth Agarwal
|
r34398 | |||
Matt Harbison
|
r50538 | :rtype: `callable` | ||
Siddharth Agarwal
|
r34398 | """ | ||
cls, attrs = _split_what(what) | ||||
def include_(attribute, value): | ||||
return value.__class__ in cls or attribute in attrs | ||||
return include_ | ||||
def exclude(*what): | ||||
Matt Harbison
|
r50538 | """ | ||
Exclude *what*. | ||||
Siddharth Agarwal
|
r34398 | |||
Matt Harbison
|
r50538 | :param what: What to exclude. | ||
:type what: `list` of classes or `attrs.Attribute`\\ s. | ||||
Siddharth Agarwal
|
r34398 | |||
Matt Harbison
|
r50538 | :rtype: `callable` | ||
Siddharth Agarwal
|
r34398 | """ | ||
cls, attrs = _split_what(what) | ||||
def exclude_(attribute, value): | ||||
return value.__class__ not in cls and attribute not in attrs | ||||
return exclude_ | ||||