diff options
| -rw-r--r-- | pydis_site/apps/api/migrations/0095_user_display_name.py | 18 | ||||
| -rw-r--r-- | pydis_site/apps/api/models/bot/user.py | 5 | ||||
| -rw-r--r-- | pydis_site/apps/api/serializers.py | 2 | ||||
| -rw-r--r-- | pydis_site/apps/api/tests/test_users.py | 13 | ||||
| -rw-r--r-- | pydis_site/apps/api/viewsets/bot/user.py | 14 | 
5 files changed, 44 insertions, 8 deletions
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..82381830 --- /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;", elidable=True), +    ] 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( 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 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 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."""  |