Skip to content

Commit 7204e3d

Browse files
committed
update privacy settings checks
1 parent c8def08 commit 7204e3d

File tree

4 files changed

+48
-13
lines changed

4 files changed

+48
-13
lines changed

apps/accounts/tests/views/test_privacy_settings_fields.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ def assert_fields_visible(self, user, data):
3939
self.assertEqual(data["landline_phone"], user.landline_phone)
4040
self.assertEqual(data["mobile_phone"], user.mobile_phone)
4141
self.assertEqual(data["email"], user.email)
42+
self.assertEqual(data["personal_email"], user.personal_email)
4243
self.assertEqual(data["linkedin"], user.linkedin)
4344
self.assertEqual(data["medium"], user.medium)
4445
self.assertEqual(data["website"], user.website)
@@ -55,6 +56,7 @@ def assert_fields_hidden(self, data):
5556
self.assertIsNone(data["landline_phone"])
5657
self.assertIsNone(data["mobile_phone"])
5758
self.assertIsNone(data["email"])
59+
self.assertIsNone(data["personal_email"])
5860
self.assertIsNone(data["linkedin"])
5961
self.assertIsNone(data["medium"])
6062
self.assertIsNone(data["website"])
@@ -153,7 +155,6 @@ def test_view_fields_list_users(self, role, privacy_settings_value, fields_visib
153155
self.assertEqual(len(retrieved_user), 1)
154156
retrieved_user = retrieved_user[0]
155157
if fields_visible:
156-
self.assertIsNotNone(retrieved_user["profile_picture"])
157158
self.assertEqual(
158159
retrieved_user["profile_picture"]["id"], instance.profile_picture.id
159160
)

apps/commons/fields.py

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import inspect
22

33
from django.contrib.auth.models import Group
4+
from django.db.models import QuerySet
45
from django.shortcuts import get_object_or_404
56
from django.utils.translation import gettext_lazy as _
67
from drf_spectacular.types import OpenApiTypes
@@ -165,11 +166,44 @@ def __init__(self, **kwargs):
165166
]
166167
super().__init__(**kwargs)
167168

169+
def _get_user(self, value):
170+
if isinstance(value, ProjectUser):
171+
return value
172+
user_data = getattr(self.parent, "instance", None) or getattr(
173+
self.parent, "queryset", None
174+
)
175+
if (
176+
user_data
177+
and isinstance(user_data, QuerySet)
178+
and user_data.model == ProjectUser
179+
and user_data.count() == 1
180+
):
181+
return user_data.get()
182+
if (
183+
user_data
184+
and isinstance(user_data, QuerySet)
185+
and user_data.model == ProjectUser
186+
and self.source_attrs
187+
):
188+
return user_data.filter(**{self.source_attrs[0]: value}).first()
189+
if user_data and isinstance(user_data, ProjectUser):
190+
return user_data
191+
if user_data and isinstance(user_data, list) and len(user_data) == 1:
192+
return user_data[0]
193+
if user_data and isinstance(user_data, list) and self.source_attrs:
194+
return [
195+
user
196+
for user in user_data
197+
if getattr(user, self.source_attrs[0]) == value
198+
][0]
199+
if self.source_attrs:
200+
queryset = ProjectUser.objects.filter(**{self.source_attrs[0]: value})
201+
if queryset.count() == 1:
202+
return queryset.get()
203+
return None
204+
168205
def _check_privacy_settings(self, value):
169-
if isinstance(self.parent.instance, ProjectUser):
170-
instance = self.parent.instance
171-
else:
172-
instance = value
206+
instance = self._get_user(value)
173207
assert isinstance(instance, ProjectUser)
174208
request = self.context.get("request")
175209
assert request is not None

locale/en/LC_MESSAGES/django.po

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ msgid ""
88
msgstr ""
99
"Project-Id-Version: PACKAGE VERSION\n"
1010
"Report-Msgid-Bugs-To: \n"
11-
"POT-Creation-Date: 2024-11-25 17:05+0100\n"
11+
"POT-Creation-Date: 2024-12-10 14:34+0100\n"
1212
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414
"Language-Team: LANGUAGE <[email protected]>\n"
@@ -166,16 +166,16 @@ msgstr ""
166166
msgid "Unknown publication status '{publication_status}'"
167167
msgstr ""
168168

169-
#: apps/commons/fields.py:28 apps/skills/serializers.py:101
169+
#: apps/commons/fields.py:29 apps/skills/serializers.py:101
170170
msgid "This field is required."
171171
msgstr ""
172172

173-
#: apps/commons/fields.py:29
173+
#: apps/commons/fields.py:30
174174
#, python-brace-format
175175
msgid "Invalid id \"{user_id}\" - object does not exist."
176176
msgstr ""
177177

178-
#: apps/commons/fields.py:31 apps/skills/serializers.py:106
178+
#: apps/commons/fields.py:32 apps/skills/serializers.py:106
179179
#, python-brace-format
180180
msgid "Incorrect type. Expected str value, received {data_type}."
181181
msgstr ""

locale/fr/LC_MESSAGES/django.po

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ msgid ""
88
msgstr ""
99
"Project-Id-Version: PACKAGE VERSION\n"
1010
"Report-Msgid-Bugs-To: \n"
11-
"POT-Creation-Date: 2024-11-25 17:05+0100\n"
11+
"POT-Creation-Date: 2024-12-10 14:34+0100\n"
1212
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414
"Language-Team: LANGUAGE <[email protected]>\n"
@@ -190,16 +190,16 @@ msgstr "Statut de publication inconnu"
190190
msgid "Unknown publication status '{publication_status}'"
191191
msgstr "Statut de publication inconnu '{publication_status}'"
192192

193-
#: apps/commons/fields.py:28 apps/skills/serializers.py:101
193+
#: apps/commons/fields.py:29 apps/skills/serializers.py:101
194194
msgid "This field is required."
195195
msgstr "Ce champ est obligatoire."
196196

197-
#: apps/commons/fields.py:29
197+
#: apps/commons/fields.py:30
198198
#, python-brace-format
199199
msgid "Invalid id \"{user_id}\" - object does not exist."
200200
msgstr "identifiant invalide \"{user_id}\" - cet objet n'existe pas."
201201

202-
#: apps/commons/fields.py:31 apps/skills/serializers.py:106
202+
#: apps/commons/fields.py:32 apps/skills/serializers.py:106
203203
#, python-brace-format
204204
msgid "Incorrect type. Expected str value, received {data_type}."
205205
msgstr "Type incorrect. Valeur str attendue, {data_type} reçue."

0 commit comments

Comments
 (0)