55import sys
66
77from secrets import token_hex
8- from datetime import datetime , time , timedelta
8+ from datetime import datetime , time
99import csv
1010import click
1111
12- from packet .mail import send_start_packet_mail
13- from packet .notifications import packet_starting_notification , packets_starting_notification
1412from . import app , db
15- from .models import Freshman , Packet , FreshSignature , UpperSignature , MiscSignature
16- from .ldap import ldap_get_eboard_role , ldap_get_active_rtps , ldap_get_3das , ldap_get_webmasters , \
17- ldap_get_drink_admins , ldap_get_constitutional_maintainers , ldap_is_intromember , ldap_get_active_members , \
18- ldap_is_on_coop
19- from .utils import sync_freshman
13+ from .models import Packet , FreshSignature , UpperSignature , MiscSignature
14+ from .utils import sync_freshman , create_new_packets , sync_with_ldap
2015
2116
2217@app .cli .command ('create-secret' )
@@ -83,46 +78,8 @@ def create_packets(freshmen_csv):
8378
8479 # Collect the necessary data
8580 base_date = input_date ('Input the first day of packet season' )
86- start = datetime .combine (base_date , packet_start_time )
87- end = datetime .combine (base_date , packet_end_time ) + timedelta (days = 14 )
88-
89- print ('Fetching data from LDAP...' )
90- all_upper = list (filter (
91- lambda member : not ldap_is_intromember (member ) and not ldap_is_on_coop (member ), ldap_get_active_members ()))
92-
93- rtp = ldap_get_active_rtps ()
94- three_da = ldap_get_3das ()
95- webmaster = ldap_get_webmasters ()
96- c_m = ldap_get_constitutional_maintainers ()
97- drink = ldap_get_drink_admins ()
98-
99- # Packet starting notifications
100- packets_starting_notification (start )
101-
102- # Create the new packets and the signatures for each freshman in the given CSV
10381 freshmen_in_csv = parse_csv (freshmen_csv )
104- print ('Creating DB entries and sending emails...' )
105- for freshman in Freshman .query .filter (Freshman .rit_username .in_ (freshmen_in_csv )).all ():
106- packet = Packet (freshman = freshman , start = start , end = end )
107- db .session .add (packet )
108- send_start_packet_mail (packet )
109- packet_starting_notification (packet )
110-
111- for member in all_upper :
112- sig = UpperSignature (packet = packet , member = member .uid )
113- sig .eboard = ldap_get_eboard_role (member )
114- sig .active_rtp = member .uid in rtp
115- sig .three_da = member .uid in three_da
116- sig .webmaster = member .uid in webmaster
117- sig .c_m = member .uid in c_m
118- sig .drink_admin = member .uid in drink
119- db .session .add (sig )
120-
121- for onfloor_freshman in Freshman .query .filter_by (onfloor = True ).filter (Freshman .rit_username !=
122- freshman .rit_username ).all ():
123- db .session .add (FreshSignature (packet = packet , freshman = onfloor_freshman ))
124-
125- db .session .commit ()
82+ create_new_packets (base_date , freshmen_in_csv )
12683 print ('Done!' )
12784
12885
@@ -131,60 +88,7 @@ def ldap_sync():
13188 """
13289 Updates the upper and misc sigs in the DB to match ldap.
13390 """
134- print ('Fetching data from LDAP...' )
135- all_upper = {member .uid : member for member in filter (
136- lambda member : not ldap_is_intromember (member ) and not ldap_is_on_coop (member ), ldap_get_active_members ())}
137-
138- rtp = ldap_get_active_rtps ()
139- three_da = ldap_get_3das ()
140- webmaster = ldap_get_webmasters ()
141- c_m = ldap_get_constitutional_maintainers ()
142- drink = ldap_get_drink_admins ()
143-
144- print ('Applying updates to the DB...' )
145- for packet in Packet .query .filter (Packet .end > datetime .now ()).all ():
146- # Update the role state of all UpperSignatures
147- for sig in filter (lambda sig : sig .member in all_upper , packet .upper_signatures ):
148- sig .eboard = ldap_get_eboard_role (all_upper [sig .member ])
149- sig .active_rtp = sig .member in rtp
150- sig .three_da = sig .member in three_da
151- sig .webmaster = sig .member in webmaster
152- sig .c_m = sig .member in c_m
153- sig .drink_admin = sig .member in drink
154-
155- # Migrate UpperSignatures that are from accounts that are not active anymore
156- for sig in filter (lambda sig : sig .member not in all_upper , packet .upper_signatures ):
157- UpperSignature .query .filter_by (packet_id = packet .id , member = sig .member ).delete ()
158- if sig .signed :
159- sig = MiscSignature (packet = packet , member = sig .member )
160- db .session .add (sig )
161-
162- # Migrate MiscSignatures that are from accounts that are now active members
163- for sig in filter (lambda sig : sig .member in all_upper , packet .misc_signatures ):
164- MiscSignature .query .filter_by (packet_id = packet .id , member = sig .member ).delete ()
165- sig = UpperSignature (packet = packet , member = sig .member , signed = True )
166- sig .eboard = ldap_get_eboard_role (all_upper [sig .member ])
167- sig .active_rtp = sig .member in rtp
168- sig .three_da = sig .member in three_da
169- sig .webmaster = sig .member in webmaster
170- sig .c_m = sig .member in c_m
171- sig .drink_admin = sig .member in drink
172- db .session .add (sig )
173-
174- # Create UpperSignatures for any new active members
175- # pylint: disable=cell-var-from-loop
176- upper_sigs = set (map (lambda sig : sig .member , packet .upper_signatures ))
177- for member in filter (lambda member : member not in upper_sigs , all_upper ):
178- sig = UpperSignature (packet = packet , member = member )
179- sig .eboard = ldap_get_eboard_role (all_upper [sig .member ])
180- sig .active_rtp = sig .member in rtp
181- sig .three_da = sig .member in three_da
182- sig .webmaster = sig .member in webmaster
183- sig .c_m = sig .member in c_m
184- sig .drink_admin = sig .member in drink
185- db .session .add (sig )
186-
187- db .session .commit ()
91+ sync_with_ldap ()
18892 print ('Done!' )
18993
19094
0 commit comments