filters.py
52 lines
| 1.1 KiB
| text/x-python
|
PythonLexer
Siddharth Agarwal
|
r34398 | """ | ||
Commonly useful filters for :func:`attr.asdict`. | ||||
""" | ||||
from __future__ import absolute_import, division, print_function | ||||
from ._compat import isclass | ||||
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 isclass(cls)), | ||||
frozenset(cls for cls in what if isinstance(cls, Attribute)), | ||||
) | ||||
def include(*what): | ||||
""" | ||||
Whitelist *what*. | ||||
:param what: What to whitelist. | ||||
:type what: :class:`list` of :class:`type` or :class:`attr.Attribute`\ s | ||||
:rtype: :class:`callable` | ||||
""" | ||||
cls, attrs = _split_what(what) | ||||
def include_(attribute, value): | ||||
return value.__class__ in cls or attribute in attrs | ||||
return include_ | ||||
def exclude(*what): | ||||
""" | ||||
Blacklist *what*. | ||||
:param what: What to blacklist. | ||||
:type what: :class:`list` of classes or :class:`attr.Attribute`\ s. | ||||
:rtype: :class:`callable` | ||||
""" | ||||
cls, attrs = _split_what(what) | ||||
def exclude_(attribute, value): | ||||
return value.__class__ not in cls and attribute not in attrs | ||||
return exclude_ | ||||