def assign_tasks(review_milestone, reviewer, routing_algorithm='random', tasks_to_assign=None, simulate=False, chunk_id_task_map={}): # if tasks_to_assign == None, set tasks_to_assign equal to number required by the milestone for the reviewer's role if tasks_to_assign == None: tasks_to_assign = get_num_tasks_for_user(review_milestone, reviewer, simulate=simulate) reviewer_role = None if simulate: reviewer_role = reviewer['membership__role'] else: reviewer_role = reviewer.membership.get(semester=review_milestone.assignment.semester).role # get all the chunks that the reviewer can review in the order they should be assigned reviewable_chunks = get_reviewable_chunks(review_milestone, reviewer, reviewer_role, simulate=simulate, chunk_id_task_map=chunk_id_task_map) chunks_to_assign = apply_routing_algorithm(reviewable_chunks, tasks_to_assign, routing_algorithm=routing_algorithm) # if len(chunks_to_assign) < num_tasks_for_user, the reviewer will be assigned fewer # tasks than they should be and they will be assigned more tasks the next time they # log in if there are more tasks they can be assigned # create and save tasks if it's NOT a simulation if not simulate: # create tasks for the chunks in chunks_to_assign and save them for chunk in chunks_to_assign: # create a ChunkReview if one doesn't already exist chunk_review, created = ChunkReview.objects.get_or_create(chunk=chunk) # update the ChunkReview if reviewer_role == Member.STUDENT or reviewer_role == Member.VOLUNTEER: chunk_review.student_or_alum_reviewers += 1 elif reviewer_role == Member.TEACHER: chunk_review.staff_reviewers += 1 chunk_review.save() # create a task task = Task(reviewer=reviewer, chunk=chunk, milestone=review_milestone, submission=chunk.file.submission, chunk_review=chunk_review) task.save() return len(chunks_to_assign)
# get the students query = Q(username__in=args.usernames) if args.all_students: query = query | Q(membership__semester=semester, membership__role=Member.STUDENT) if args.all_staff: query = query | Q(membership__semester=semester, membership__role=Member.TEACHER) students = User.objects.filter(query).distinct() print "to reviewers ", students def get_name(file): basename= os.path.basename(file.path) root,ext = os.path.splitext(basename) return root # make chunk and task for each student/file pair tasksCreated = 0 for student in students: for file in files: chunk = Chunk(file=file, name=get_name(file), start=0, end=len(file.data), class_type='none', staff_portion=0, student_lines=len(file.data.split('\n'))) if not args.dry_run: chunk.save() task = Task(chunk=chunk, milestone=reviewMilestone, reviewer=student, submission=submission) tasksCreated += 1 if not args.dry_run: task.save() print tasksCreated, " tasks created" if not args.dry_run: print "and saved to database"
def get_name(file): basename = os.path.basename(file.path) root, ext = os.path.splitext(basename) return root # make chunk and task for each student/file pair tasksCreated = 0 for student in students: for file in files: chunk = Chunk(file=file, name=get_name(file), start=0, end=len(file.data), class_type='none', staff_portion=0, student_lines=len(file.data.split('\n'))) if not args.dry_run: chunk.save() task = Task(chunk=chunk, milestone=reviewMilestone, reviewer=student, submission=submission) tasksCreated += 1 if not args.dry_run: task.save() print tasksCreated, " tasks created" if not args.dry_run: print "and saved to database"