diff --git a/django/utils/deprecation.py b/django/utils/deprecation.py index 020f69b032..6fc27a8edd 100644 --- a/django/utils/deprecation.py +++ b/django/utils/deprecation.py @@ -116,6 +116,9 @@ class CallableBool: def __ne__(self, other): return self.value != other + def __or__(self, other): + return bool(self.value or other) + CallableFalse = CallableBool(False) CallableTrue = CallableBool(True) diff --git a/docs/releases/1.10.1.txt b/docs/releases/1.10.1.txt index 719f536b29..6dbf40de02 100644 --- a/docs/releases/1.10.1.txt +++ b/docs/releases/1.10.1.txt @@ -13,7 +13,7 @@ Bugfixes doesn't return a result (:ticket:`26991`). * Allowed ``User.is_authenticated`` and ``User.is_anonymous`` properties to be - compared using ``==`` and ``!=`` (:ticket:`26988`). + compared using ``==``, ``!=``, and ``|`` (:ticket:`26988`, :ticket:`27154`). * Removed the broken ``BaseCommand.usage()`` method which was for ``optparse`` support (:ticket:`27000`). diff --git a/tests/utils_tests/test_deprecation.py b/tests/utils_tests/test_deprecation.py index 41627ce1b3..7732dbc62b 100644 --- a/tests/utils_tests/test_deprecation.py +++ b/tests/utils_tests/test_deprecation.py @@ -14,3 +14,14 @@ class TestCallableBool(SimpleTestCase): self.assertEqual(CallableFalse, False) self.assertFalse(CallableFalse != False) # noqa: E712 self.assertNotEqual(CallableFalse, True) + + def test_or(self): + self.assertIs(CallableTrue | CallableTrue, True) + self.assertIs(CallableTrue | CallableFalse, True) + self.assertIs(CallableFalse | CallableTrue, True) + self.assertIs(CallableFalse | CallableFalse, False) + + self.assertIs(CallableTrue | True, True) + self.assertIs(CallableTrue | False, True) + self.assertIs(CallableFalse | True, True) + self.assertFalse(CallableFalse | False, False)