Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
# 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"
Exemplo n.º 4
0
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"