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 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