def get(self): quarter = SettingModel.quarter() year = SettingModel.year() user = users.get_current_user() invitation = ndb.Key(urlsafe=self.request.get('confirmed')).get() confirming = StudentModel.get_student_by_email(quarter, year, user.email()) being_confirmed = invitation.invitor.get() for_assign = invitation.assignment_number partnership = None if not confirming and PartnershipModel.student_has_partner_for_assign( being_confirmed, for_assign): message = MessageModel.already_has_partner(False) elif PartnershipModel.student_has_partner_for_assign( being_confirmed, for_assign): message = MessageModel.already_has_partner(False) elif PartnershipModel.student_has_partner_for_assign( confirming, for_assign): message = MessageModel.already_has_partner(False) else: message = MessageModel.confirm_partnership( [being_confirmed, confirming], False, being_confirmed) partnership = PartnershipModel.create_partnership( [being_confirmed, confirming], for_assign) # set invitations between invitor and invitee (for current assignment) to inactive if partnership: InvitationModel.deactivate_invitations_for_students_and_assign( confirming, being_confirmed, for_assign) # SendMail(partnership, 'partner_confirm') time.sleep(0.1) return self.redirect('/partner?message=' + message)
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 post(self): quarter = SettingModel.quarter() year = SettingModel.year() user = users.get_current_user() selector = StudentModel.get_student_by_email(quarter, year, user.email()) selected = StudentModel.get_student_by_student_id( quarter, year, self.request.get('selected_partner')) try: selected_assign = int(self.request.get('selected_assign')) time.sleep(0.1) except ValueError: return self.redirect( '/partner/selection?error=You must choose an assignment number' ) # redirect with errors... if PartnershipModel.were_partners_previously( [selector, selected]) and not SettingModel.repeat_partners(): return self.redirect('/partner?message=' + MessageModel.worked_previously(selected)) elif InvitationModel.have_open_invitations(selector, selected, selected_assign): return self.redirect('/partner?message=' + MessageModel.have_open_invitations(selected)) elif PartnershipModel.student_has_partner_for_assign( selector, selected_assign): return self.redirect( '/partner?message=' + MessageModel.already_has_partner(False, False)) else: InvitationModel.create_invitation(selector, selected, selected_assign) return self.redirect('/partner?message=' + MessageModel.sent_invitation(selected))
def get(self): quarter = SettingModel.quarter() year = SettingModel.year() user = users.get_current_user() student = StudentModel.get_student_by_email(quarter, year, user.email()) active_assigns = AssignmentModel.get_active_assigns(quarter, year) invitations = InvitationModel.get_recvd_invites_by_student_and_mult_assigns( student, [x.number for x in active_assigns], as_dict=False) # check to see if partner selection is still active selection_closed = len(active_assigns) == 0 # pass template values... template_values = { 'student': student, 'selection_closed': selection_closed, 'invitations': invitations, } template = JINJA_ENV.get_template('/templates/partner_confirm.html') self.response.write(template.render(template_values))
def get(self): invitation = ndb.Key(urlsafe=self.request.get('confirmed')).get() InvitationModel.update_invitation_status(invitation.key, active=False) message = MessageModel.invitation_declined() time.sleep(0.1) return self.redirect('/partner?message=' + message)
def post(self): quarter = SettingModel.quarter() year = SettingModel.year() user = users.get_current_user() # these will only have values if this request is coming from an admin confirming_key = self.request.get('admin_confirming') being_confirmed_key = self.request.get('admin_being_confirmed') if confirming_key == '': confirming_key = 'None' # if not admin... if not confirming_key or not being_confirmed_key: invitation = ndb.Key(urlsafe=self.request.get('confirmed')).get() confirming = StudentModel.get_student_by_email( quarter, year, user.email()) being_confirmed = invitation.invitor.get() for_assign = invitation.assignment_number admin = False else: for_assign = int(self.request.get('assign_num')) being_confirmed = ndb.Key(urlsafe=being_confirmed_key).get() confirming = ndb.Key(urlsafe=confirming_key).get( ) if confirming_key != 'None' else None admin = True partnership = None if not confirming and PartnershipModel.student_has_partner_for_assign( being_confirmed, for_assign): message = MessageModel.already_has_partner(admin) elif not confirming: message = MessageModel.confirm_solo_partnership(being_confirmed) partnership = PartnershipModel.create_partnership( [being_confirmed], for_assign) elif PartnershipModel.student_has_partner_for_assign( being_confirmed, for_assign): message = MessageModel.already_has_partner(admin) # message = '' # partnership = PartnershipModel.get_partnerships_for_students_by_assign([being_confirmed], for_assign) # partnership = PartnershipModel.add_members_to_partnership([confirming], partnership[0]) elif PartnershipModel.student_has_partner_for_assign( confirming, for_assign): message = MessageModel.already_has_partner(admin) else: message = MessageModel.confirm_partnership( [being_confirmed, confirming], admin, confirming) partnership = PartnershipModel.create_partnership( [being_confirmed, confirming], for_assign) # set invitations between invitor and invitee (for current assignment) to inactive if partnership: InvitationModel.deactivate_invitations_for_students_and_assign( confirming, being_confirmed, for_assign) # SendMail(partnership, 'partner_confirm') if not admin: time.sleep(0.1) return self.redirect('/partner?message=' + message) else: time.sleep(0.1) return self.redirect('/admin/partners/add?message=' + message)
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): # delcare page template template = JINJA_ENV.get_template('/templates/partners_main.html') # get current user user = users.get_current_user() student = None try: quarter = SettingModel.quarter() year = SettingModel.year() # use user info to find student int DB student = StudentModel.get_student_by_email(quarter, year, user.email()) self.session['quarter'] = quarter self.session['year'] = year self.session['student'] = student.key.urlsafe() # Get current time in UTC, then convert to PDT current_time = datetime.datetime.fromtimestamp(time.time()) current_time = current_time - datetime.timedelta(hours=7) #get all assignments all_assigns = sorted(AssignmentModel.get_all_assign(quarter, year), key = lambda x: x.number) # get active assignments active_assigns = sorted(AssignmentModel.get_active_assigns(quarter, year), key=lambda x: x.number) # get active eval assigns eval_assigns = sorted(AssignmentModel.get_active_eval_assigns(quarter, year), key=lambda x: x.number) # find any active invitations for the current assignment that student has sent sent_invitations = InvitationModel.get_sent_invites_by_student_and_mult_assigns(student, [x.number for x in active_assigns]) # find any active invitations for the current assignment that the student has received received_invitations = InvitationModel.get_recvd_invites_by_student_and_mult_assigns(student, [x.number for x in active_assigns]) # find any partnerships in which the student has been involved partners = PartnershipModel.get_all_partner_history_for_student(student, quarter, year) partners = dict([(x.number,PartnershipModel.get_partner_from_partner_history_by_assign(student, partners, x.number)) for x in all_assigns]) # create list of assignment numbers which student has a partner for (IF PYTHON 3, use .items() instead of .iteritems()) assgn_nums_with_partner = [] for assgn_num, partner in partners.iteritems(): if len(partner): assgn_nums_with_partner.append(assgn_num) # find evals the student has submitted evals = EvalModel.get_eval_history_by_evaluator(student, True, quarter, year) evals = dict([(x.assignment_number,x) for x in evals]) # get activity message, if any message = self.request.get('message') dropped = [] for x in active_assigns: dropped += PartnershipModel.get_inactive_partnerships_by_student_and_assign(student, x.number).fetch() dropped = sorted(dropped, key=lambda x: x.assignment_number) except (AttributeError, IndexError): template_values = { 'user': user, 'student': student, 'sign_out': users.create_logout_url('/'), 'email': user.email() } return self.response.write(template.render(template_values)) template_values = { 'user': user, 'student': student, 'current_time': current_time, 'all_assigns': all_assigns, 'assgn_nums_with_partner': assgn_nums_with_partner, 'active': active_assigns, 'evals': eval_assigns, 'submitted_evals': evals, 'sent_invitations': sorted(sent_invitations, key=lambda x: x.assignment_number), 'received_invitations': sorted(received_invitations.items(), key=lambda x: x[0]), 'partners': partners, 'sign_out': users.create_logout_url('/'), 'message': message, 'profile': student.bio is None or student.availability is None or student.programming_ability is None, 'dropped': dropped, 'show_dropped': len(dropped) > 0 and len(filter(lambda x: x != None, partners.values())) < len(active_assigns), } self.response.write(template.render(template_values))
def get(self): # delcare page template template = JINJA_ENV.get_template('/templates/partners_main.html') # get current user user = users.get_current_user() student = None try: quarter = SettingModel.quarter() year = SettingModel.year() # use user info to find student int DB student = StudentModel.get_student_by_email( quarter, year, user.email()) self.session['quarter'] = quarter self.session['year'] = year self.session['student'] = student.key.urlsafe() # Get current time in UTC, then convert to PDT current_time = datetime.datetime.fromtimestamp(time.time()) current_time = current_time - datetime.timedelta(hours=7) #get all assignments all_assigns = sorted(AssignmentModel.get_all_assign(quarter, year), key=lambda x: x.number) # get active assignments active_assigns = sorted(AssignmentModel.get_active_assigns( quarter, year), key=lambda x: x.number) # get inactive assignments inactive_assigns = sorted(AssignmentModel.get_inactive_assigns( quarter, year), key=lambda x: x.number) # get active eval assigns eval_assigns = sorted(AssignmentModel.get_active_eval_assigns( quarter, year), key=lambda x: x.number) # find any active invitations for the current assignment that student has sent sent_invitations = InvitationModel.get_sent_invites_by_student_and_mult_assigns( student, [x.number for x in active_assigns]) # find any active invitations for the current assignment that the student has received received_invitations = InvitationModel.get_recvd_invites_by_student_and_mult_assigns( student, [x.number for x in active_assigns]) # find any partnerships in which the student has been involved partners = PartnershipModel.get_all_partner_history_for_student( student, quarter, year) partners = dict([ (x.number, PartnershipModel.get_partner_from_partner_history_by_assign( student, partners, x.number)) for x in all_assigns ]) # create list of assignment numbers which student has a partner for (IF PYTHON 3, use .items() instead of .iteritems()) assgn_nums_with_partner = [] for assgn_num, partner in partners.iteritems(): if len(partner): assgn_nums_with_partner.append(assgn_num) # find evals the student has submitted evals = EvalModel.get_eval_history_by_evaluator( student, True, quarter, year) evals = dict([(x.assignment_number, x) for x in evals]) # get activity message, if any message = self.request.get('message') dropped = [] for x in active_assigns: dropped += PartnershipModel.get_inactive_partnerships_by_student_and_assign( student, x.number).fetch() dropped = sorted(dropped, key=lambda x: x.assignment_number) except (AttributeError, IndexError): template_values = { 'user': user, 'student': student, 'sign_out': users.create_logout_url('/'), 'email': user.email() } return self.response.write(template.render(template_values)) template_values = { 'user': user, 'student': student, 'current_time': current_time, 'all_assigns': all_assigns, 'inactive_assigns': inactive_assigns, 'assgn_nums_with_partner': assgn_nums_with_partner, 'active': active_assigns, 'evals': eval_assigns, 'submitted_evals': evals, 'sent_invitations': sorted(sent_invitations, key=lambda x: x.assignment_number), 'received_invitations': sorted(received_invitations.items(), key=lambda x: x[0]), 'partners': partners, 'sign_out': users.create_logout_url('/'), 'message': message, 'profile': student.bio is None or student.availability is None or student.programming_ability is None, 'dropped': dropped, 'show_dropped': len(dropped) > 0 and len(filter(lambda x: x != None, partners.values())) < len(active_assigns), } self.response.write(template.render(template_values))