Skip to content

Commit

Permalink
Merge pull request #1284 from python-discord/jb3/api-user-display-name
Browse files Browse the repository at this point in the history
Add display name to API user model
  • Loading branch information
jb3 committed Apr 1, 2024
2 parents 5d4e729 + 6d256e2 commit 4508aca
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 8 deletions.
18 changes: 18 additions & 0 deletions 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),
]
5 changes: 5 additions & 0 deletions pydis_site/apps/api/models/bot/user.py
Expand Up @@ -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(
Expand Down
2 changes: 1 addition & 1 deletion pydis_site/apps/api/serializers.py
Expand Up @@ -673,7 +673,7 @@ class Meta:
"""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

Expand Down
13 changes: 9 additions & 4 deletions pydis_site/apps/api/tests/test_users.py
Expand Up @@ -61,7 +61,8 @@ def test_accepts_valid_data(self):
url = reverse('api:bot:user-list')
data = {
'id': 42,
'name': "Test",
'name': "test",
'display_name': "Test Display",
'discriminator': 42,
'roles': [
self.role.id
Expand All @@ -75,6 +76,7 @@ def test_accepts_valid_data(self):

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'])

Expand All @@ -83,7 +85,8 @@ def test_supports_multi_creation(self):
data = [
{
'id': 5,
'name': "test man",
'name': "testman",
'display_name': "Test Display 1",
'discriminator': 42,
'roles': [
self.role.id
Expand All @@ -92,7 +95,8 @@ def test_supports_multi_creation(self):
},
{
'id': 8,
'name': "another test man",
'name': "anothertestman",
'display_name': "Test Display 2",
'discriminator': 555,
'roles': [],
'in_guild': False
Expand Down Expand Up @@ -200,7 +204,8 @@ def test_multiple_users_patch(self):
data = [
{
"id": 1,
"name": "User 1 patched!",
"name": "user1patched",
"display_name": "User 1 Patched",
"discriminator": 1010,
"roles": [self.role_developer.id],
"in_guild": False
Expand Down
14 changes: 11 additions & 3 deletions pydis_site/apps/api/viewsets/bot/user.py
Expand Up @@ -64,7 +64,8 @@ class UserViewSet(ModelViewSet):
... 'results': [
... {
... 'id': 409107086526644234,
... 'name': "Python",
... 'name': "python",
... 'display_name': "Python",
... 'discriminator': 4329,
... 'roles': [
... 352427296948486144,
Expand All @@ -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
Expand All @@ -92,7 +94,8 @@ class UserViewSet(ModelViewSet):
#### Response format
>>> {
... 'id': 409107086526644234,
... 'name': "Python",
... 'name': "python",
... 'display_name': "Python",
... 'discriminator': 4329,
... 'roles': [
... 352427296948486144,
Expand Down Expand Up @@ -170,6 +173,7 @@ class UserViewSet(ModelViewSet):
>>> {
... 'id': int,
... 'name': str,
... 'display_name': str,
... 'discriminator': int,
... 'roles': List[int],
... 'in_guild': bool
Expand All @@ -192,6 +196,7 @@ class UserViewSet(ModelViewSet):
>>> {
... 'id': int,
... 'name': str,
... 'display_name': str,
... 'discriminator': int,
... 'roles': List[int],
... 'in_guild': bool
Expand All @@ -210,6 +215,7 @@ class UserViewSet(ModelViewSet):
>>> {
... 'id': int,
... 'name': str,
... 'display_name': str,
... 'discriminator': int,
... 'roles': List[int],
... 'in_guild': bool
Expand All @@ -229,13 +235,15 @@ class UserViewSet(ModelViewSet):
... {
... 'id': int,
... 'name': str,
... 'display_name': str,
... 'discriminator': int,
... 'roles': List[int],
... 'in_guild': bool
... },
... {
... 'id': int,
... 'name': str,
... 'display_name': str,
... 'discriminator': int,
... 'roles': List[int],
... 'in_guild': bool
Expand All @@ -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."""
Expand Down

0 comments on commit 4508aca

Please sign in to comment.