コード例 #1
0
    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))
コード例 #2
0
    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))
コード例 #3
0
    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))
コード例 #4
0
    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))
コード例 #5
0
    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))
コード例 #6
0
    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))            
コード例 #7
0
    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))
コード例 #8
0
    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))                
コード例 #9
0
    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))
コード例 #10
0
    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))