-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathmember.py
77 lines (61 loc) · 2.07 KB
/
member.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
"""
Scripts to manage users.
"""
from typing import Optional, Sequence
from sqlalchemy.orm import Session
from srcf.database.schema import Member
from .utils import confirm, entrypoint
from ..email import send, SYSADMINS
from ..tasks import membership
@entrypoint
def passwd(member: Member):
"""
Reset a user's SRCF password.
Usage: {script} MEMBER
"""
confirm("Reset {}'s password?".format(member.crsid))
if membership.reset_password(member):
send(SYSADMINS, "scripts/member_passwd.j2", {"member": member})
@entrypoint
def cancel(sess: Session, members: Sequence[Member], unset_member: bool, keep_contactable: bool):
"""
Cancel a user account.
Usage: {script} MEMBERS... [--unset-member] [--keep-contactable]
"""
if len(members) > 1:
print("Cancelling:")
for member in members:
print("- {}".format(member.name))
confirm("Cancel {} members?".format(len(members)))
else:
confirm("Cancel {}?".format(members[0].name))
is_member = False if unset_member else None
is_contactable = None if keep_contactable else False
for member in members:
membership.cancel_member(sess, member, is_member, is_contactable)
@entrypoint
def reactivate(sess: Session, member: Member, email: Optional[str]):
"""
Reinstate a user account.
Usage: {script} MEMBER [EMAIL]
"""
if not email:
email = member.email
print("Keeping existing email address: {}".format(email))
confirm("Reactivate {}?".format(member.name))
membership.reactivate_member(sess, member, email)
@entrypoint
def delete(sess: Session, members: Sequence[Member]):
"""
Delete all traces of a member's user account and membership.
Usage: {script} MEMBERS...
"""
if len(members) > 1:
print("Erasing:")
for member in members:
print("- {}".format(member.name))
confirm("Erase {} members?".format(len(members)))
else:
confirm("Erase {}?".format(members[0].name))
for member in members:
membership.delete_member(sess, member)