def get(self): # pass map of quarter DB representations (ints) to string representation quarter = self.request.get('quarter') # try grabbing quarter/year from URL year = self.request.get('year') if not quarter or not year: # if they don't exist, try grabbing from session temp = get_sess_vals(self.session, 'quarter', 'year') if not temp: # if they don't exist there, redirect with error return self.redirect('/admin?message=Please set a current quarter and year') quarter,year = temp quarter,year = int(quarter), int(year) view = self.request.get('view') # check URL for 'view by' options (lab vs class) view = view if view else 'class' if view == 'class': students = StudentModel.get_students_by_active_status(quarter, year).fetch() else: students = StudentModel.get_students_by_lab(quarter, year, int(view)).fetch() current_assign = AssignmentModel.get_active_assign_with_latest_fade_in_date(quarter, year) current_num = 1 if not current_assign else current_assign.number template = JINJA_ENV.get_template('/templates/admin_add_solo_partnership.html') template_values = { 'students': sorted(students, key=lambda x: x.last_name), 'view': str(view), 'quarter': quarter, 'year': year, 'user': users.get_current_user(), 'sign_out': users.create_logout_url('/'), 'current_num': current_num, 'num_labs': SettingModel.num_labs() if SettingModel.num_labs() else 1, } return self.response.write(template.render(template_values))
def get(self): # pass map of quarter DB representations (ints) to string representation # TODO: # quarters should not be hardcoded quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'} quarter = self.request.get( 'quarter') # try grabbing quarter/year from URL year = self.request.get('year') assign_num = self.request.get( 'assign_num') # try grabbing assignment number from URL if not quarter or not year: # if they don't exist, try grabbing from session temp = get_sess_vals(self.session, 'quarter', 'year') if not temp: # if they don't exist there, redirect with error return self.redirect( '/admin?message=Please set a current quarter and year') quarter, year = temp quarter, year = int(quarter), int(year) current_assignment = AssignmentModel.get_active_assign_with_latest_fade_in_date( quarter, year) if current_assignment and not assign_num: assign_num = current_assignment.number assign_num = int( assign_num ) if assign_num else 1 # (to avoid errors if there are no assignments in the DB last_num = AssignmentModel.get_assign_n(quarter, year, -1) last_num = last_num.number if last_num else assign_num # (to avoid errors if there are no assignments in the DB) first_assign = AssignmentModel.get_assign_n(quarter, year, 0) first_num = 0 if not first_assign else first_assign.number evals = EvalModel.get_all_evals_for_assign( quarter, year, assign_num) # grab evals for assignment... solo_partners = PartnershipModel.get_solo_partnerships_by_assign( quarter, year, assign_num ) # ...and grab endorsed solos (they're exempt from evals) template_values = { 'user': users.get_current_user(), 'sign_out': users.create_logout_url('/'), 'quarter': quarter, 'quarter_name': quarter_map[quarter], 'year': year, 'assign_num': assign_num, 'message': self.request.get('message'), 'evals': evals, 'solos': solo_partners, 'first_num': first_num, 'last_num': last_num, } template = JINJA_ENV.get_template('/templates/admin_evals_view.html') return self.response.write(template.render(template_values))
def get(self): template = JINJA_ENV.get_template('/templates/partner_invitation_history.html') quarter = SettingModel.quarter() year = SettingModel.year() user = users.get_current_user() student = StudentModel.get_student_by_email(quarter, year, user.email()) # redirect to main page if student doesn't exist if not student: return self.redirect('/partner') invites = InvitationModel.get_all_invitations_involving_student(student).order(Invitation.assignment_number).fetch() current_assignment = AssignmentModel.get_active_assign_with_latest_fade_in_date(quarter, year) # if there are no assignments for this quarter, render early to avoid errors if not current_assignment: return self.response.write(template.render({'user': user, 'sign_out': users.create_logout_url('/')})) partners = PartnershipModel.get_active_partner_history_for_student(student, quarter, year) current_partner = PartnershipModel.get_partner_from_partner_history_by_assign(student, partners, current_assignment.number) active_range = set([a.number for a in AssignmentModel.get_active_assigns(quarter, year)]) invite_info = {} # dict for custom ordering of invite info fields ordering = {'Assign Num': 0, 'Who': 1, 'To/From': 2, 'Accepted': 3, 'Active': 4} for invite in invites: # organize invite info by time i = (invite.created - timedelta(hours=7)).strftime('%m-%d-%Y %H:%M:%S') invite_info[i] = {} invite_info[i]['Assign Num'] = invite.assignment_number # determine wheather invite was sent or received in relation to the user invite_info[i]['To/From'] = 'Sent' if invite.invitor == student.key else 'Received' who_key = invite.invitee if invite_info[i]['To/From'] == 'Sent' else invite.invitor who = who_key.get() # add invitor/invitee (depending on 'Sent'/'Received') to invite info invite_info[i]['Who'] = str(who.last_name) + ', ' + str(who.first_name) + ' - ' + str(who.ucinetid) invite_info[i]['Accepted'] = str(invite.accepted) invite_info[i]['Active'] = str(invite.active) invite_info[i]['key'] = invite.key.urlsafe() template_values = { 'invites': sorted(invite_info.items(), reverse=True), 'fields': sorted(ordering.items(), key=lambda x: x[1]), 'user': user, 'sign_out': users.create_logout_url('/'), 'active_range': active_range, } return self.response.write(template.render(template_values))
def get(self): user = users.get_current_user() quarter = SettingModel.quarter() year = SettingModel.year() # grab message from URL, if it exists message = self.request.get('message') if (not quarter or not year) and not message: message = 'Please set a current year and quarter' template_values = { 'message': message, 'user': user, 'sign_out': users.create_logout_url('/'), 'quarter': quarter, 'year': year, } self.session['quarter'] = quarter self.session['year'] = year if quarter and year: template_values['active_students'] = len( StudentModel.get_students_by_active_status(quarter, year).fetch()) template_values['inactive_students'] = len( StudentModel.get_students_by_active_status( quarter, year, active=False).fetch()) cur_assign = AssignmentModel.get_active_assign_with_latest_fade_in_date( quarter, year) if cur_assign: template_values['cur_assign'] = cur_assign # grab number of active partnerships for the current assignment template_values['assign_partners'] = len( PartnershipModel.get_all_partnerships_for_assign( quarter, year, cur_assign.number)) eval_assign = AssignmentModel.get_active_assign_with_earliest_eval_due_date( quarter, year) if eval_assign: template_values['eval_assign'] = eval_assign # grab number of evals for the current eval assignment template_values['assign_eval'] = len( EvalModel.get_all_evals_for_assign( quarter, year, cur_assign.number).fetch()) template = JINJA_ENV.get_template('/templates/admin.html') return self.response.write(template.render(template_values))
def get(self): user = users.get_current_user() quarter = SettingModel.quarter() year = SettingModel.year() # grab message from URL, if it exists message = self.request.get("message") if (not quarter or not year) and not message: message = "Please set a current year and quarter" template_values = { "message": message, "user": user, "sign_out": users.create_logout_url("/"), "quarter": quarter, "year": year, } self.session["quarter"] = quarter self.session["year"] = year if quarter and year: template_values["active_students"] = len(StudentModel.get_students_by_active_status(quarter, year).fetch()) template_values["inactive_students"] = len( StudentModel.get_students_by_active_status(quarter, year, active=False).fetch() ) cur_assign = AssignmentModel.get_active_assign_with_latest_fade_in_date(quarter, year) if cur_assign: template_values["cur_assign"] = cur_assign # grab number of active partnerships for the current assignment template_values["assign_partners"] = len( PartnershipModel.get_all_partnerships_for_assign(quarter, year, cur_assign.number) ) eval_assign = AssignmentModel.get_active_assign_with_earliest_eval_due_date(quarter, year) if eval_assign: template_values["eval_assign"] = eval_assign # grab number of evals for the current eval assignment template_values["assign_eval"] = len( EvalModel.get_all_evals_for_assign(quarter, year, cur_assign.number).fetch() ) template = JINJA_ENV.get_template("/templates/admin.html") return self.response.write(template.render(template_values))
def get(self): # pass map of quarter DB representations (ints) to string representation # TODO: # quarters should not be hardcoded quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'} quarter = self.request.get('quarter') # try grabbing quarter/year from URL year = self.request.get('year') assign_num = self.request.get('assign_num') # try grabbing assignment number from URL if not quarter or not year: # if they don't exist, try grabbing from session temp = get_sess_vals(self.session, 'quarter', 'year') if not temp: # if they don't exist there, redirect with error return self.redirect('/admin?message=Please set a current quarter and year') quarter,year = temp quarter,year = int(quarter), int(year) current_assignment = AssignmentModel.get_active_assign_with_latest_fade_in_date(quarter, year) if current_assignment and not assign_num: assign_num = current_assignment.number assign_num = int(assign_num) if assign_num else 1 # (to avoid errors if there are no assignments in the DB last_num = AssignmentModel.get_assign_n(quarter, year, -1) last_num = last_num.number if last_num else assign_num # (to avoid errors if there are no assignments in the DB) first_assign = AssignmentModel.get_assign_n(quarter, year, 0) first_num = 0 if not first_assign else first_assign.number evals = EvalModel.get_all_evals_for_assign(quarter, year, assign_num) # grab evals for assignment... solo_partners = PartnershipModel.get_solo_partnerships_by_assign(quarter, year, assign_num) # ...and grab endorsed solos (they're exempt from evals) template_values = { 'user': users.get_current_user(), 'sign_out': users.create_logout_url('/'), 'quarter': quarter, 'quarter_name': quarter_map[quarter], 'year': year, 'assign_num': assign_num, 'message': self.request.get('message'), 'evals': evals, 'solos': solo_partners, 'first_num': first_num, 'last_num': last_num, } template = JINJA_ENV.get_template('/templates/admin_evals_view.html') return self.response.write(template.render(template_values))
def get(self): quarter = SettingModel.quarter() year = SettingModel.year() user = users.get_current_user() selector = StudentModel.get_student_by_email(quarter, year, user.email()) if not selector: return self.redirect('/partner') # use selector info to find students in same lab section selectees = StudentModel.get_students_by_lab(quarter, year, selector.lab) current_assignment = AssignmentModel.get_active_assign_with_latest_fade_in_date(quarter, year) # if there are no assignments for this quarter, redirect to avoid errors if not current_assignment: return self.redirect('/partner?message=There are no assignments open for partner selection.') # get error message, if any e = self.request.get('error') # check to see if partner selection period has closed selection_closed = (datetime.now() - timedelta(hours=7) > current_assignment.close_date) # get all current_partnerships for partnership status partnerships = PartnershipModel.get_all_partnerships_for_assign(quarter, year, current_assignment.number) members = [] for p in partnerships: members += p.members partnership = members # build dict to store information about partnership status selectees = sorted({s.ucinetid: (s.key in partnerships,s) for s in selectees}.items(), key=lambda x: x[1][1].last_name) # pass template values... template_values = { 'error': e, 'selector': selector, 'selectees': selectees, 'selection_closed': selection_closed, 'current': current_assignment, 'user': user, 'sign_out': users.create_logout_url('/'), } template = JINJA_ENV.get_template('/templates/partner_browse.html') self.response.write(template.render(template_values))
def get(self): # pass map of quarter DB representations (ints) to string representation # TODO: # quarters should not be hardcoded quarter_map = {1: 'Fall', 2: 'Winter', 3: 'Spring', 4: 'Summer'} quarter = self.request.get('quarter') # try grabbing quarter/year from URL year = self.request.get('year') if not quarter or not year: # if they don't exist, try grabbing from session temp = get_sess_vals(self.session, 'quarter', 'year') if not temp: # if they don't exist there, redirect with error return self.redirect('/admin?message=Please set a current quarter and year') quarter,year = temp quarter,year = int(quarter), int(year) view = self.request.get('view') # check URL for 'view by' options (lab vs class) view = view if view else 'class' if view == 'class': students = StudentModel.get_students_by_active_status(quarter, year).fetch() else: students = StudentModel.get_students_by_lab(quarter, year, int(view)).fetch() current_assign = AssignmentModel.get_active_assign_with_latest_fade_in_date(quarter, year) current_num = 1 if not current_assign else current_assign.number template = JINJA_ENV.get_template('/templates/admin_add_partnership.html') template_values = { 'students': sorted(students, key=lambda x: x.last_name), 'view': str(view), 'quarter': quarter, 'year': year, 'user': users.get_current_user(), 'sign_out': users.create_logout_url('/'), 'current_num': current_num, 'num_labs': SettingModel.num_labs() if SettingModel.num_labs() else 1, } return self.response.write(template.render(template_values))
def get(self): template = JINJA_ENV.get_template( '/templates/partner_invitation_history.html') quarter = SettingModel.quarter() year = SettingModel.year() user = users.get_current_user() student = StudentModel.get_student_by_email(quarter, year, user.email()) # redirect to main page if student doesn't exist if not student: return self.redirect('/partner') invites = InvitationModel.get_all_invitations_involving_student( student).order(Invitation.assignment_number).fetch() current_assignment = AssignmentModel.get_active_assign_with_latest_fade_in_date( quarter, year) # if there are no assignments for this quarter, render early to avoid errors if not current_assignment: return self.response.write( template.render({ 'user': user, 'sign_out': users.create_logout_url('/') })) partners = PartnershipModel.get_active_partner_history_for_student( student, quarter, year) current_partner = PartnershipModel.get_partner_from_partner_history_by_assign( student, partners, current_assignment.number) active_range = set([ a.number for a in AssignmentModel.get_active_assigns(quarter, year) ]) invite_info = {} # dict for custom ordering of invite info fields ordering = { 'Assign Num': 0, 'Who': 1, 'To/From': 2, 'Accepted': 3, 'Active': 4 } for invite in invites: # organize invite info by time i = (invite.created - timedelta(hours=7)).strftime('%m-%d-%Y %H:%M:%S') invite_info[i] = {} invite_info[i]['Assign Num'] = invite.assignment_number # determine wheather invite was sent or received in relation to the user invite_info[i][ 'To/From'] = 'Sent' if invite.invitor == student.key else 'Received' who_key = invite.invitee if invite_info[i][ 'To/From'] == 'Sent' else invite.invitor who = who_key.get() # add invitor/invitee (depending on 'Sent'/'Received') to invite info invite_info[i]['Who'] = str(who.last_name) + ', ' + str( who.first_name) + ' - ' + str(who.ucinetid) invite_info[i]['Accepted'] = str(invite.accepted) invite_info[i]['Active'] = str(invite.active) invite_info[i]['key'] = invite.key.urlsafe() template_values = { 'invites': sorted(invite_info.items(), reverse=True), 'fields': sorted(ordering.items(), key=lambda x: x[1]), 'user': user, 'sign_out': users.create_logout_url('/'), 'active_range': active_range, } return self.response.write(template.render(template_values))
def get(self): quarter = SettingModel.quarter() year = SettingModel.year() user = users.get_current_user() selector = StudentModel.get_student_by_email(quarter, year, user.email()) student = StudentModel.get_student_by_email(quarter, year, user.email()) repeat = SettingModel.repeat_partners() if not selector: return self.redirect('/partner') # use selector info to find students in same lab section selectees = StudentModel.get_students_by_lab(quarter, year, selector.lab) current_assignment = AssignmentModel.get_active_assign_with_latest_fade_in_date( quarter, year) # if there are no assignments for this quarter, redirect to avoid errors if not current_assignment: return self.redirect( '/partner?message=There are no assignments open for partner selection.' ) # get error message, if any e = self.request.get('error') # check to see if partner selection period has closed selection_closed = (datetime.now() - timedelta(hours=7) > current_assignment.close_date) # get all current_partnerships for partnership status partnerships = PartnershipModel.get_all_partnerships_for_assign( quarter, year, current_assignment.number) partner_history = PartnershipModel.get_all_partner_history_for_student( student, quarter, year) members = [] for p in partner_history: if p.active: members += p.members for p in partnerships: if p.members not in members: members += p.members # build dict to store information about partnership status available = [] for s in selectees: if (s.key not in members) or repeat: available.append((s.ucinetid, (s.key in partnerships, s))) available = sorted(available, key=get_result_priority) # pass template values... template_values = { 'error': e, 'student': student, 'selector': selector, 'selectees': available, 'selection_closed': selection_closed, 'current': current_assignment, 'user': user, 'sign_out': users.create_logout_url('/'), } template = JINJA_ENV.get_template('/templates/partner_browse.html') self.response.write(template.render(template_values))