Skip to content

Commit

Permalink
Make attrs work with a converter instance that does not evaluate True
Browse files Browse the repository at this point in the history
  • Loading branch information
filbranden committed Nov 18, 2024
1 parent e21793e commit 50cba80
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/attr/_make.py
Original file line number Diff line number Diff line change
Expand Up @@ -2021,7 +2021,7 @@ def _attrs_to_init_script(
has_factory = isinstance(a.default, Factory)
maybe_self = "self" if has_factory and a.default.takes_self else ""

if a.converter and not isinstance(a.converter, Converter):
if a.converter is not None and not isinstance(a.converter, Converter):
converter = Converter(a.converter)
else:
converter = a.converter
Expand Down
19 changes: 19 additions & 0 deletions tests/test_converters.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,25 @@ def wrapped(_, __, ___) -> float:
assert float is c.__call__.__annotations__["return"]
assert None is c2.__call__.__annotations__.get("return")

def test_falsey_converter(self):
"""
Passing a false-y instance still produces a valid converter.
"""

class MyConv:
def __bool__(self):
return False

def __call__(self, value):
return value * 2

@attr.s
class C:
a = attrib(converter=MyConv())

c = C(21)
assert 42 == c.a


class TestOptional:
"""
Expand Down

0 comments on commit 50cba80

Please sign in to comment.