diff --git a/CHANGES b/CHANGES index 8e73920d..b031b58a 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,11 @@ Waffle Changelog ================ +v4.1.0 +====== +- Updated `is_active_for_user` method to account for `everyone` option +- Added `--testing` option to waffle_flag management command + v4.0.0 ====== - Added support for Django 4.2 and Python 3.11 diff --git a/docs/conf.py b/docs/conf.py index f4ff9eec..993dfeb7 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -46,9 +46,9 @@ # built documents. # # The short X.Y version. -version = '4.0' +version = '4.1' # The full version, including alpha/beta/rc tags. -release = '4.0.0' +release = '4.1.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/waffle/__init__.py b/waffle/__init__.py index ef0907d7..5fd96c67 100755 --- a/waffle/__init__.py +++ b/waffle/__init__.py @@ -12,7 +12,7 @@ if TYPE_CHECKING: from waffle.models import AbstractBaseFlag, AbstractBaseSample, AbstractBaseSwitch -__version__ = '4.0.0' +__version__ = '4.1.0' def flag_is_active(request: HttpRequest, flag_name: str, read_only: bool = False) -> bool | None: diff --git a/waffle/management/commands/waffle_flag.py b/waffle/management/commands/waffle_flag.py index cdf9c374..839cef27 100644 --- a/waffle/management/commands/waffle_flag.py +++ b/waffle/management/commands/waffle_flag.py @@ -83,6 +83,13 @@ def add_arguments(self, parser: CommandParser) -> None: dest='rollout', default=False, help='Turn on rollout mode.') + parser.add_argument( + '--testing', '-t', + action='store_true', + dest='testing', + default=False, + help='Turn on testing mode, allowing the flag to be specified via ' + 'a querystring parameter.') parser.add_argument( '--create', action='store_true', diff --git a/waffle/models.py b/waffle/models.py index 3a5fa76d..ffa58e7d 100644 --- a/waffle/models.py +++ b/waffle/models.py @@ -230,6 +230,9 @@ def get_flush_keys(self, flush_keys: list[str] | None = None) -> list[str]: return flush_keys def is_active_for_user(self, user: AbstractBaseUser) -> bool | None: + if self.everyone: + return True + if self.authenticated and user.is_authenticated: return True diff --git a/waffle/tests/test_management.py b/waffle/tests/test_management.py index 2597b3d8..a70f3717 100644 --- a/waffle/tests/test_management.py +++ b/waffle/tests/test_management.py @@ -17,13 +17,14 @@ def test_create(self): name = 'test' percent = 20 Group.objects.create(name='waffle_group') - call_command('waffle_flag', name, percent=percent, + call_command('waffle_flag', name, percent=percent, testing=True, superusers=True, staff=True, authenticated=True, rollout=True, create=True, group=['waffle_group']) flag = get_waffle_flag_model().objects.get(name=name) self.assertEqual(flag.percent, percent) self.assertIsNone(flag.everyone) + self.assertTrue(flag.testing) self.assertTrue(flag.superusers) self.assertTrue(flag.staff) self.assertTrue(flag.authenticated) diff --git a/waffle/tests/test_models.py b/waffle/tests/test_models.py index 4d64d5dc..7ec9b4a7 100644 --- a/waffle/tests/test_models.py +++ b/waffle/tests/test_models.py @@ -5,6 +5,7 @@ get_waffle_sample_model, get_waffle_switch_model, ) +from django.contrib.auth.models import User class ModelsTests(TestCase): @@ -30,3 +31,8 @@ def test_natural_keys(self): def test_flag_is_not_active_for_none_requests(self): flag = get_waffle_flag_model().objects.create(name='test-flag') self.assertEqual(flag.is_active(None), False) + + def test_is_active_for_user_when_everyone_is_active(self): + flag = get_waffle_flag_model().objects.create(name='test-flag') + flag.everyone = True + self.assertEqual(flag.is_active_for_user(User()), True) \ No newline at end of file