Esempio n. 1
0
    def gen_perm(tup):
        new_perm = Permission(permission_type=tup[0], program=prog)

        if tup[2]:
            new_perm.start_date = tup[2]
        if tup[3]:
            new_perm.end_date = tup[3]

        if tup[1] is not None:
            new_perm.user = tup[1]
            new_perm.save()
            return
        elif tup[1] is None and tup[0].startswith("Student"):
            new_perm.role = Group.objects.get(name="Student")
            new_perm.save()
            return
        elif tup[1] is None and tup[0].startswith("Teacher"):
            new_perm.role = Group.objects.get(name="Teacher")
            new_perm.save()
            return

        #It's not for a specific user and not a teacher or student deadline
        for x in ESPUser.getTypes():
            newnew_perm = Permission(permission_type=new_perm.permission_type,
                                     role=Group.objects.get(name=x),
                                     start_date=new_perm.start_date,
                                     end_date=new_perm.end_date,
                                     program=prog)
            newnew_perm.save()
Esempio n. 2
0
    def gen_perm(tup):
        new_perm=Permission(permission_type=tup[0], program=prog)

        if tup[2]:
            new_perm.start_date = tup[2]
        if tup[3]:
            new_perm.end_date = tup[3]

        if tup[1] is not None:
            new_perm.user=tup[1]
            new_perm.save()
            return
        elif tup[1] is None and tup[0].startswith("Student"):
            new_perm.role=Group.objects.get(name="Student")
            new_perm.save()
            return
        elif tup[1] is None and tup[0].startswith("Teacher"):
            new_perm.role=Group.objects.get(name="Teacher")
            new_perm.save()
            return

        #It's not for a specific user and not a teacher or student deadline
        for x in ESPUser.getTypes():
            newnew_perm=Permission(permission_type=new_perm.permission_type, role=Group.objects.get(name=x), start_date=new_perm.start_date, end_date=new_perm.end_date, program=prog)
            newnew_perm.save()
    def lottery(self, prog, role):
        # Run lottery algorithm.
        # Get grade caps
        grade_caps_str = prog.grade_caps()
        grade_caps = {
            int(key[0]): value
            for key, value in grade_caps_str.iteritems()
        }

        #Get lottery records and randomize them
        records = PhaseZeroRecord.objects.filter(program=prog).order_by('?')

        ###############################################################################
        # The lottery algorithm is run, with randomization and processing in order.
        # If any one in the group doesn't get in (due to cap size), no one in that group gets in.
        counts = {key: 0 for key in grade_caps}
        winners, _ = Group.objects.get_or_create(name=role)

        for i in records:
            sibs = i.user.all()
            newcounts = copy.copy(counts)
            for j in sibs:
                newcounts[j.getGrade(prog)] += 1

            cpass = not any(newcounts[c] > grade_caps[c] for c in counts)

            if cpass:
                winners.user_set.add(*sibs)
                counts = newcounts

        ###############################################################################
        # Post lottery, assign permissions to people in the lottery winners group
        # Assign OverridePhaseZero permission and Student/All permissions

        override_perm = Permission(permission_type='OverridePhaseZero',
                                   role=winners,
                                   start_date=datetime.datetime.now(),
                                   program=prog)
        studentAll_perm = Permission(permission_type='Student/All',
                                     role=winners,
                                     start_date=datetime.datetime.now(),
                                     program=prog)
        override_perm.save()
        studentAll_perm.save()
        # Add tag to indicate student lottery has been run
        Tag.setTag('student_lottery_run', target=prog, value='True')

        return True