summaryrefslogtreecommitdiffstats
path: root/third_party/python/attrs/attr/filters.py
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/python/attrs/attr/filters.py')
-rw-r--r--third_party/python/attrs/attr/filters.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/third_party/python/attrs/attr/filters.py b/third_party/python/attrs/attr/filters.py
new file mode 100644
index 0000000000..a1e40c98db
--- /dev/null
+++ b/third_party/python/attrs/attr/filters.py
@@ -0,0 +1,66 @@
+# 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_