From a8bf98ca5117962c31911b51c4b4053e3960657d Mon Sep 17 00:00:00 2001 From: Kadir Can Ozden <101993364+bysiber@users.noreply.github.com> Date: Fri, 20 Feb 2026 10:47:49 +0300 Subject: [PATCH 1/4] Fix validators.disabled() to save/restore previous state on nesting --- src/attr/validators.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/attr/validators.py b/src/attr/validators.py index 837e003b6..2813004c8 100644 --- a/src/attr/validators.py +++ b/src/attr/validators.py @@ -80,11 +80,12 @@ def disabled(): .. versionadded:: 21.3.0 """ + prev = get_run_validators() set_run_validators(False) try: yield finally: - set_run_validators(True) + set_run_validators(prev) @attrs(repr=False, slots=True, unsafe_hash=True) From 8f136032233ad16575ec9d50c32cdbee0ff07e8f Mon Sep 17 00:00:00 2001 From: Hynek Schlawack Date: Sat, 14 Mar 2026 14:59:05 +0100 Subject: [PATCH 2/4] Add news fragment --- changelog.d/1513.change.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/1513.change.md diff --git a/changelog.d/1513.change.md b/changelog.d/1513.change.md new file mode 100644 index 000000000..8cbc63c77 --- /dev/null +++ b/changelog.d/1513.change.md @@ -0,0 +1 @@ +The `attrs.validators.disabled()` contextmanager can now be nested. From dbf4a0ef0ebf0e4d12d9efb3547dc12904f3c68b Mon Sep 17 00:00:00 2001 From: Hynek Schlawack Date: Sat, 14 Mar 2026 15:01:04 +0100 Subject: [PATCH 3/4] Add test --- tests/test_validators.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/test_validators.py b/tests/test_validators.py index 9fd3f2dcb..5ad2308eb 100644 --- a/tests/test_validators.py +++ b/tests/test_validators.py @@ -97,6 +97,22 @@ def test_disabled_ctx_with_errors(self): assert _config._run_validators is True + def test_disabled_ctx_nested(self): + """ + Nested contextmanagers restore correct state. + """ + assert _config._run_validators is True + + with validator_module.disabled(): + assert _config._run_validators is False + + with validator_module.disabled(): + assert _config._run_validators is False + + assert _config._run_validators is False + + assert _config._run_validators is True + class TestInstanceOf: """ From 91f3695fe70a6d58c95660addd5ef8d46bfebd61 Mon Sep 17 00:00:00 2001 From: Hynek Schlawack Date: Sat, 14 Mar 2026 15:09:56 +0100 Subject: [PATCH 4/4] Add versionchanged tag --- src/attr/validators.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/attr/validators.py b/src/attr/validators.py index 2813004c8..0b1a29443 100644 --- a/src/attr/validators.py +++ b/src/attr/validators.py @@ -79,6 +79,7 @@ def disabled(): This context manager is not thread-safe! .. versionadded:: 21.3.0 + .. versionchanged:: 26.1.0 The contextmanager is nestable. """ prev = get_run_validators() set_run_validators(False)