Skip to content

Commit 0bcd7da

Browse files
committed
Added first_name, last_name, full_name for any kind of user
1 parent 8738543 commit 0bcd7da

File tree

3 files changed

+56
-28
lines changed

3 files changed

+56
-28
lines changed

api/serializers.py

Lines changed: 47 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -49,31 +49,6 @@
4949

5050
User = get_user_model()
5151

52-
53-
class SimpleRegularUserSerializer(serializers.ModelSerializer):
54-
55-
uuid = serializers.SerializerMethodField()
56-
full_name = serializers.SerializerMethodField()
57-
58-
def get_uuid(self, obj) -> UUID:
59-
return UUID(int=obj.pk)
60-
61-
def get_full_name(self, obj) -> str:
62-
return obj.get_full_name()
63-
64-
class Meta:
65-
model = User
66-
fields = (
67-
'uuid',
68-
'username',
69-
'first_name',
70-
'last_name',
71-
'full_name'
72-
)
73-
extra_kwargs = {
74-
"id": {"read_only": True},
75-
}
76-
7752
class CampaignSerializer(serializers.ModelSerializer):
7853
class Meta:
7954
model = OWCampaigns
@@ -139,6 +114,9 @@ class Meta:
139114
uuid = serializers.UUIDField(source="user_UUID", read_only=True)
140115
language_iso = serializers.SerializerMethodField(help_text='ISO 639-1 code', default='en')
141116
username = serializers.SerializerMethodField()
117+
first_name = serializers.SerializerMethodField()
118+
last_name = serializers.SerializerMethodField()
119+
full_name = serializers.SerializerMethodField()
142120
is_guest = serializers.SerializerMethodField()
143121
score = UserScoreSerializer(source='*', read_only=True)
144122

@@ -148,6 +126,21 @@ def get_is_guest(self, obj) -> bool:
148126
def get_username(self, obj) -> str:
149127
return obj.get_username()
150128

129+
def get_first_name(self, obj) -> str:
130+
if isinstance(obj, User):
131+
return obj.first_name
132+
return 'Anonymous'
133+
134+
def get_last_name(self, obj) -> str:
135+
if isinstance(obj, User):
136+
return obj.last_name
137+
return 'User'
138+
139+
def get_full_name(self, obj) -> str:
140+
if isinstance(obj, User):
141+
return obj.get_full_name()
142+
return 'Anonymous User'
143+
151144
def get_language_iso(self, obj) -> str:
152145
return obj.language_iso2
153146

@@ -157,6 +150,9 @@ def to_representation(self, instance):
157150
data = {}
158151
data['uuid'] = UUID(int=instance.pk)
159152
data['username'] = instance.get_username()
153+
data['first_name'] = self.get_first_name(obj=instance)
154+
data['last_name'] = self.get_last_name(obj=instance)
155+
data['full_name'] = self.get_full_name(obj=instance)
160156
data['registration_time'] = instance.date_joined
161157
data['locale'] = 'en'
162158
data['language_iso'] = 'en'
@@ -165,7 +161,10 @@ def to_representation(self, instance):
165161
'value': 0,
166162
'updated_at': None
167163
}
168-
return data
164+
return {
165+
k: v for k, v in data.items()
166+
if k in self.fields.keys()
167+
}
169168

170169
return super().to_representation(instance)
171170

@@ -174,6 +173,9 @@ class Meta:
174173
fields = (
175174
"uuid",
176175
"username",
176+
"first_name",
177+
"last_name",
178+
"full_name",
177179
"registration_time",
178180
"locale",
179181
"language_iso",
@@ -189,6 +191,23 @@ class Meta:
189191
}
190192

191193
class SimpleUserSerializer(UserSerializer):
194+
195+
uuid = serializers.SerializerMethodField()
196+
197+
def get_uuid(self, obj) -> UUID:
198+
return UUID(int=obj.pk)
199+
200+
class Meta(UserSerializer.Meta):
201+
model = User
202+
fields = (
203+
'uuid',
204+
'username',
205+
'first_name',
206+
'last_name',
207+
'full_name'
208+
)
209+
210+
class MinimalUserSerializer(UserSerializer):
192211
class Meta(UserSerializer.Meta):
193212
fields = (
194213
"uuid",
@@ -711,7 +730,7 @@ class SimplifiedObservationWithPhotosSerializer(BaseSimplifiedReportSerializerWi
711730
class Meta(BaseSimplifiedReportSerializerWithPhoto.Meta):
712731
pass
713732

714-
class SimpleAnnotatorUserSerializer(SimpleRegularUserSerializer):
733+
class SimpleAnnotatorUserSerializer(SimpleUserSerializer):
715734
def to_representation(self, instance):
716735
# Get the request user
717736
user = self.context.get('request').user
@@ -1019,7 +1038,7 @@ class Meta:
10191038

10201039
class AssignmentSerializer(BaseAssignmentSerializer):
10211040
class AssignedObservationSerializer(SimplifiedObservationWithPhotosSerializer):
1022-
user = SimpleUserSerializer(read_only=True)
1041+
user = MinimalUserSerializer(read_only=True)
10231042
class Meta(SimplifiedObservationWithPhotosSerializer.Meta):
10241043
fields = tuple(
10251044
fname for fname in SimplifiedObservationWithPhotosSerializer.Meta.fields if fname != 'user_uuid'

api/tests/integration/users/get_my_profile.tavern.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ stages:
3232
- json:off
3333
json:
3434
username: "{user.username}"
35+
first_name: "{user.first_name}"
36+
last_name: "{user.last_name}"
37+
full_name: "{user.first_name} {user.last_name}"
3538
is_guest: false
3639
- name: Check schema for authorized user without permission can not get user even if they have view permissions.
3740
request:
@@ -55,6 +58,9 @@ stages:
5558
json:
5659
uuid: "{app_user.pk}"
5760
username: "{app_user.pk}"
61+
first_name: "Anonymous"
62+
last_name: "User"
63+
full_name: "Anonymous User"
5864
is_guest: true
5965
- name: Check schema for mobile user get their profile
6066
request:

api/tests/integration/users/schema.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ variables:
88
response_data_validation:
99
uuid: !re_fullmatch "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
1010
username: !anystr
11+
first_name: !anystr
12+
last_name: !anystr
13+
full_name: !anystr
1114
registration_time: !re_fullmatch \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}Z
1215
locale: !anything
1316
is_guest: !anybool

0 commit comments

Comments
 (0)