From 84768eb74ebf664ec3b087321199e0bce3eb63ba Mon Sep 17 00:00:00 2001 From: Julien Constant Date: Fri, 12 May 2023 13:27:51 +0200 Subject: [PATCH] [FIX] Fix cached groups (#647) --- core/models.py | 9 +++++---- core/tests.py | 8 ++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/core/models.py b/core/models.py index 8a01c2d5..fb28faa6 100644 --- a/core/models.py +++ b/core/models.py @@ -180,14 +180,15 @@ def get_group(*, pk: int = None, name: str = None) -> Optional[Group]: :param pk: The primary key of the group :param name: The name of the group :return: The group if it exists, else None - :raises ValueError: If no group matches the criteria + :raise ValueError: If no group matches the criteria """ if pk is None and name is None: raise ValueError("Either pk or name must be set") - if name is not None: - name = name.replace(" ", "_") # avoid errors with memcached backend - pk_or_name: Union[str, int] = pk if pk is not None else name + + # replace space characters to hide warnings with memcached backend + pk_or_name: Union[str, int] = pk if pk is not None else name.replace(" ", "_") group = cache.get(f"sith_group_{pk_or_name}") + if group == "not_found": # Using None as a cache value is a little bit tricky, # so we use a special string to represent None diff --git a/core/tests.py b/core/tests.py index 4c84662b..a2e9c526 100644 --- a/core/tests.py +++ b/core/tests.py @@ -597,12 +597,20 @@ class UserIsInGroupTest(TestCase): Test that when a user is removed from a group, the is_in_group_method return False when calling it again """ + # testing with pk self.toto.groups.add(self.com_admin.pk) self.assertTrue(self.toto.is_in_group(pk=self.com_admin.pk)) self.toto.groups.remove(self.com_admin.pk) self.assertFalse(self.toto.is_in_group(pk=self.com_admin.pk)) + # testing with name + self.toto.groups.add(self.sas_admin.pk) + self.assertTrue(self.toto.is_in_group(name="SAS admin")) + + self.toto.groups.remove(self.sas_admin.pk) + self.assertFalse(self.toto.is_in_group(name="SAS admin")) + def test_not_existing_group(self): """ Test that searching for a not existing group