Skip to content

Commit f59e570

Browse files
authored
Remove imports for builtin django User model (#2012)
1 parent d185a7a commit f59e570

File tree

14 files changed

+67
-21
lines changed

14 files changed

+67
-21
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,6 @@ storybook-static/
132132

133133
/**/.yarn/cache
134134
.swc
135+
136+
# ignore local ssl certs
137+
certs/

channels/api.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
"""API for channels"""
22

3-
from django.contrib.auth.models import Group, User
3+
from typing import TYPE_CHECKING
4+
5+
from django.contrib.auth.models import Group
46
from django.db import transaction
57

68
from channels.constants import CHANNEL_ROLE_CHOICES, CHANNEL_ROLE_MODERATORS
79
from channels.models import Channel, ChannelGroupRole
810

11+
if TYPE_CHECKING:
12+
from django.contrib.auth import get_user_model
13+
14+
User = get_user_model()
15+
916

1017
def create_channel_groups_and_roles(
1118
channel: Channel,
@@ -31,14 +38,14 @@ def get_role_model(channel: Channel, role: str) -> ChannelGroupRole:
3138
return ChannelGroupRole.objects.get(channel=channel, role=role)
3239

3340

34-
def add_user_role(channel: Channel, role: str, user: User):
41+
def add_user_role(channel: Channel, role: str, user: "User"):
3542
"""
3643
Add a user to a channel role's group
3744
"""
3845
get_role_model(channel, role).group.user_set.add(user)
3946

4047

41-
def remove_user_role(channel: Channel, role: str, user: User):
48+
def remove_user_role(channel: Channel, role: str, user: "User"):
4249
"""
4350
Remove a user from a channel role's group
4451
"""
@@ -51,7 +58,7 @@ def get_group_role_name(channel_id: int, role: str) -> str:
5158
return f"channel_{channel_name}_{role}"
5259

5360

54-
def is_moderator(user: User, channel_id: int) -> bool:
61+
def is_moderator(user: "User", channel_id: int) -> bool:
5562
"""
5663
Determine if the user is a moderator for a channel (or a staff user)
5764
"""

channels/views.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import logging
44

55
from django.conf import settings
6-
from django.contrib.auth.models import User
6+
from django.contrib.auth import get_user_model
77
from django.db.models import Prefetch
88
from django.utils.decorators import method_decorator
99
from django_filters.rest_framework import DjangoFilterBackend
@@ -169,6 +169,8 @@ def get_queryset(self):
169169
"""
170170
Build a queryset of relevant users with moderator permissions for this channel
171171
"""
172+
User = get_user_model()
173+
172174
channel_group_name = get_group_role_name(
173175
self.kwargs["id"],
174176
CHANNEL_ROLE_MODERATORS,
@@ -190,6 +192,8 @@ class ChannelModeratorDetailView(APIView):
190192

191193
def delete(self, request, *args, **kwargs): # noqa: ARG002
192194
"""Remove the user from the moderator groups for this website"""
195+
User = get_user_model()
196+
193197
user = User.objects.get(username=self.kwargs["moderator_name"])
194198
remove_user_role(
195199
Channel.objects.get(id=self.kwargs["id"]), CHANNEL_ROLE_MODERATORS, user

channels/views_test.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
from math import ceil
66

77
import pytest
8-
from django.contrib.auth.models import Group, User
8+
from django.contrib.auth import get_user_model
9+
from django.contrib.auth.models import Group
910
from django.urls import reverse
1011

1112
from channels.api import add_user_role
@@ -26,6 +27,8 @@
2627

2728
pytestmark = pytest.mark.django_db
2829

30+
User = get_user_model()
31+
2932

3033
def test_list_channels(user_client):
3134
"""Test that all channels are returned"""

learning_resources/management/commands/backpopulate_favorites_lists.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Management command to create user Favorites lists"""
22

3-
from django.contrib.auth.models import User
3+
from django.contrib.auth import get_user_model
44
from django.core.management import BaseCommand
55

66
from learning_resources.constants import FAVORITES_TITLE
@@ -24,6 +24,8 @@ def add_arguments(self, parser):
2424

2525
def handle(self, *args, **options): # noqa: ARG002
2626
"""Create a Favorites userlist for every active user"""
27+
User = get_user_model()
28+
2729
if options["delete"]:
2830
self.stdout.write("Deleting all existing Favorites userlists")
2931
UserList.objects.filter(title=FAVORITES_TITLE).delete()

learning_resources/management/commands/populate_featured_lists.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import sys
44

55
from django.conf import settings
6-
from django.contrib.auth.models import User
6+
from django.contrib.auth import get_user_model
77
from django.core.management import BaseCommand
88

99
from channels.models import Channel
@@ -18,6 +18,8 @@
1818
)
1919
from main.utils import clear_search_cache, now_in_utc
2020

21+
User = get_user_model()
22+
2123

2224
class Command(BaseCommand):
2325
"""create dev-only featured lists for offeror channels"""

learning_resources/models.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import uuid
44
from abc import abstractmethod
55
from functools import cached_property
6-
from typing import Optional
6+
from typing import TYPE_CHECKING, Optional
77

8-
from django.contrib.auth.models import User
8+
from django.conf import settings
99
from django.contrib.postgres.fields import ArrayField
1010
from django.db import models
1111
from django.db.models import CharField, Count, JSONField, OuterRef, Prefetch, Q
@@ -25,6 +25,11 @@
2525
)
2626
from main.models import TimestampedModel, TimestampedModelQuerySet
2727

28+
if TYPE_CHECKING:
29+
from django.contrib.auth import get_user_model
30+
31+
User = get_user_model()
32+
2833

2934
def default_delivery():
3035
"""Return the default delivery as a list"""
@@ -328,7 +333,7 @@ def __str__(self):
328333
class LearningResourceQuerySet(TimestampedModelQuerySet):
329334
"""QuerySet for LearningResource"""
330335

331-
def for_serialization(self, *, user: User | None = None):
336+
def for_serialization(self, *, user: Optional["User"] = None):
332337
"""Return the list of prefetches"""
333338
return (
334339
self.prefetch_related(
@@ -792,7 +797,9 @@ class LearningPath(LearningResourceDetailModel):
792797
on_delete=models.CASCADE,
793798
)
794799
author = models.ForeignKey(
795-
User, related_name="learning_paths", on_delete=models.PROTECT
800+
settings.AUTH_USER_MODEL,
801+
related_name="learning_paths",
802+
on_delete=models.PROTECT,
796803
)
797804

798805
def __str__(self):
@@ -896,7 +903,9 @@ class UserList(TimestampedModel):
896903
"""
897904

898905
author = models.ForeignKey(
899-
User, on_delete=models.deletion.CASCADE, related_name="user_lists"
906+
settings.AUTH_USER_MODEL,
907+
on_delete=models.deletion.CASCADE,
908+
related_name="user_lists",
900909
)
901910
title = models.CharField(max_length=256)
902911
description = models.TextField(default="", blank=True)

learning_resources/serializers.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from decimal import Decimal
55
from uuid import uuid4
66

7-
from django.contrib.auth.models import User
7+
from django.contrib.auth import get_user_model
88
from django.db import transaction
99
from django.db.models import F, Max
1010
from drf_spectacular.utils import extend_schema_field
@@ -845,6 +845,8 @@ def get_item_count(self, instance) -> int:
845845

846846
def create(self, validated_data):
847847
"""Create a new user list"""
848+
User = get_user_model()
849+
848850
request = self.context.get("request")
849851
if request and hasattr(request, "user") and isinstance(request.user, User):
850852
validated_data["author"] = request.user

learning_resources/utils.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
import logging
44
import re
5+
from typing import TYPE_CHECKING
56

67
import rapidjson
78
import requests
89
import yaml
910
from botocore.exceptions import ClientError
1011
from django.conf import settings
11-
from django.contrib.auth.models import Group, User
12+
from django.contrib.auth.models import Group
1213
from django.db import transaction
1314
from django.db.models import Q
1415
from retry import retry
@@ -33,6 +34,11 @@
3334

3435
log = logging.getLogger()
3536

37+
if TYPE_CHECKING:
38+
from django.contrib.auth import get_user_model
39+
40+
User = get_user_model()
41+
3642

3743
def user_list_image_upload_uri(instance, filename):
3844
"""
@@ -229,7 +235,7 @@ def parse_instructors(staff):
229235
return instructors
230236

231237

232-
def update_editor_group(user: User, is_editor: False):
238+
def update_editor_group(user: "User", is_editor: False):
233239
"""Assign or unassign user to staff list editors group"""
234240
group, _ = Group.objects.get_or_create(name=GROUP_STAFF_LISTS_EDITORS)
235241
if is_editor:

main/factories.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"""
44

55
import ulid
6-
from django.contrib.auth.models import Group, User
6+
from django.conf import settings
77
from factory import LazyFunction, RelatedFactory, SubFactory, Trait
88
from factory.django import DjangoModelFactory
99
from factory.fuzzy import FuzzyText
@@ -21,7 +21,7 @@ class UserFactory(DjangoModelFactory):
2121
profile = RelatedFactory("profiles.factories.ProfileFactory", "user")
2222

2323
class Meta:
24-
model = User
24+
model = settings.AUTH_USER_MODEL
2525
skip_postgeneration_save = True
2626

2727
class Params:
@@ -34,7 +34,7 @@ class GroupFactory(DjangoModelFactory):
3434
name = FuzzyText()
3535

3636
class Meta:
37-
model = Group
37+
model = "auth.Group"
3838

3939

4040
class UserSocialAuthFactory(DjangoModelFactory):

0 commit comments

Comments
 (0)