5
5
import sys
6
6
7
7
from secrets import token_hex
8
- from datetime import datetime , time , timedelta
8
+ from datetime import datetime , time
9
9
import csv
10
10
import click
11
11
12
- from packet .mail import send_start_packet_mail
13
- from packet .notifications import packet_starting_notification , packets_starting_notification
14
12
from . 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
13
+ from .models import Packet , FreshSignature , UpperSignature , MiscSignature
14
+ from .utils import sync_freshman , create_new_packets , sync_with_ldap
19
15
20
16
21
17
@app .cli .command ('create-secret' )
@@ -66,40 +62,7 @@ def sync_freshmen(freshmen_csv):
66
62
freshmen_in_csv = parse_csv (freshmen_csv )
67
63
68
64
print ('Syncing contents with the DB...' )
69
- freshmen_in_db = {freshman .rit_username : freshman for freshman in Freshman .query .all ()}
70
-
71
- for csv_freshman in freshmen_in_csv .values ():
72
- if csv_freshman .rit_username not in freshmen_in_db :
73
- # This is a new freshman so add them to the DB
74
- freshmen_in_db [csv_freshman .rit_username ] = Freshman (rit_username = csv_freshman .rit_username ,
75
- name = csv_freshman .name , onfloor = csv_freshman .onfloor )
76
- db .session .add (freshmen_in_db [csv_freshman .rit_username ])
77
- else :
78
- # This freshman is already in the DB so just update them
79
- freshmen_in_db [csv_freshman .rit_username ].onfloor = csv_freshman .onfloor
80
- freshmen_in_db [csv_freshman .rit_username ].name = csv_freshman .name
81
-
82
- # Update all freshmen entries that represent people who are no longer freshmen
83
- for freshman in filter (lambda freshman : freshman .rit_username not in freshmen_in_csv , freshmen_in_db .values ()):
84
- freshman .onfloor = False
85
-
86
- # Update the freshmen signatures of each open or future packet
87
- for packet in Packet .query .filter (Packet .end > datetime .now ()).all ():
88
- # Handle the freshmen that are no longer onfloor
89
- for fresh_sig in filter (lambda fresh_sig : not fresh_sig .freshman .onfloor , packet .fresh_signatures ):
90
- FreshSignature .query .filter_by (packet_id = fresh_sig .packet_id ,
91
- freshman_username = fresh_sig .freshman_username ).delete ()
92
-
93
- # Add any new onfloor freshmen
94
- # pylint: disable=cell-var-from-loop
95
- current_fresh_sigs = set (map (lambda fresh_sig : fresh_sig .freshman_username , packet .fresh_signatures ))
96
- for csv_freshman in filter (lambda csv_freshman : csv_freshman .rit_username not in current_fresh_sigs and
97
- csv_freshman .onfloor and
98
- csv_freshman .rit_username != packet .freshman_username ,
99
- freshmen_in_csv .values ()):
100
- db .session .add (FreshSignature (packet = packet , freshman = freshmen_in_db [csv_freshman .rit_username ]))
101
-
102
- db .session .commit ()
65
+ sync_freshman (freshmen_in_csv )
103
66
print ('Done!' )
104
67
105
68
@@ -115,46 +78,8 @@ def create_packets(freshmen_csv):
115
78
116
79
# Collect the necessary data
117
80
base_date = input_date ('Input the first day of packet season' )
118
- start = datetime .combine (base_date , packet_start_time )
119
- end = datetime .combine (base_date , packet_end_time ) + timedelta (days = 14 )
120
-
121
- print ('Fetching data from LDAP...' )
122
- all_upper = list (filter (
123
- lambda member : not ldap_is_intromember (member ) and not ldap_is_on_coop (member ), ldap_get_active_members ()))
124
-
125
- rtp = ldap_get_active_rtps ()
126
- three_da = ldap_get_3das ()
127
- webmaster = ldap_get_webmasters ()
128
- c_m = ldap_get_constitutional_maintainers ()
129
- drink = ldap_get_drink_admins ()
130
-
131
- # Packet starting notifications
132
- packets_starting_notification (start )
133
-
134
- # Create the new packets and the signatures for each freshman in the given CSV
135
81
freshmen_in_csv = parse_csv (freshmen_csv )
136
- print ('Creating DB entries and sending emails...' )
137
- for freshman in Freshman .query .filter (Freshman .rit_username .in_ (freshmen_in_csv )).all ():
138
- packet = Packet (freshman = freshman , start = start , end = end )
139
- db .session .add (packet )
140
- send_start_packet_mail (packet )
141
- packet_starting_notification (packet )
142
-
143
- for member in all_upper :
144
- sig = UpperSignature (packet = packet , member = member .uid )
145
- sig .eboard = ldap_get_eboard_role (member )
146
- sig .active_rtp = member .uid in rtp
147
- sig .three_da = member .uid in three_da
148
- sig .webmaster = member .uid in webmaster
149
- sig .c_m = member .uid in c_m
150
- sig .drink_admin = member .uid in drink
151
- db .session .add (sig )
152
-
153
- for onfloor_freshman in Freshman .query .filter_by (onfloor = True ).filter (Freshman .rit_username !=
154
- freshman .rit_username ).all ():
155
- db .session .add (FreshSignature (packet = packet , freshman = onfloor_freshman ))
156
-
157
- db .session .commit ()
82
+ create_new_packets (base_date , freshmen_in_csv )
158
83
print ('Done!' )
159
84
160
85
@@ -163,60 +88,7 @@ def ldap_sync():
163
88
"""
164
89
Updates the upper and misc sigs in the DB to match ldap.
165
90
"""
166
- print ('Fetching data from LDAP...' )
167
- all_upper = {member .uid : member for member in filter (
168
- lambda member : not ldap_is_intromember (member ) and not ldap_is_on_coop (member ), ldap_get_active_members ())}
169
-
170
- rtp = ldap_get_active_rtps ()
171
- three_da = ldap_get_3das ()
172
- webmaster = ldap_get_webmasters ()
173
- c_m = ldap_get_constitutional_maintainers ()
174
- drink = ldap_get_drink_admins ()
175
-
176
- print ('Applying updates to the DB...' )
177
- for packet in Packet .query .filter (Packet .end > datetime .now ()).all ():
178
- # Update the role state of all UpperSignatures
179
- for sig in filter (lambda sig : sig .member in all_upper , packet .upper_signatures ):
180
- sig .eboard = ldap_get_eboard_role (all_upper [sig .member ])
181
- sig .active_rtp = sig .member in rtp
182
- sig .three_da = sig .member in three_da
183
- sig .webmaster = sig .member in webmaster
184
- sig .c_m = sig .member in c_m
185
- sig .drink_admin = sig .member in drink
186
-
187
- # Migrate UpperSignatures that are from accounts that are not active anymore
188
- for sig in filter (lambda sig : sig .member not in all_upper , packet .upper_signatures ):
189
- UpperSignature .query .filter_by (packet_id = packet .id , member = sig .member ).delete ()
190
- if sig .signed :
191
- sig = MiscSignature (packet = packet , member = sig .member )
192
- db .session .add (sig )
193
-
194
- # Migrate MiscSignatures that are from accounts that are now active members
195
- for sig in filter (lambda sig : sig .member in all_upper , packet .misc_signatures ):
196
- MiscSignature .query .filter_by (packet_id = packet .id , member = sig .member ).delete ()
197
- sig = UpperSignature (packet = packet , member = sig .member , signed = True )
198
- sig .eboard = ldap_get_eboard_role (all_upper [sig .member ])
199
- sig .active_rtp = sig .member in rtp
200
- sig .three_da = sig .member in three_da
201
- sig .webmaster = sig .member in webmaster
202
- sig .c_m = sig .member in c_m
203
- sig .drink_admin = sig .member in drink
204
- db .session .add (sig )
205
-
206
- # Create UpperSignatures for any new active members
207
- # pylint: disable=cell-var-from-loop
208
- upper_sigs = set (map (lambda sig : sig .member , packet .upper_signatures ))
209
- for member in filter (lambda member : member not in upper_sigs , all_upper ):
210
- sig = UpperSignature (packet = packet , member = member )
211
- sig .eboard = ldap_get_eboard_role (all_upper [sig .member ])
212
- sig .active_rtp = sig .member in rtp
213
- sig .three_da = sig .member in three_da
214
- sig .webmaster = sig .member in webmaster
215
- sig .c_m = sig .member in c_m
216
- sig .drink_admin = sig .member in drink
217
- db .session .add (sig )
218
-
219
- db .session .commit ()
91
+ sync_with_ldap ()
220
92
print ('Done!' )
221
93
222
94
0 commit comments