Skip to content

Commit af223df

Browse files
authored
Add management command for adding labs users (#362)
1 parent 639b94b commit af223df

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
from django.contrib.auth import get_user_model
2+
from django.core.management.base import BaseCommand, CommandError
3+
4+
from gsr_booking.api_wrapper import WhartonGSRBooker
5+
from gsr_booking.models import Group, GroupMembership
6+
7+
8+
User = get_user_model()
9+
10+
11+
class Command(BaseCommand):
12+
help = (
13+
"Add users to the Penn Labs group as regular members. Checks Wharton status automatically."
14+
)
15+
16+
def handle(self, *args, **options):
17+
try:
18+
group = Group.objects.get(name="Penn Labs")
19+
except Group.DoesNotExist:
20+
raise CommandError('Group "Penn Labs" does not exist!')
21+
22+
users = []
23+
wharton_statuses = []
24+
25+
input_count = int(input("How many users would you like to add? "))
26+
if input_count <= 0:
27+
self.stdout.write("No users to add. Exiting.")
28+
return
29+
30+
for _ in range(input_count):
31+
pennkey = input("Enter the PennKey of the user to add: ").strip()
32+
try:
33+
user = User.objects.get(username=pennkey)
34+
except User.DoesNotExist:
35+
self.stdout.write(f"User with PennKey {pennkey} does not exist. Skipping.")
36+
continue
37+
users.append(user)
38+
is_wharton = WhartonGSRBooker.is_wharton(user)
39+
wharton_statuses.append(is_wharton)
40+
41+
# confirm with the admin before proceeding
42+
self.stdout.write("The following users will be added to the Penn Labs group:")
43+
for user, is_wharton in zip(users, wharton_statuses):
44+
status = "Wharton" if is_wharton else "Regular"
45+
self.stdout.write(f"- {user.username} ({status})")
46+
confirm = input("Type 'yes' to confirm and proceed: ").strip().lower()
47+
if confirm != "yes":
48+
self.stdout.write("Aborted.")
49+
return
50+
for user, is_wharton in zip(users, wharton_statuses):
51+
membership, created = GroupMembership.objects.get_or_create(
52+
user=user,
53+
group=group,
54+
defaults={
55+
"type": GroupMembership.MEMBER,
56+
"accepted": True,
57+
"pennkey_allow": True,
58+
"is_wharton": is_wharton,
59+
},
60+
)
61+
if not created:
62+
# Update existing membership to ensure it has correct settings
63+
membership.type = GroupMembership.MEMBER
64+
membership.accepted = True
65+
membership.pennkey_allow = True
66+
membership.is_wharton = is_wharton
67+
membership.save()
68+
self.stdout.write(f"Updated existing membership for {user.username}")
69+
else:
70+
self.stdout.write(f"Created new membership for {user.username}")

0 commit comments

Comments
 (0)