Commit 9918b7a2 by Ibrahim Awwal

Client library updates, grading functionality should all be working. Needs unit tests.

parent 559e4710
...@@ -7,14 +7,14 @@ from grading_client.api import * ...@@ -7,14 +7,14 @@ from grading_client.api import *
# Create 30 local students, 100 remote students, 2 instructors, and 5 graders. # Create 30 local students, 100 remote students, 2 instructors, and 5 graders.
num_local, num_remote, num_instructors, num_graders = (30, 100, 2, 5) num_local, num_remote, num_instructors, num_graders = (30, 10, 2, 5)
local_students = [User(name="Student %d"%x, external_id="calx:%d"%(x+2000)).save() for x in xrange(num_local)] local_students = [User(name="Student %d"%x, external_id="calx:%d"%(x+2000)).save() for x in xrange(num_local)]
remote_students = [User(name="Student %d"%x, external_id="edx:%d"%(x+1000)).save() for x in xrange(num_remote)] remote_students = [User(name="Student %d"%x, external_id="edx:%d"%(x+1000)).save() for x in xrange(num_remote)]
instructors = [User(name="Instructor %d"%x, external_id="edx:%d"%x).save() for x in xrange(num_instructors)] instructors = [User(name="Instructor %d"%x, external_id="edx:%d"%x).save() for x in xrange(num_instructors)]
graders = [User(name="Grader %d"%x, external_id="edx:%d"%(x+100)).save() for x in xrange(num_graders)] graders = [User(name="Grader %d"%x, external_id="edx:%d"%(x+100)).save() for x in xrange(num_graders)]
# Create 5 questions # Create 5 questions
num_questions = 5 num_questions = 3
questions = {} questions = {}
group_names = ['local', 'remote1'] group_names = ['local', 'remote1']
for variant in group_names: for variant in group_names:
...@@ -64,23 +64,19 @@ rubric.save() # Saves all the entries ...@@ -64,23 +64,19 @@ rubric.save() # Saves all the entries
# This doesn't quite get the interleaving of rubric creation and evaluation, but # This doesn't quite get the interleaving of rubric creation and evaluation, but
# it shouldn't matter in practice # it shouldn't matter in practice
inst1 = instructors[0]
instructor_evals = []
for question in questions['local']:
for submission in local_submissions[question][:5]:
entries_dict = { entry.id:value for entry, value in zip(rubric.entries, local_true_scores[submission.id]) }
evaluation = rubric.create_evaluation(user_id=inst1.id, question_id=question.id, submission_id=submission.id, entry_values=entries_dict)
#evaluation.save()
instructor_evals.append(evaluation)
local_configurations = [question.grading_configuration for question in questions['local']] local_configurations = [question.grading_configuration for question in questions['local']]
# Create group for instructors
instructor_group = Group(title='Local Instructors').save()
for user in instructors:
instructor_group.add_user(user)
# Create group for graders # Create group for graders
grader_group = Group(title='Local Graders').save() grader_group = Group(title='Local Graders').save()
for user in graders: for user in graders:
grader_group.add_user(user) grader_group.add_user(user)
# Configure grading for readers # Configure grading for readers and instructors
for config in local_configurations: for config in local_configurations:
config.evaluations_per_submission = 1 config.evaluations_per_submission = 1
config.evaluations_per_grader = num_local / num_graders config.evaluations_per_grader = num_local / num_graders
...@@ -88,17 +84,30 @@ for config in local_configurations: ...@@ -88,17 +84,30 @@ for config in local_configurations:
config.open_date = datetime.datetime.now() config.open_date = datetime.datetime.now()
config.due_date = datetime.datetime.now() # TODO FIX config.due_date = datetime.datetime.now() # TODO FIX
config.save() config.save()
admin_role = GroupRole(group_id=instructor_group.id, question_id=config.question_id, role=GroupRole.ADMIN)
admin_role.save()
grader_role = GroupRole(group_id=grader_group.id, question_id=config.question_id,role=GroupRole.GRADER)
grader_role.save()
inst1 = instructors[0]
instructor_evals = []
for question in questions['local']:
for submission in local_submissions[question][:5]:
entries_dict = {entry.id:value for entry, value in zip(rubric.entries, local_true_scores[submission.id])}
evaluation = rubric.create_evaluation(user_id=inst1.id, submission_id=submission.id, entry_values=entries_dict)
#evaluation.save()
instructor_evals.append(evaluation)
role = GroupRole(group_id=grader_group.id,grading_configuration_id=config.id,role=1)
role.save()
# Now readers sign in and get work. Readers are also accurate in grading. # Now readers sign in and get work. Readers are also accurate in grading.
queue = question.grading_queue
for user in graders: for user in graders:
for question, config in zip(questions['local'], local_configurations): for question, config in zip(questions['local'], local_configurations):
queue = question.grading_queue
tasks = queue.request_work_for_user(user) tasks = queue.request_work_for_user(user)
for task in tasks: for task in tasks:
submission = Submission.get_by_question_id_and_id(question.id, task.submission_id) submission = Submission.get_by_question_id_and_id(question.id, task.submission_id)
entries_dict = { entry.id:value for entry, value in zip(rubric.entries, local_true_scores[submission.id]) } entries_dict = { entry.id:value for entry, value in zip(rubric.entries, local_true_scores[submission.id]) }
evaluation = rubric.create_evaluation(user_id=user.id, submission_id=submission.id, entry_values=entries_dict) evaluation = rubric.create_evaluation(user_id=user.id, submission_id=submission.id, entry_values=entries_dict)
#evaluation.save() #evaluation.save()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment