1010from src .environment import Environment
1111from src .errors import StudentRecordError
1212from src .gradescope import Gradescope
13+ from src .pensieve import Pensieve
1314from src .sheets import Sheet
14- from src .utils import cast_bool
15-
16- import json
15+ from src .utils import cast_bool
1716
1817APPROVAL_STATUS_REQUESTED_MEETING = "Requested Meeting"
1918APPROVAL_STATUS_PENDING = "Pending"
@@ -101,7 +100,16 @@ def set_flush_gradescope_status_success(self):
101100 if "flush_gradescope" in self .sheet .get_headers ():
102101 self .queue_write_back (col_key = "flush_gradescope" , col_value = False )
103102
104- def count_requests (self , assignments = AssignmentList ):
103+ def should_flush_pensieve (self ):
104+ if "flush_pensieve" in self .sheet .get_headers ():
105+ return cast_bool (self .table_record ["flush_pensieve" ])
106+ return False
107+
108+ def set_flush_pensieve_status_success (self ):
109+ if "flush_pensieve" in self .sheet .get_headers ():
110+ self .queue_write_back (col_key = "flush_pensieve" , col_value = False )
111+
112+ def count_requests (self , assignments : AssignmentList ) -> int :
105113 count = 0
106114 for assignment_id in assignments .get_all_ids ():
107115 if self .get_request (assignment_id = assignment_id ) is not None :
@@ -141,7 +149,7 @@ def flush(self):
141149 if self .table_index == - 1 :
142150 values = [self .write_queue .get (header ) for header in headers ]
143151 # minus 1 to account for header row
144- self .table_index = self .sheet .num_entries - 1
152+ self .table_index = self .sheet .num_entries - 1
145153 self .sheet .append_row (values = values , value_input_option = "USER_ENTERED" )
146154
147155 # Update local table_record object for email.
@@ -164,7 +172,7 @@ def apply_extensions(self, assignments: AssignmentList, gradescope: Gradescope)
164172 warnings = []
165173 for assignment in assignments :
166174 num_days = self .get_request (assignment_id = assignment .get_id ())
167- course_name = Environment .safe_get ( "COURSE_NAME" , "" )
175+ course_name = Environment .get_course_name ( )
168176
169177 if num_days :
170178
@@ -193,6 +201,40 @@ def apply_extensions(self, assignments: AssignmentList, gradescope: Gradescope)
193201
194202 return warnings
195203
204+ def apply_extensions_pensieve (self , assignments : AssignmentList , pensieve : Pensieve ) -> List [str ]:
205+
206+ warnings = []
207+ for assignment in assignments :
208+ num_days = self .get_request (assignment_id = assignment .get_id ())
209+ course_name = Environment .get_course_name ()
210+
211+ if num_days :
212+
213+ if len (assignment .get_pensieve_assignment_urls ()) == 0 :
214+ print (
215+ "[{}{}] could not extend assignment deadline for {} (assignment URL's not set)." .format (
216+ course_name + " " , assignment .get_name (), self .get_email ()))
217+ continue
218+
219+ elif not assignment .get_due_date ():
220+ warnings .append (
221+ "[{} {}] could not extend assignment deadline for {} (deadline not set)." .format (
222+ course_name + " " , assignment .get_name (), self .get_email ()))
223+ continue
224+
225+ else :
226+ print ("Extending assignments (Pensieve): [{}{}] {}" .format (
227+ course_name + " " , assignment .get_name (), str (assignment .get_pensieve_assignment_urls ())))
228+ pensieve_warnings = pensieve .apply_extension (
229+ assignment_name = assignment .get_name (),
230+ assignment_urls = assignment .get_pensieve_assignment_urls (),
231+ email = self .get_email (),
232+ num_days = num_days ,
233+ )
234+ warnings .extend (pensieve_warnings )
235+
236+ return warnings
237+
196238 @staticmethod
197239 def from_email (email : str , sheet_records : Sheet ) -> StudentRecord :
198240 email = email .lower ()
0 commit comments