From 38f71695d22dc8dd7c8a1a011502ba51abb7c9fa Mon Sep 17 00:00:00 2001 From: Joe Banks Date: Mon, 1 Apr 2024 13:31:52 +0100 Subject: Add display name to API user model --- .../apps/api/migrations/0095_user_display_name.py | 18 ++++++++++++++++++ pydis_site/apps/api/models/bot/user.py | 5 +++++ 2 files changed, 23 insertions(+) create mode 100644 pydis_site/apps/api/migrations/0095_user_display_name.py diff --git a/pydis_site/apps/api/migrations/0095_user_display_name.py b/pydis_site/apps/api/migrations/0095_user_display_name.py new file mode 100644 index 00000000..82561c40 --- /dev/null +++ b/pydis_site/apps/api/migrations/0095_user_display_name.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0.3 on 2024-04-01 12:21 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("api", "0094_migrate_mailing_listdata"), + ] + + operations = [ + migrations.AddField( + model_name="user", + name="display_name", + field=models.CharField(blank=True, help_text="The display name, taken from Discord.", max_length=32), + ), + migrations.RunSQL("UPDATE api_user SET display_name = name;"), + ] diff --git a/pydis_site/apps/api/models/bot/user.py b/pydis_site/apps/api/models/bot/user.py index afc5ba1e..1cb10988 100644 --- a/pydis_site/apps/api/models/bot/user.py +++ b/pydis_site/apps/api/models/bot/user.py @@ -33,6 +33,11 @@ class User(ModelReprMixin, models.Model): max_length=32, help_text="The username, taken from Discord.", ) + display_name = models.CharField( + max_length=32, + blank=True, + help_text="The display name, taken from Discord.", + ) discriminator = models.PositiveSmallIntegerField( validators=( MaxValueValidator( -- cgit v1.2.3 From cbf6a8a363bcf44b64ba7125710c3895944e07ae Mon Sep 17 00:00:00 2001 From: Joe Banks Date: Mon, 1 Apr 2024 13:32:08 +0100 Subject: Add display_name to serializer --- pydis_site/apps/api/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py index ea94214f..9eca2c09 100644 --- a/pydis_site/apps/api/serializers.py +++ b/pydis_site/apps/api/serializers.py @@ -673,7 +673,7 @@ class UserSerializer(ModelSerializer): """Metadata defined for the Django REST Framework.""" model = User - fields = ('id', 'name', 'discriminator', 'roles', 'in_guild') + fields = ('id', 'name', 'display_name', 'discriminator', 'roles', 'in_guild') depth = 1 list_serializer_class = UserListSerializer -- cgit v1.2.3 From 09ed99a3e6bb44cb5bbc27cd8561393490e2de6d Mon Sep 17 00:00:00 2001 From: Joe Banks Date: Mon, 1 Apr 2024 13:34:05 +0100 Subject: Update user viewset docstrings with display_name --- pydis_site/apps/api/viewsets/bot/user.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/pydis_site/apps/api/viewsets/bot/user.py b/pydis_site/apps/api/viewsets/bot/user.py index 77378336..d06eb868 100644 --- a/pydis_site/apps/api/viewsets/bot/user.py +++ b/pydis_site/apps/api/viewsets/bot/user.py @@ -64,7 +64,8 @@ class UserViewSet(ModelViewSet): ... 'results': [ ... { ... 'id': 409107086526644234, - ... 'name': "Python", + ... 'name': "python", + ... 'display_name': "Python", ... 'discriminator': 4329, ... 'roles': [ ... 352427296948486144, @@ -79,6 +80,7 @@ class UserViewSet(ModelViewSet): #### Optional Query Parameters - username: username to search for + - display_name: display name to search for - discriminator: discriminator to search for - page_size: number of Users in one page, defaults to 10,000 - page: page number @@ -92,7 +94,8 @@ class UserViewSet(ModelViewSet): #### Response format >>> { ... 'id': 409107086526644234, - ... 'name': "Python", + ... 'name': "python", + ... 'display_name': "Python", ... 'discriminator': 4329, ... 'roles': [ ... 352427296948486144, @@ -170,6 +173,7 @@ class UserViewSet(ModelViewSet): >>> { ... 'id': int, ... 'name': str, + ... 'display_name': str, ... 'discriminator': int, ... 'roles': List[int], ... 'in_guild': bool @@ -192,6 +196,7 @@ class UserViewSet(ModelViewSet): >>> { ... 'id': int, ... 'name': str, + ... 'display_name': str, ... 'discriminator': int, ... 'roles': List[int], ... 'in_guild': bool @@ -210,6 +215,7 @@ class UserViewSet(ModelViewSet): >>> { ... 'id': int, ... 'name': str, + ... 'display_name': str, ... 'discriminator': int, ... 'roles': List[int], ... 'in_guild': bool @@ -229,6 +235,7 @@ class UserViewSet(ModelViewSet): ... { ... 'id': int, ... 'name': str, + ... 'display_name': str, ... 'discriminator': int, ... 'roles': List[int], ... 'in_guild': bool @@ -236,6 +243,7 @@ class UserViewSet(ModelViewSet): ... { ... 'id': int, ... 'name': str, + ... 'display_name': str, ... 'discriminator': int, ... 'roles': List[int], ... 'in_guild': bool @@ -260,7 +268,7 @@ class UserViewSet(ModelViewSet): queryset = User.objects.all().order_by("id") pagination_class = UserListPagination filter_backends = (DjangoFilterBackend,) - filterset_fields = ('name', 'discriminator') + filterset_fields = ('name', 'discriminator', 'display_name') def get_serializer(self, *args, **kwargs) -> ModelSerializer: """Set Serializer many attribute to True if request body contains a list.""" -- cgit v1.2.3 From b1dad811eadfc8fc0651eedff8411a61d1bcdd2e Mon Sep 17 00:00:00 2001 From: Joe Banks Date: Mon, 1 Apr 2024 13:34:11 +0100 Subject: Update user tests with display_name field --- pydis_site/apps/api/tests/test_users.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pydis_site/apps/api/tests/test_users.py b/pydis_site/apps/api/tests/test_users.py index cff4a825..5dda6344 100644 --- a/pydis_site/apps/api/tests/test_users.py +++ b/pydis_site/apps/api/tests/test_users.py @@ -61,7 +61,8 @@ class CreationTests(AuthenticatedAPITestCase): url = reverse('api:bot:user-list') data = { 'id': 42, - 'name': "Test", + 'name': "test", + 'display_name': "Test Display", 'discriminator': 42, 'roles': [ self.role.id @@ -75,6 +76,7 @@ class CreationTests(AuthenticatedAPITestCase): user = User.objects.get(id=42) self.assertEqual(user.name, data['name']) + self.assertEqual(user.display_name, data['display_name']) self.assertEqual(user.discriminator, data['discriminator']) self.assertEqual(user.in_guild, data['in_guild']) @@ -83,7 +85,8 @@ class CreationTests(AuthenticatedAPITestCase): data = [ { 'id': 5, - 'name': "test man", + 'name': "testman", + 'display_name': "Test Display 1", 'discriminator': 42, 'roles': [ self.role.id @@ -92,7 +95,8 @@ class CreationTests(AuthenticatedAPITestCase): }, { 'id': 8, - 'name': "another test man", + 'name': "anothertestman", + 'display_name': "Test Display 2", 'discriminator': 555, 'roles': [], 'in_guild': False @@ -200,7 +204,8 @@ class MultiPatchTests(AuthenticatedAPITestCase): data = [ { "id": 1, - "name": "User 1 patched!", + "name": "user1patched", + "display_name": "User 1 Patched", "discriminator": 1010, "roles": [self.role_developer.id], "in_guild": False -- cgit v1.2.3 From 6d256e2e561cb15c764f536e55c57c3b7232ae36 Mon Sep 17 00:00:00 2001 From: Joe Banks Date: Mon, 1 Apr 2024 14:04:03 +0100 Subject: Make pure-SQL line in api_user.display_name migration elidable Co-authored-by: jchristgit --- pydis_site/apps/api/migrations/0095_user_display_name.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pydis_site/apps/api/migrations/0095_user_display_name.py b/pydis_site/apps/api/migrations/0095_user_display_name.py index 82561c40..82381830 100644 --- a/pydis_site/apps/api/migrations/0095_user_display_name.py +++ b/pydis_site/apps/api/migrations/0095_user_display_name.py @@ -14,5 +14,5 @@ class Migration(migrations.Migration): name="display_name", field=models.CharField(blank=True, help_text="The display name, taken from Discord.", max_length=32), ), - migrations.RunSQL("UPDATE api_user SET display_name = name;"), + migrations.RunSQL("UPDATE api_user SET display_name = name;", elidable=True), ] -- cgit v1.2.3