##// END OF EJS Templates
cext: fix potential memory leaks of list items appended with PyList_Append...
cext: fix potential memory leaks of list items appended with PyList_Append Also reduce the duplication in the tricky code that uses PyList_Append by extracting it into a function `pylist_append_owned`.

File last commit:

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