|
49 | 49 | User = get_user_model() |
50 | 50 |
|
51 | 51 |
|
52 | | -class SimpleUserSerializer(serializers.ModelSerializer): |
| 52 | +class SimpleRegularUserSerializer(serializers.ModelSerializer): |
53 | 53 |
|
54 | 54 | full_name = serializers.SerializerMethodField() |
55 | 55 |
|
@@ -122,6 +122,73 @@ class Meta: |
122 | 122 | "received_at": {"source": "server_upload_time"}, |
123 | 123 | } |
124 | 124 |
|
| 125 | +class UserSerializer(serializers.ModelSerializer): |
| 126 | + class UserScoreSerializer(serializers.ModelSerializer): |
| 127 | + value = serializers.IntegerField(source="score_v2", min_value=0, read_only=True) |
| 128 | + updated_at = serializers.DateTimeField(source="last_score_update", read_only=True, allow_null=True) |
| 129 | + |
| 130 | + class Meta: |
| 131 | + model = TigaUser |
| 132 | + fields = ("value", "updated_at") |
| 133 | + |
| 134 | + uuid = serializers.UUIDField(source="user_UUID", read_only=True) |
| 135 | + language_iso = serializers.SerializerMethodField(help_text='ISO 639-1 code', default='en') |
| 136 | + username = serializers.SerializerMethodField() |
| 137 | + is_guest = serializers.SerializerMethodField() |
| 138 | + score = UserScoreSerializer(source='*', read_only=True) |
| 139 | + |
| 140 | + def get_is_guest(self, obj) -> bool: |
| 141 | + return True |
| 142 | + |
| 143 | + def get_username(self, obj) -> str: |
| 144 | + return obj.get_username() |
| 145 | + |
| 146 | + def get_language_iso(self, obj) -> str: |
| 147 | + return obj.language_iso2 |
| 148 | + |
| 149 | + def to_representation(self, instance): |
| 150 | + if isinstance(instance, User): |
| 151 | + # NOTE: this must be the same structure as defined. |
| 152 | + data = {} |
| 153 | + data['uuid'] = uuid.UUID(int=instance.pk) |
| 154 | + data['username'] = instance.get_username() |
| 155 | + data['registration_time'] = instance.date_joined |
| 156 | + data['locale'] = 'en' |
| 157 | + data['language_iso'] = 'en' |
| 158 | + data['is_guest'] = False |
| 159 | + data['score'] = { |
| 160 | + 'value': 0, |
| 161 | + 'updated_at': None |
| 162 | + } |
| 163 | + return data |
| 164 | + |
| 165 | + return super().to_representation(instance) |
| 166 | + |
| 167 | + class Meta: |
| 168 | + model = TigaUser |
| 169 | + fields = ( |
| 170 | + "uuid", |
| 171 | + "username", |
| 172 | + "registration_time", |
| 173 | + "locale", |
| 174 | + "language_iso", |
| 175 | + "is_guest", |
| 176 | + "score", |
| 177 | + ) |
| 178 | + read_only_fields = ( |
| 179 | + "registration_time", |
| 180 | + "score", |
| 181 | + ) |
| 182 | + extra_kwargs = { |
| 183 | + "locale": {"default": "en"}, |
| 184 | + } |
| 185 | + |
| 186 | +class SimpleUserSerializer(UserSerializer): |
| 187 | + class Meta(UserSerializer.Meta): |
| 188 | + fields = ( |
| 189 | + "uuid", |
| 190 | + "locale" |
| 191 | + ) |
125 | 192 |
|
126 | 193 | #### START NOTIFICATION SERIALIZERS #### |
127 | 194 | class NotificationSerializer(serializers.ModelSerializer): |
@@ -639,7 +706,7 @@ class SimplifiedObservationWithPhotosSerializer(BaseSimplifiedReportSerializerWi |
639 | 706 | class Meta(BaseSimplifiedReportSerializerWithPhoto.Meta): |
640 | 707 | pass |
641 | 708 |
|
642 | | -class SimpleAnnotatorUserSerializer(SimpleUserSerializer): |
| 709 | +class SimpleAnnotatorUserSerializer(SimpleRegularUserSerializer): |
643 | 710 | def to_representation(self, instance): |
644 | 711 | # Get the request user |
645 | 712 | user = self.context.get('request').user |
@@ -835,7 +902,14 @@ class Meta: |
835 | 902 | fields = ('annotation_type',) |
836 | 903 |
|
837 | 904 | class AssignmentSerializer(BaseAssignmentSerializer): |
838 | | - observation = SimplifiedObservationWithPhotosSerializer(source='report', read_only=True) |
| 905 | + class SimplifiedObservation(SimplifiedObservationWithPhotosSerializer): |
| 906 | + user = SimpleUserSerializer(read_only=True) |
| 907 | + class Meta(SimplifiedObservationWithPhotosSerializer.Meta): |
| 908 | + fields = tuple( |
| 909 | + fname for fname in SimplifiedObservationWithPhotosSerializer.Meta.fields if fname != 'user_uuid' |
| 910 | + ) + ("user",) |
| 911 | + |
| 912 | + observation = SimplifiedObservation(source='report', read_only=True) |
839 | 913 | class Meta(BaseAssignmentSerializer.Meta): |
840 | 914 | fields = ('observation', ) + BaseAssignmentSerializer.Meta.fields |
841 | 915 |
|
@@ -1099,68 +1173,6 @@ class Meta(BaseReportWithPhotosSerializer.Meta): |
1099 | 1173 | #### END REPORT SERIALIZERS #### |
1100 | 1174 |
|
1101 | 1175 |
|
1102 | | -class UserSerializer(serializers.ModelSerializer): |
1103 | | - class UserScoreSerializer(serializers.ModelSerializer): |
1104 | | - value = serializers.IntegerField(source="score_v2", min_value=0, read_only=True) |
1105 | | - updated_at = serializers.DateTimeField(source="last_score_update", read_only=True, allow_null=True) |
1106 | | - |
1107 | | - class Meta: |
1108 | | - model = TigaUser |
1109 | | - fields = ("value", "updated_at") |
1110 | | - |
1111 | | - uuid = serializers.UUIDField(source="user_UUID", read_only=True) |
1112 | | - language_iso = serializers.SerializerMethodField(help_text='ISO 639-1 code', default='en') |
1113 | | - username = serializers.SerializerMethodField() |
1114 | | - is_guest = serializers.SerializerMethodField() |
1115 | | - score = UserScoreSerializer(source='*', read_only=True) |
1116 | | - |
1117 | | - def get_is_guest(self, obj) -> bool: |
1118 | | - return True |
1119 | | - |
1120 | | - def get_username(self, obj) -> str: |
1121 | | - return obj.get_username() |
1122 | | - |
1123 | | - def get_language_iso(self, obj) -> str: |
1124 | | - return obj.language_iso2 |
1125 | | - |
1126 | | - def to_representation(self, instance): |
1127 | | - if isinstance(instance, User): |
1128 | | - # NOTE: this must be the same structure as defined. |
1129 | | - data = {} |
1130 | | - data['uuid'] = uuid.UUID(int=instance.pk) |
1131 | | - data['username'] = instance.get_username() |
1132 | | - data['registration_time'] = instance.date_joined |
1133 | | - data['locale'] = 'en' |
1134 | | - data['language_iso'] = 'en' |
1135 | | - data['is_guest'] = False |
1136 | | - data['score'] = { |
1137 | | - 'value': 0, |
1138 | | - 'updated_at': None |
1139 | | - } |
1140 | | - return data |
1141 | | - |
1142 | | - return super().to_representation(instance) |
1143 | | - |
1144 | | - class Meta: |
1145 | | - model = TigaUser |
1146 | | - fields = ( |
1147 | | - "uuid", |
1148 | | - "username", |
1149 | | - "registration_time", |
1150 | | - "locale", |
1151 | | - "language_iso", |
1152 | | - "is_guest", |
1153 | | - "score", |
1154 | | - ) |
1155 | | - read_only_fields = ( |
1156 | | - "registration_time", |
1157 | | - "score", |
1158 | | - ) |
1159 | | - extra_kwargs = { |
1160 | | - "locale": {"default": "en"}, |
1161 | | - } |
1162 | | - |
1163 | | - |
1164 | 1176 | class PhotoSerializer(serializers.ModelSerializer): |
1165 | 1177 |
|
1166 | 1178 | image_path = serializers.SerializerMethodField(help_text="Internal server path of the image.") |
|
0 commit comments