Skip to content

Commit b9b51b0

Browse files
committed
Allow creating multiple packets
1 parent e01e15c commit b9b51b0

File tree

1 file changed

+38
-26
lines changed

1 file changed

+38
-26
lines changed

packet/routes/api.py

Lines changed: 38 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -78,15 +78,18 @@ def sync_freshman():
7878
return dumps(results), 200
7979

8080

81-
@app.route('/api/v1/packet', methods=['POST'])
81+
@app.route('/api/v1/packets', methods=['POST'])
8282
@packet_auth
8383
def create_packet():
8484
"""
8585
Create a new packet.
8686
87-
Body parameters:
88-
- start_date: the start date of the packet in MM/DD/YYYY format
89-
- freshman: the RIT username of the freshman for whom to create a packet
87+
Body parameters: {
88+
start_date: the start date of the packets in MM/DD/YYYY format
89+
freshmen: [
90+
rit_username: string
91+
]
92+
}
9093
"""
9194

9295
# Only allow evals to create new packets
@@ -95,11 +98,13 @@ def create_packet():
9598
return 'Forbidden: not Evaluations Director', 403
9699

97100
base_date = datetime.strptime(request.json['start_date'], '%m/%d/%Y').date()
98-
frosh_rit_username = request.json['freshman']
99101

100102
start = datetime.combine(base_date, packet_start_time)
101103
end = datetime.combine(base_date, packet_end_time) + timedelta(days=14)
102104

105+
frosh = request.json['freshmen']
106+
results = list()
107+
103108
# Gather upperclassmen data from LDAP
104109
all_upper = list(filter(
105110
lambda member: not ldap_is_intromember(member) and not ldap_is_on_coop(member), ldap_get_active_members()))
@@ -113,30 +118,37 @@ def create_packet():
113118
# Packet starting notifications
114119
packets_starting_notification(start)
115120

116-
# Create the packet and signatures
117-
freshman = Freshman.query.filter_by(rit_username=frosh_rit_username).first()
118-
packet = Packet(freshman=freshman, start=start, end=end)
119-
db.session.add(packet)
120-
send_start_packet_mail(packet)
121-
packet_starting_notification(packet)
122-
123-
for member in all_upper:
124-
sig = UpperSignature(packet=packet, member=member.uid)
125-
sig.eboard = ldap_get_eboard_role(member)
126-
sig.active_rtp = member.uid in rtp
127-
sig.three_da = member.uid in three_da
128-
sig.webmaster = member.uid in webmaster
129-
sig.c_m = member.uid in c_m
130-
sig.drink_admin = member.uid in drink
131-
db.session.add(sig)
132-
133-
for onfloor_freshman in Freshman.query.filter_by(onfloor=True).filter(Freshman.rit_username !=
134-
freshman.rit_username).all():
135-
db.session.add(FreshSignature(packet=packet, freshman=onfloor_freshman))
121+
for frosh_rit_username in frosh:
122+
# Create the packet and signatures
123+
freshman = Freshman.query.filter_by(rit_username=frosh_rit_username).first()
124+
if freshman is None:
125+
results.append(f"Freshman '{frosh_rit_username}' not found")
126+
continue
127+
128+
packet = Packet(freshman=freshman, start=start, end=end)
129+
db.session.add(packet)
130+
send_start_packet_mail(packet)
131+
packet_starting_notification(packet)
132+
133+
for member in all_upper:
134+
sig = UpperSignature(packet=packet, member=member.uid)
135+
sig.eboard = ldap_get_eboard_role(member)
136+
sig.active_rtp = member.uid in rtp
137+
sig.three_da = member.uid in three_da
138+
sig.webmaster = member.uid in webmaster
139+
sig.c_m = member.uid in c_m
140+
sig.drink_admin = member.uid in drink
141+
db.session.add(sig)
142+
143+
for onfloor_freshman in Freshman.query.filter_by(onfloor=True).filter(Freshman.rit_username !=
144+
freshman.rit_username).all():
145+
db.session.add(FreshSignature(packet=packet, freshman=onfloor_freshman))
146+
147+
results.append(f'Packet created for {frosh_rit_username}')
136148

137149
db.session.commit()
138150

139-
return f'Packet created for {frosh_rit_username}', 201
151+
return dumps(results), 201
140152

141153

142154
@app.route('/api/v1/packets/<username>', methods=['GET'])

0 commit comments

Comments
 (0)