Commit 24a06ceb by gradyward Committed by Will Daly

Added XML validation for "sample-based-assessments" (AI)

parent 44ad63d8
......@@ -983,5 +983,103 @@
"</rubric>",
"</openassessment>"
]
},
"ai_peer_self": {
"title": "Foo",
"prompt": "Test prompt",
"rubric_feedback_prompt": "Test Feedback Prompt",
"start": null,
"due": null,
"submission_start": null,
"submission_due": null,
"criteria": [
{
"order_num": 0,
"name": "Test criterion",
"prompt": "Test criterion prompt",
"options": [
{
"order_num": 0,
"points": 0,
"name": "No",
"explanation": "No explanation"
},
{
"order_num": 1,
"points": 2,
"name": "Yes",
"explanation": "Yes explanation"
}
]
}
],
"assessments": [
{
"name": "sample-based-assessment",
"algorithm_id": "sample-algorithm-id",
"examples": [
{
"answer": "тєѕт αηѕωєя",
"options_selected": [
{
"criterion": "Test criterion",
"option": "No"
}
]
},
{
"answer": "тєѕт αηѕωєя TWO",
"options_selected": [
{
"criterion": "Test criterion",
"option": "Yes"
}
]
}
]
},
{
"name": "peer-assessment",
"start": "2014-02-27T09:46:28",
"due": "2014-03-01T00:00:00",
"must_grade": 5,
"must_be_graded_by": 3
},
{
"name": "self-assessment",
"start": "2014-04-01T00:00:00",
"due": "2014-06-01T00:00:00"
}
],
"expected_xml": [
"<openassessment>",
"<title>Foo</title>",
"<assessments>",
"<assessment name=\"sample-based-assessment\" algorithm_id=\"sample-algorithm-id\">",
"<example>",
"<answer>тєѕт αηѕωєя</answer>",
"<select criterion=\"Test criterion\" option=\"No\" />",
"</example>",
"<example>",
"<answer>тєѕт αηѕωєя TWO</answer>",
"<select criterion=\"Test criterion\" option=\"Yes\" />",
"</example>",
"</assessment>",
"<assessment name=\"peer-assessment\" start=\"2014-02-27T09:46:28\" due=\"2014-03-01T00:00:00\" must_grade=\"5\" must_be_graded_by=\"3\" />",
"<assessment name=\"self-assessment\" start=\"2014-04-01T00:00:00\" due=\"2014-06-01T00:00:00\" />",
"</assessments>",
"<rubric>",
"<prompt>Test prompt</prompt>",
"<criterion>",
"<name>Test criterion</name>",
"<prompt>Test criterion prompt</prompt>",
"<option points=\"0\"><name>No</name><explanation>No explanation</explanation></option>",
"<option points=\"2\"><name>Yes</name><explanation>Yes explanation</explanation></option>",
"</criterion>",
"<feedbackprompt>Test Feedback Prompt</feedbackprompt>",
"</rubric>",
"</openassessment>"
]
}
}
......@@ -425,14 +425,17 @@ def _parse_assessments_xml(assessments_root):
# Training examples
examples = assessment.findall('example')
# Student training should always have examples set, even if it's an empty list.
# Student training and AI Grading should always have examples set, even if it's an empty list.
# (Validation rules, applied later, are responsible for
# ensuring that users specify at least one example).
# Other assessment types ignore examples.
# Later, we can add AI assessment here.
# All assessments except for Student Training and AI (sample-based-assessment) types ignore examples.
if assessment_dict['name'] == 'student-training':
assessment_dict['examples'] = _parse_examples_xml(examples)
if assessment_dict['name'] == 'sample-based-assessment':
assessment_dict['examples'] = _parse_examples_xml(examples)
assessment_dict['algorithm_id'] = unicode(assessment.get('algorithm_id'))
# Update the list of assessments
assessments_list.append(assessment_dict)
......@@ -519,6 +522,9 @@ def serialize_content_to_xml(oa_block, root):
examples = []
_serialize_training_examples(examples, assessment)
if assessment_dict.get('algorithm_id') is not None:
assessment.set('algorithm_id', unicode(assessment_dict['algorithm_id']))
# Rubric
rubric_root = etree.SubElement(root, 'rubric')
_serialize_rubric(rubric_root, oa_block)
......
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