File tree Expand file tree Collapse file tree 2 files changed +16
-5
lines changed Expand file tree Collapse file tree 2 files changed +16
-5
lines changed Original file line number Diff line number Diff line change 5959# Unique object for unequivocal getattr() defaults.
6060_sentinel = object ()
6161
62+ _ng_default_on_setattr = setters .pipe (setters .convert , setters .validate )
63+
6264
6365class _Nothing (object ):
6466 """
@@ -722,13 +724,16 @@ def __init__(
722724 self ._cls_dict ["__delattr__" ] = _frozen_delattrs
723725
724726 self ._wrote_own_setattr = True
725- elif on_setattr == setters . validate :
727+ elif on_setattr == _ng_default_on_setattr :
726728 for a in attrs :
727729 if a .validator is not None :
728730 break
731+ if a .converter is not None :
732+ break
729733 else :
730- # If class-level on_setattr is set to validating, but there's
731- # no field to validate, pretend like there's no on_setattr.
734+ # If class-level on_setattr is set to convert + validate, but
735+ # there's no field to convert or validate, pretend like there's
736+ # no on_setattr.
732737 self ._on_setattr = None
733738
734739 if getstate_setstate :
Original file line number Diff line number Diff line change 88from attr .exceptions import UnannotatedAttributeError
99
1010from . import setters
11- from ._make import NOTHING , _frozen_setattrs , attrib , attrs
11+ from ._make import (
12+ NOTHING ,
13+ _frozen_setattrs ,
14+ _ng_default_on_setattr ,
15+ attrib ,
16+ attrs ,
17+ )
1218
1319
1420def define (
@@ -92,7 +98,7 @@ def wrap(cls):
9298
9399 # By default, mutable classes convert & validate on setattr.
94100 if frozen is False and on_setattr is None :
95- on_setattr = [ setters . convert , setters . validate ]
101+ on_setattr = _ng_default_on_setattr
96102
97103 # However, if we subclass a frozen class, we inherit the immutability
98104 # and disable on_setattr.
You can’t perform that action at this time.
0 commit comments