Commit 2626a75a by Will Daly

Generate assessment and submission CSV data.

Added management command to upload archive of CSV data to S3
Add a scenario with unicode in all rubric strings
Add tests for unicode CSV reports
Added progress indicator to upload management command
Optimize database queries for CSV reports.
Fix issue with duplicate assessment feedback options.
parent 8b9f8090
......@@ -19,7 +19,7 @@ class TestRubricDeserialization(CacheResetTest):
def test_rubric_only_created_once(self):
# Make sure sending the same Rubric data twice only creates one Rubric,
# and returns a reference to it the next time.
rubric_data = json_data('rubric_data/project_plan_rubric.json')
rubric_data = json_data('data/rubric/project_plan_rubric.json')
r1 = rubric_from_dict(rubric_data)
......@@ -32,14 +32,14 @@ class TestRubricDeserialization(CacheResetTest):
def test_rubric_requires_positive_score(self):
with self.assertRaises(InvalidRubric):
rubric_from_dict(json_data('rubric_data/no_points.json'))
rubric_from_dict(json_data('data/rubric/no_points.json'))
class TestCriterionDeserialization(CacheResetTest):
def test_empty_criteria(self):
with self.assertRaises(InvalidRubric) as cm:
rubric_from_dict(json_data('rubric_data/empty_criteria.json'))
rubric_from_dict(json_data('data/rubric/empty_criteria.json'))
self.assertEqual(
cm.exception.errors,
{'criteria': [u'Must have at least one criterion']}
......@@ -47,7 +47,7 @@ class TestCriterionDeserialization(CacheResetTest):
def test_missing_criteria(self):
with self.assertRaises(InvalidRubric) as cm:
rubric_from_dict(json_data('rubric_data/missing_criteria.json'))
rubric_from_dict(json_data('data/rubric/missing_criteria.json'))
self.assertEqual(
cm.exception.errors,
{'criteria': [u'This field is required.']}
......@@ -58,7 +58,7 @@ class TestCriterionOptionDeserialization(CacheResetTest):
def test_empty_options(self):
with self.assertRaises(InvalidRubric) as cm:
rubric_from_dict(json_data('rubric_data/empty_options.json'))
rubric_from_dict(json_data('data/rubric/empty_options.json'))
self.assertEqual(
cm.exception.errors,
{
......@@ -71,7 +71,7 @@ class TestCriterionOptionDeserialization(CacheResetTest):
def test_missing_options(self):
with self.assertRaises(InvalidRubric) as cm:
rubric_from_dict(json_data('rubric_data/missing_options.json'))
rubric_from_dict(json_data('data/rubric/missing_options.json'))
self.assertEqual(
cm.exception.errors,
{
......
"""
Aggregate data for openassessment.
"""
import csv
import json
from submissions import api as sub_api
from openassessment.workflow.models import AssessmentWorkflow
from openassessment.assessment.models import AssessmentPart, AssessmentFeedback
class CsvWriter(object):
"""
Dump openassessment data to CSV files.
"""
MODELS = [
'assessment', 'assessment_part',
'assessment_feedback', 'assessment_feedback_option',
'submission', 'score'
]
HEADERS = {
'assessment': [
'id', 'submission_uuid', 'scored_at',
'scorer_id', 'score_type',
'points_possible', 'feedback',
],
'assessment_part': [
'assessment_id', 'points_earned',
'criterion_name', 'option_name', 'feedback'
],
'assessment_feedback': [
'submission_uuid', 'feedback_text', 'options'
],
'assessment_feedback_option': [
'id', 'text'
],
'submission': [
'uuid', 'student_id', 'item_id',
'submitted_at', 'created_at', 'raw_answer'
],
'score': [
'submission_uuid',
'points_earned', 'points_possible',
'created_at',
]
}
# Number of submissions to retrieve at a time
# from the database. We need to do this in order
# to avoid loading thousands of records into memory at once.
QUERY_INTERVAL = 100
def __init__(self, output_streams, progress_callback=None):
"""
Configure where the writer will write data.
You can provide open file handles for each of the available
models (see `AssessmentCsvWriter.MODELS`). If you don't
provide an output stream, the writer won't produce data
for that model.
Args:
output_streams (dictionary): Provide the file handles
to write CSV data to.
Kwargs:
progress_callback (callable): Callable that accepts
no arguments. Called once per submission loaded
from the database.
Example usage:
>>> output_streams = {
>>> "submission": open('submissions.csv', 'w'),
>>> "score": open('scores.csv', 'w')
>>> }
>>> writer = AssessmentsCsvWriter(output_streams)
>>> writer.write_to_csv()
"""
self.writers = {
key: csv.writer(file_handle)
for key, file_handle in output_streams.iteritems()
if key in self.MODELS
}
self._progress_callback = progress_callback
def write_to_csv(self, course_id):
"""
Write assessment and submission data for a course to CSV files.
NOTE: The current implementation optimizes for memory usage,
but not for the number of database queries. All the queries
use indexed fields (the submission uuid), so they should be
relatively quick.
Args:
course_id (unicode): The course ID from which to pull data.
Returns:
None
"""
self._write_csv_headers()
rubric_points_cache = dict()
feedback_option_set = set()
for submission_uuid in self._submission_uuids(course_id):
self._write_submission_to_csv(submission_uuid)
# Django 1.4 doesn't follow reverse relations when using select_related,
# so we select AssessmentPart and follow the foreign key to the Assessment.
parts = AssessmentPart.objects.select_related(
'assessment', 'option', 'option__criterion'
).filter(assessment__submission_uuid=submission_uuid).order_by('assessment__pk')
self._write_assessment_to_csv(parts, rubric_points_cache)
feedback_query = AssessmentFeedback.objects.filter(
submission_uuid=submission_uuid
).prefetch_related('options')
for assessment_feedback in feedback_query:
self._write_assessment_feedback_to_csv(assessment_feedback)
feedback_option_set.update(set(
option for option in assessment_feedback.options.all()
))
if self._progress_callback is not None:
self._progress_callback()
# The set of available options should be relatively small,
# since they're not (currently) user-defined.
self._write_feedback_options_to_csv(feedback_option_set)
def _submission_uuids(self, course_id):
"""
Iterate over submission uuids.
Makes database calls every N submissions to avoid loading
all submission uuids into memory at once.
Args:
course_id (unicode): The ID of the course to retrieve submissions from.
Yields:
submission_uuid (unicode)
"""
num_results = 0
start = 0
total_results = AssessmentWorkflow.objects.filter(
course_id=course_id
).count()
while num_results < total_results:
# Load a subset of the submission UUIDs
# We're assuming that peer workflows are immutable,
# so if we counted N at the start of the loop,
# there should be >= N for us to process.
end = start + self.QUERY_INTERVAL
query = AssessmentWorkflow.objects.filter(
course_id=course_id
).order_by('created').values('submission_uuid')[start:end]
for workflow_dict in query:
num_results += 1
yield workflow_dict['submission_uuid']
start += self.QUERY_INTERVAL
def _write_csv_headers(self):
"""
Write the headers (first row) for each output stream.
"""
for name, writer in self.writers.iteritems():
writer.writerow(self.HEADERS[name])
def _write_submission_to_csv(self, submission_uuid):
"""
Write submission data to CSV.
Args:
submission_uuid (unicode): The UUID of the submission to write.
Returns:
None
"""
submission = sub_api.get_submission_and_student(submission_uuid)
self._write_unicode('submission', [
submission['uuid'],
submission['student_item']['student_id'],
submission['student_item']['item_id'],
submission['submitted_at'],
submission['created_at'],
json.dumps(submission['answer'])
])
score = sub_api.get_latest_score_for_submission(submission_uuid)
if score is not None:
self._write_unicode('score', [
score['submission_uuid'],
score['points_earned'],
score['points_possible'],
score['created_at']
])
def _write_assessment_to_csv(self, assessment_parts, rubric_points_cache):
"""
Write assessments and assessment parts to CSV.
Args:
assessment_parts (list of AssessmentPart): The assessment parts to write,
not necessarily from the same assessment.
rubric_points_cache (dict): in-memory cache of points possible by rubric ID.
Returns:
None
"""
assessment_id_set = set()
for part in assessment_parts:
self._write_unicode('assessment_part', [
part.assessment.id,
part.option.points,
part.option.criterion.name,
part.option.name,
part.feedback
])
# If we haven't seen this assessment before, write it
if part.assessment.id not in assessment_id_set:
assessment = part.assessment
# The points possible in the rubric will be the same for
# every assessment that shares a rubric. To avoid querying
# the rubric criteria/options each time, we cache points possible
# for each rubric ID.
if assessment.rubric_id in rubric_points_cache:
points_possible = rubric_points_cache[assessment.rubric_id]
else:
points_possible = assessment.points_possible
rubric_points_cache[assessment.rubric_id] = points_possible
self._write_unicode('assessment', [
assessment.id,
assessment.submission_uuid,
assessment.scored_at,
assessment.scorer_id,
assessment.score_type,
points_possible,
assessment.feedback
])
assessment_id_set.add(assessment.id)
def _write_assessment_feedback_to_csv(self, assessment_feedback):
"""
Write feedback on assessments to CSV.
Args:
assessment_feedback (AssessmentFeedback): The feedback model to write.
Returns:
None
"""
options_string = ",".join([
unicode(option.id) for option in assessment_feedback.options.all()
])
self._write_unicode('assessment_feedback', [
assessment_feedback.submission_uuid,
assessment_feedback.feedback_text,
options_string
])
def _write_feedback_options_to_csv(self, feedback_options):
"""
Write feedback on assessment options to CSV.
Args:
feedback_options (iterable of AssessmentFeedbackOption)
Returns:
None
"""
for option in feedback_options:
self._write_unicode(
'assessment_feedback_option',
[option.id, option.text]
)
def _write_unicode(self, output_name, row):
"""
Encode a row as a UTF-8 bytestring, then write it to a CSV file.
Non-string values are first converted to unicode.
Args:
output_name (str): The name of the output stream to write to.
row (list): List of fields, which must be serializable as UTF-8.
Returns:
None
"""
writer = self.writers.get(output_name)
if writer is not None:
encoded_row = [unicode(field).encode('utf-8') for field in row]
writer.writerow(encoded_row)
"""
Generate CSV files for submission and assessment data, then upload to S3.
"""
import sys
import os
import os.path
import datetime
import shutil
import tempfile
import tarfile
import boto
from boto.s3.key import Key
from django.core.management.base import BaseCommand, CommandError
from openassessment.data import CsvWriter
class Command(BaseCommand):
"""
Create and upload CSV files for submission and assessment data.
"""
help = 'Create and upload CSV files for submission and assessment data.'
args = '<COURSE_ID> <S3_BUCKET_NAME>'
OUTPUT_CSV_PATHS = {
output_name: "{}.csv".format(output_name)
for output_name in CsvWriter.MODELS
}
URL_EXPIRATION_HOURS = 24
PROGRESS_INTERVAL = 10
def __init__(self, *args, **kwargs):
super(Command, self).__init__(*args, **kwargs)
self._history = list()
self._submission_counter = 0
@property
def history(self):
"""
Return the upload history, which is useful for testing.
Returns:
list of dictionaries with keys 'url' and 'key'
"""
return self._history
def handle(self, *args, **options):
"""
Execute the command.
Args:
course_id (unicode): The ID of the course to create submissions for.
s3_bucket_name (unicode): The name of the S3 bucket to upload to.
Raises:
CommandError
"""
if len(args) < 2:
raise CommandError(u'Usage: upload_oa_data {}'.format(self.args))
course_id, s3_bucket = args[0].decode('utf-8'), args[1].decode('utf-8')
csv_dir = tempfile.mkdtemp()
try:
print u"Generating CSV files for course '{}'".format(course_id)
self._dump_to_csv(course_id, csv_dir)
print u"Creating archive of CSV files in {}".format(csv_dir)
archive_path = self._create_archive(csv_dir)
print u"Uploading {} to {}/{}".format(archive_path, s3_bucket, course_id)
url = self._upload(course_id, archive_path, s3_bucket)
print "== Upload successful =="
print u"Download URL (expires in {} hours):\n{}".format(self.URL_EXPIRATION_HOURS, url)
finally:
# Assume that the archive was created in the directory,
# so to clean up we just need to delete the directory.
shutil.rmtree(csv_dir)
def _dump_to_csv(self, course_id, csv_dir):
"""
Create CSV files for submission/assessment data in a directory.
Args:
course_id (unicode): The ID of the course to dump data from.
csv_dir (unicode): The absolute path to the directory in which to create CSV files.
Returns:
None
"""
output_streams = {
name: open(os.path.join(csv_dir, rel_path), 'w')
for name, rel_path in self.OUTPUT_CSV_PATHS.iteritems()
}
csv_writer = CsvWriter(output_streams, self._progress_callback)
csv_writer.write_to_csv(course_id)
def _create_archive(self, dir_path):
"""
Create an archive of a directory.
Args:
dir_path (unicode): The absolute path to the directory containing the CSV files.
Returns:
unicode: Absolute path to the archive.
"""
tarball_name = u"{}.tar.gz".format(
datetime.datetime.utcnow().strftime("%Y-%m-%dT%H_%M")
)
tarball_path = os.path.join(dir_path, tarball_name)
with tarfile.open(tarball_path, "w:gz") as tar:
for rel_path in self.OUTPUT_CSV_PATHS.values():
tar.add(os.path.join(dir_path, rel_path), arcname=rel_path)
return tarball_path
def _upload(self, course_id, file_path, s3_bucket):
"""
Upload a file.
Args:
course_id (unicode): The ID of the course.
file_path (unicode): Absolute path to the file to upload.
s3_bucket (unicode): Name of the S3 bucket where the file will be uploaded.
Returns:
str: URL to access the uploaded archive.
"""
conn = boto.connect_s3()
bucket = conn.get_bucket(s3_bucket)
key_name = os.path.join(course_id, os.path.split(file_path)[1])
key = Key(bucket=bucket, name=key_name)
key.set_contents_from_filename(file_path)
url = key.generate_url(self.URL_EXPIRATION_HOURS * 3600)
# Store the key and url in the history
self._history.append({'key': key_name, 'url': url})
return url
def _progress_callback(self):
"""
Indicate progress to the user as submissions are processed.
"""
self._submission_counter += 1
if self._submission_counter > 0 and self._submission_counter % self.PROGRESS_INTERVAL == 0:
sys.stdout.write('.')
sys.stdout.flush()
# -*- coding: utf-8 -*-
"""
Tests for management command that uploads submission/assessment data.
"""
from StringIO import StringIO
import tarfile
from django.test import TestCase
import boto
import moto
from openassessment.management.commands import upload_oa_data
from openassessment.workflow import api as workflow_api
from submissions import api as sub_api
class UploadDataTest(TestCase):
"""
Test the upload management command. Archiving and upload are in-scope,
but the contents of the generated CSV files are tested elsewhere.
"""
COURSE_ID = u"TɘꙅT ↄoUᴙꙅɘ"
BUCKET_NAME = u"com.example.data"
CSV_NAMES = [
"assessment.csv", "assessment_part.csv",
"assessment_feedback.csv", "assessment_feedback_option.csv",
"submission.csv", "score.csv",
]
@moto.mock_s3
def test_upload(self):
# Create an S3 bucket using the fake S3 implementation
conn = boto.connect_s3()
conn.create_bucket(self.BUCKET_NAME)
# Create some submissions to ensure that we cover
# the progress indicator code.
for index in range(50):
student_item = {
'student_id': "test_user_{}".format(index),
'course_id': self.COURSE_ID,
'item_id': 'test_item',
'item_type': 'openassessment',
}
submission_text = "test submission {}".format(index)
submission = sub_api.create_submission(student_item, submission_text)
workflow_api.create_workflow(submission['uuid'])
# Create and upload the archive of CSV files
# This should generate the files even though
# we don't have any data available.
cmd = upload_oa_data.Command()
cmd.handle(self.COURSE_ID.encode('utf-8'), self.BUCKET_NAME)
# Retrieve the uploaded file from the fake S3 implementation
self.assertEqual(len(cmd.history), 1)
bucket = conn.get_all_buckets()[0]
key = bucket.get_key(cmd.history[0]['key'])
contents = StringIO(key.get_contents_as_string())
# Expect that the contents contain all the expected CSV files
with tarfile.open(mode="r:gz", fileobj=contents) as tar:
file_sizes = {
member.name: member.size
for member in tar.getmembers()
}
for csv_name in self.CSV_NAMES:
self.assertIn(csv_name, file_sizes)
self.assertGreater(file_sizes[csv_name], 0)
# Expect that we generated a URL for the bucket
url = cmd.history[0]['url']
self.assertIn("https://{}".format(self.BUCKET_NAME), url)
[
{
"pk": 1,
"model": "assessment.rubric",
"fields": {
"content_hash": "7405a513d9f99b62dd561816f20cdb90b09b8060"
}
},
{
"pk": 1,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 1,
"name": "concise"
}
},
{
"pk": 2,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "How clear is the thinking?",
"rubric": 1,
"name": "clear-headed"
}
},
{
"pk": 3,
"model": "assessment.criterion",
"fields": {
"order_num": 2,
"prompt": "Lastly, how is its form? Punctuation, grammar, and spelling all count.",
"rubric": 1,
"name": "form"
}
},
{
"pk": 1,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "\n In \"Cryptonomicon\", Stephenson spent multiple pages talking about breakfast cereal.\n While hilarious, in recent years his work has been anything but 'concise'.\n ",
"points": 0,
"criterion": 1,
"name": "Neal Stephenson (late)"
}
},
{
"pk": 2,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "\n If the author wrote something cyclopean that staggers the mind, score it thus.\n ",
"points": 1,
"criterion": 1,
"name": "HP Lovecraft"
}
},
{
"pk": 3,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "\n Tight prose that conveys a wealth of information about the world in relatively\n few words. Example, \"The door irised open and he stepped inside.\"\n ",
"points": 3,
"criterion": 1,
"name": "Robert Heinlein"
}
},
{
"pk": 4,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "\n When Stephenson still had an editor, his prose was dense, with anecdotes about\n nitrox abuse implying main characters' whole life stories.\n ",
"points": 4,
"criterion": 1,
"name": "Neal Stephenson (early)"
}
},
{
"pk": 5,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Score the work this way if it makes you weep, and the removal of a single\n word would make you sneer.\n ",
"points": 5,
"criterion": 1,
"name": "Earnest Hemingway"
}
},
{
"pk": 6,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 2,
"name": "Yogi Berra"
}
},
{
"pk": 7,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 2,
"name": "Hunter S. Thompson"
}
},
{
"pk": 8,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 2,
"name": "Robert Heinlein"
}
},
{
"pk": 9,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 2,
"name": "Isaac Asimov"
}
},
{
"pk": 10,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Coolly rational, with a firm grasp of the main topics, a crystal-clear train of thought,\n and unemotional examination of the facts. This is the only item explained in this category,\n to show that explained and unexplained items can be mixed.\n ",
"points": 10,
"criterion": 2,
"name": "Spock"
}
},
{
"pk": 11,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 3,
"name": "lolcats"
}
},
{
"pk": 12,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 3,
"name": "Facebook"
}
},
{
"pk": 13,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 3,
"name": "Reddit"
}
},
{
"pk": 14,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 3,
"name": "metafilter"
}
},
{
"pk": 15,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "",
"points": 4,
"criterion": 3,
"name": "Usenet, 1996"
}
},
{
"pk": 16,
"model": "assessment.criterionoption",
"fields": {
"order_num": 5,
"explanation": "",
"points": 5,
"criterion": 3,
"name": "The Elements of Style"
}
}
]
\ No newline at end of file
[
{
"pk": 2,
"model": "workflow.assessmentworkflow",
"fields": {
"status": "done",
"uuid": "3884f3cc-d0ae-11e3-9820-14109fd8dc43",
"created": "2014-04-30T21:27:24.236Z",
"submission_uuid": "387d840a-d0ae-11e3-bb0e-14109fd8dc43",
"modified": "2014-04-30T21:28:41.814Z",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"course_id": "edX/Enchantment_101/April_1",
"status_changed": "2014-04-30T21:28:41.814Z"
}
},
{
"pk": 1,
"model": "workflow.assessmentworkflow",
"fields": {
"status": "done",
"uuid": "178beedc-d0ae-11e3-afc3-14109fd8dc43",
"created": "2014-04-30T21:26:28.917Z",
"submission_uuid": "1783758f-d0ae-11e3-b495-14109fd8dc43",
"modified": "2014-04-30T21:28:49.284Z",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"course_id": "edX/Enchantment_101/April_1",
"status_changed": "2014-04-30T21:28:49.284Z"
}
},
{
"pk": 2,
"model": "assessment.rubric",
"fields": {
"content_hash": "1641a7cd3ab1cca196ba04db334641478b636199"
}
},
{
"pk": 1,
"model": "assessment.rubric",
"fields": {
"content_hash": "7405a513d9f99b62dd561816f20cdb90b09b8060"
}
},
{
"pk": 1,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 1,
"name": "concise"
}
},
{
"pk": 2,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "How clear is the thinking?",
"rubric": 1,
"name": "clear-headed"
}
},
{
"pk": 3,
"model": "assessment.criterion",
"fields": {
"order_num": 2,
"prompt": "Lastly, how is its form? Punctuation, grammar, and spelling all count.",
"rubric": 1,
"name": "form"
}
},
{
"pk": 4,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 2,
"name": "concise"
}
},
{
"pk": 5,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "How clear is the thinking?",
"rubric": 2,
"name": "clear-headed"
}
},
{
"pk": 6,
"model": "assessment.criterion",
"fields": {
"order_num": 2,
"prompt": "Lastly, how is its form? Punctuation, grammar, and spelling all count.",
"rubric": 2,
"name": "form"
}
},
{
"pk": 1,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "\n In \"Cryptonomicon\", Stephenson spent multiple pages talking about breakfast cereal.\n While hilarious, in recent years his work has been anything but 'concise'.\n ",
"points": 0,
"criterion": 1,
"name": "Neal Stephenson (late)"
}
},
{
"pk": 2,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "\n If the author wrote something cyclopean that staggers the mind, score it thus.\n ",
"points": 1,
"criterion": 1,
"name": "HP Lovecraft"
}
},
{
"pk": 3,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "\n Tight prose that conveys a wealth of information about the world in relatively\n few words. Example, \"The door irised open and he stepped inside.\"\n ",
"points": 3,
"criterion": 1,
"name": "Robert Heinlein"
}
},
{
"pk": 4,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "\n When Stephenson still had an editor, his prose was dense, with anecdotes about\n nitrox abuse implying main characters' whole life stories.\n ",
"points": 4,
"criterion": 1,
"name": "Neal Stephenson (early)"
}
},
{
"pk": 5,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Score the work this way if it makes you weep, and the removal of a single\n word would make you sneer.\n ",
"points": 5,
"criterion": 1,
"name": "Earnest Hemingway"
}
},
{
"pk": 6,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 2,
"name": "Yogi Berra"
}
},
{
"pk": 7,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 2,
"name": "Hunter S. Thompson"
}
},
{
"pk": 8,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 2,
"name": "Robert Heinlein"
}
},
{
"pk": 9,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 2,
"name": "Isaac Asimov"
}
},
{
"pk": 10,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Coolly rational, with a firm grasp of the main topics, a crystal-clear train of thought,\n and unemotional examination of the facts. This is the only item explained in this category,\n to show that explained and unexplained items can be mixed.\n ",
"points": 10,
"criterion": 2,
"name": "Spock"
}
},
{
"pk": 11,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 3,
"name": "lolcats"
}
},
{
"pk": 12,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 3,
"name": "Facebook"
}
},
{
"pk": 13,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 3,
"name": "Reddit"
}
},
{
"pk": 14,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 3,
"name": "metafilter"
}
},
{
"pk": 15,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "",
"points": 4,
"criterion": 3,
"name": "Usenet, 1996"
}
},
{
"pk": 16,
"model": "assessment.criterionoption",
"fields": {
"order_num": 5,
"explanation": "",
"points": 5,
"criterion": 3,
"name": "The Elements of Style"
}
},
{
"pk": 17,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "\n In \"Cryptonomicon\", Stephenson spent multiple pages talking about breakfast cereal.\n While hilarious, in recent years his work has been anything but 'concise'.\n ",
"points": 0,
"criterion": 4,
"name": "Neal Stephenson (late)"
}
},
{
"pk": 18,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "\n If the author wrote something cyclopean that staggers the mind, score it thus.\n ",
"points": 1,
"criterion": 4,
"name": "HP Lovecraft"
}
},
{
"pk": 19,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "\n Tight prose that conveys a wealth of information about the world in relatively\n few words. Example, \"The door irised open and he stepped inside.\"\n ",
"points": 3,
"criterion": 4,
"name": "Robert Heinlein"
}
},
{
"pk": 20,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "\n When Stephenson still had an editor, his prose was dense, with anecdotes about\n nitrox abuse implying main characters' whole life stories.\n ",
"points": 4,
"criterion": 4,
"name": "Neal Stephenson (early)"
}
},
{
"pk": 21,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Score the work this way if it makes you weep, and the removal of a single\n word would make you sneer.\n ",
"points": 5,
"criterion": 4,
"name": "Earnest Hemingway"
}
},
{
"pk": 22,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 5,
"name": "Yogi Berra"
}
},
{
"pk": 23,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 5,
"name": "Hunter S. Thompson"
}
},
{
"pk": 24,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 5,
"name": "Robert Heinlein"
}
},
{
"pk": 25,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 5,
"name": "Isaac Asimov"
}
},
{
"pk": 26,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Coolly rational, with a firm grasp of the main topics, a crystal-clear train of thought,\n and unemotional examination of the facts. This is the only item explained in this category,\n to show that explained and unexplained items can be mixed.\n ",
"points": 10,
"criterion": 5,
"name": "Spock"
}
},
{
"pk": 27,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 6,
"name": "lolcats"
}
},
{
"pk": 28,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 6,
"name": "Facebook"
}
},
{
"pk": 29,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 6,
"name": "Reddit"
}
},
{
"pk": 30,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 6,
"name": "metafilter"
}
},
{
"pk": 31,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "",
"points": 4,
"criterion": 6,
"name": "Usenet, 1996"
}
},
{
"pk": 32,
"model": "assessment.criterionoption",
"fields": {
"order_num": 5,
"explanation": "",
"points": 5,
"criterion": 6,
"name": "The Elements of Style"
}
},
{
"pk": 4,
"model": "assessment.assessment",
"fields": {
"scorer_id": "student_1",
"feedback": "",
"submission_uuid": "1783758f-d0ae-11e3-b495-14109fd8dc43",
"scored_at": "2014-04-30T21:28:48.769Z",
"rubric": 2,
"score_type": "SE"
}
},
{
"pk": 3,
"model": "assessment.assessment",
"fields": {
"scorer_id": "student_1",
"feedback": "",
"submission_uuid": "387d840a-d0ae-11e3-bb0e-14109fd8dc43",
"scored_at": "2014-04-30T21:28:41.270Z",
"rubric": 2,
"score_type": "PE"
}
},
{
"pk": 2,
"model": "assessment.assessment",
"fields": {
"scorer_id": "Bob",
"feedback": "",
"submission_uuid": "387d840a-d0ae-11e3-bb0e-14109fd8dc43",
"scored_at": "2014-04-30T21:28:15.210Z",
"rubric": 2,
"score_type": "SE"
}
},
{
"pk": 1,
"model": "assessment.assessment",
"fields": {
"scorer_id": "Bob",
"feedback": "In sed \u00e1ugue int\u00e9gr\u00ea n\u00e9glegentur, n\u00e9c id \u00e7\u00edb\u00f3 d\u00f4ctus. Doming v\u00f5lupt\u00e0t\u00fam compr\u00e9hens\u00e3m mel n\u00f3, an unum script\u00e3 voluptatibus vis. N\u00e9c sint gr\u00e2\u00e9\u00e7\u00f3 eu.",
"submission_uuid": "1783758f-d0ae-11e3-b495-14109fd8dc43",
"scored_at": "2014-04-30T21:27:59.453Z",
"rubric": 2,
"score_type": "PE"
}
},
{
"pk": 1,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 1,
"option": 25,
"feedback": ""
}
},
{
"pk": 2,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 1,
"option": 19,
"feedback": "Elit nonumy m\u00eal ut, nam \u00e9sse fabul\u00e1s n\u00f3"
}
},
{
"pk": 3,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 1,
"option": 30,
"feedback": "Per in\u00e2n\u00ed dol\u00f3re an, \u00fat s\u00e9a t\u00f4ta qu\u00e0eque d\u00edssenti\u00fant"
}
},
{
"pk": 4,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 2,
"option": 25,
"feedback": ""
}
},
{
"pk": 5,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 2,
"option": 20,
"feedback": ""
}
},
{
"pk": 6,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 2,
"option": 30,
"feedback": ""
}
},
{
"pk": 7,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 3,
"option": 24,
"feedback": ""
}
},
{
"pk": 8,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 3,
"option": 19,
"feedback": ""
}
},
{
"pk": 9,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 3,
"option": 31,
"feedback": ""
}
},
{
"pk": 10,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 4,
"option": 18,
"feedback": ""
}
},
{
"pk": 11,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 4,
"option": 30,
"feedback": ""
}
},
{
"pk": 12,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 4,
"option": 23,
"feedback": ""
}
},
{
"pk": 2,
"model": "assessment.assessmentfeedbackoption",
"fields": {
"text": "I disagree with one or more of the peer assessments of my response."
}
},
{
"pk": 1,
"model": "assessment.assessmentfeedbackoption",
"fields": {
"text": "These assessments were useful."
}
},
{
"pk": 2,
"model": "assessment.assessmentfeedback",
"fields": {
"feedback_text": "Feedback on assessment",
"assessments": [
3
],
"submission_uuid": "387d840a-d0ae-11e3-bb0e-14109fd8dc43",
"options": [
1,
2
]
}
},
{
"pk": 1,
"model": "assessment.assessmentfeedback",
"fields": {
"feedback_text": "Feedback on assessment",
"assessments": [
1
],
"submission_uuid": "1783758f-d0ae-11e3-b495-14109fd8dc43",
"options": [
1,
2
]
}
},
{
"pk": 1,
"model": "assessment.peerworkflow",
"fields": {
"completed_at": "2014-04-30T21:28:41.861Z",
"student_id": "student_1",
"created_at": "2014-04-30T21:26:28.910Z",
"submission_uuid": "1783758f-d0ae-11e3-b495-14109fd8dc43",
"course_id": "edX/Enchantment_101/April_1",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"grading_completed_at": "2014-04-30T21:27:59.543Z"
}
},
{
"pk": 2,
"model": "assessment.peerworkflow",
"fields": {
"completed_at": "2014-04-30T21:27:59.890Z",
"student_id": "Bob",
"created_at": "2014-04-30T21:27:24.230Z",
"submission_uuid": "387d840a-d0ae-11e3-bb0e-14109fd8dc43",
"course_id": "edX/Enchantment_101/April_1",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"grading_completed_at": "2014-04-30T21:28:41.343Z"
}
},
{
"pk": 1,
"model": "assessment.peerworkflowitem",
"fields": {
"scored": true,
"author": 1,
"submission_uuid": "1783758f-d0ae-11e3-b495-14109fd8dc43",
"scorer": 2,
"started_at": "2014-04-30T21:27:24.818Z",
"assessment": 1
}
},
{
"pk": 2,
"model": "assessment.peerworkflowitem",
"fields": {
"scored": true,
"author": 2,
"submission_uuid": "387d840a-d0ae-11e3-bb0e-14109fd8dc43",
"scorer": 1,
"started_at": "2014-04-30T21:28:26.535Z",
"assessment": 3
}
},
{
"pk": 1,
"model": "submissions.studentitem",
"fields": {
"course_id": "edX/Enchantment_101/April_1",
"student_id": "student_1",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"item_type": "openassessment"
}
},
{
"pk": 2,
"model": "submissions.studentitem",
"fields": {
"course_id": "edX/Enchantment_101/April_1",
"student_id": "Bob",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"item_type": "openassessment"
}
},
{
"pk": 2,
"model": "submissions.submission",
"fields": {
"submitted_at": "2014-04-30T21:27:24.173Z",
"student_item": 2,
"created_at": "2014-04-30T21:27:24.181Z",
"raw_answer": "{\"text\": \"E\\u00e3 \\u00e9um quis d\\u00ed\\u00e7o \\u00e9l\\u00e2b\\u00f3r\\u00e3ret. N\\u00e1m in \\u00e7\\u00f4mmune p\\u00f3nder\\u00fam apeirian, te \\u00e2lii m\\u00e1zim \\u00ednt\\u00e9ll\\u00eagat nec, ex \\u00e9leif\\u00e9nd el\\u00f3quenti\\u00e2m usu. His no n\\u00f3vum lu\\u00e7ilius, \\u00e0utem \\u00e3\\u00e9que vix \\u00e0d.\"}",
"attempt_number": 1,
"uuid": "387d840a-d0ae-11e3-bb0e-14109fd8dc43"
}
},
{
"pk": 1,
"model": "submissions.submission",
"fields": {
"submitted_at": "2014-04-30T21:26:28.847Z",
"student_item": 1,
"created_at": "2014-04-30T21:26:28.855Z",
"raw_answer": "{\"text\": \"L\\u00f5r\\u00eam \\u00edpsum d\\u00f4lor sit amet, in d\\u00fao p\\u00f5pul\\u00f3 m\\u00e0nd\\u00e1mus, alienum cons\\u00e9q\\u00faat pers\\u00e9cuti mel \\u00e0n. R\\u00eabum de\\u00e7or\\u00ea \\u00e9\\u00fam an, s\\u00e0ep\\u00e9 p\\u00f5pulo splendid\\u00e9 te p\\u00e9r.\"}",
"attempt_number": 1,
"uuid": "1783758f-d0ae-11e3-b495-14109fd8dc43"
}
},
{
"pk": 1,
"model": "submissions.score",
"fields": {
"reset": false,
"submission": 2,
"created_at": "2014-04-30T21:28:41.770Z",
"points_earned": 9,
"student_item": 2,
"points_possible": 20
}
},
{
"pk": 2,
"model": "submissions.score",
"fields": {
"reset": false,
"submission": 1,
"created_at": "2014-04-30T21:28:49.238Z",
"points_earned": 9,
"student_item": 1,
"points_possible": 20
}
},
{
"pk": 1,
"model": "submissions.scoresummary",
"fields": {
"highest": 1,
"student_item": 2,
"latest": 1
}
},
{
"pk": 2,
"model": "submissions.scoresummary",
"fields": {
"highest": 2,
"student_item": 1,
"latest": 2
}
}
]
[
{
"pk": 2,
"model": "workflow.assessmentworkflow",
"fields": {
"status": "done",
"uuid": "3884f3cc-d0ae-11e3-9820-14109fd8dc43",
"created": "2014-04-30T21:27:24.236Z",
"submission_uuid": "28cebeca-d0ab-11e3-a6ab-14109fd8dc43",
"modified": "2014-04-30T21:28:41.814Z",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"course_id": "edX/Enchantment_101/April_1",
"status_changed": "2014-04-30T21:28:41.814Z"
}
},
{
"pk": 1,
"model": "workflow.assessmentworkflow",
"fields": {
"status": "done",
"uuid": "178beedc-d0ae-11e3-afc3-14109fd8dc43",
"created": "2014-04-30T21:26:28.917Z",
"submission_uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"modified": "2014-04-30T21:28:49.284Z",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"course_id": "edX/Enchantment_101/April_1",
"status_changed": "2014-04-30T21:28:49.284Z"
}
},
{
"pk": 4,
"model": "assessment.rubric",
"fields": {
"content_hash": "1641a7cd3ab1cca196ba04db334641478b636199"
}
},
{
"pk": 1,
"model": "assessment.rubric",
"fields": {
"content_hash": "7405a513d9f99b62dd561816f20cdb90b09b8060"
}
},
{
"pk": 2,
"model": "assessment.rubric",
"fields": {
"content_hash": "bfc465aed851e45c8c4c7635d11f3114aa21f865"
}
},
{
"pk": 3,
"model": "assessment.rubric",
"fields": {
"content_hash": "d722b38507cda59c113983bc2c6014b848a2ae65"
}
},
{
"pk": 1,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 1,
"name": "concise"
}
},
{
"pk": 2,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "How clear is the thinking?",
"rubric": 1,
"name": "clear-headed"
}
},
{
"pk": 3,
"model": "assessment.criterion",
"fields": {
"order_num": 2,
"prompt": "Lastly, how is its form? Punctuation, grammar, and spelling all count.",
"rubric": 1,
"name": "form"
}
},
{
"pk": 4,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 2,
"name": "concise"
}
},
{
"pk": 5,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "How clear is the thinking?",
"rubric": 2,
"name": "clear-headed"
}
},
{
"pk": 6,
"model": "assessment.criterion",
"fields": {
"order_num": 2,
"prompt": "Lastly, how is its form? Punctuation, grammar, and spelling all count.",
"rubric": 2,
"name": "form"
}
},
{
"pk": 7,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 3,
"name": "concise"
}
},
{
"pk": 8,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 4,
"name": "concise"
}
},
{
"pk": 9,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "How clear is the thinking?",
"rubric": 4,
"name": "clear-headed"
}
},
{
"pk": 10,
"model": "assessment.criterion",
"fields": {
"order_num": 2,
"prompt": "Lastly, how is its form? Punctuation, grammar, and spelling all count.",
"rubric": 4,
"name": "form"
}
},
{
"pk": 1,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "\n In \"Cryptonomicon\", Stephenson spent multiple pages talking about breakfast cereal.\n While hilarious, in recent years his work has been anything but 'concise'.\n ",
"points": 0,
"criterion": 1,
"name": "Neal Stephenson (late)"
}
},
{
"pk": 2,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "\n If the author wrote something cyclopean that staggers the mind, score it thus.\n ",
"points": 1,
"criterion": 1,
"name": "HP Lovecraft"
}
},
{
"pk": 3,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "\n Tight prose that conveys a wealth of information about the world in relatively\n few words. Example, \"The door irised open and he stepped inside.\"\n ",
"points": 3,
"criterion": 1,
"name": "Robert Heinlein"
}
},
{
"pk": 4,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "\n When Stephenson still had an editor, his prose was dense, with anecdotes about\n nitrox abuse implying main characters' whole life stories.\n ",
"points": 4,
"criterion": 1,
"name": "Neal Stephenson (early)"
}
},
{
"pk": 5,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Score the work this way if it makes you weep, and the removal of a single\n word would make you sneer.\n ",
"points": 5,
"criterion": 1,
"name": "Earnest Hemingway"
}
},
{
"pk": 6,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 2,
"name": "Yogi Berra"
}
},
{
"pk": 7,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 2,
"name": "Hunter S. Thompson"
}
},
{
"pk": 8,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 2,
"name": "Robert Heinlein"
}
},
{
"pk": 9,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 2,
"name": "Isaac Asimov"
}
},
{
"pk": 10,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Coolly rational, with a firm grasp of the main topics, a crystal-clear train of thought,\n and unemotional examination of the facts. This is the only item explained in this category,\n to show that explained and unexplained items can be mixed.\n ",
"points": 10,
"criterion": 2,
"name": "Spock"
}
},
{
"pk": 11,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 3,
"name": "lolcats"
}
},
{
"pk": 12,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 3,
"name": "Facebook"
}
},
{
"pk": 13,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 3,
"name": "Reddit"
}
},
{
"pk": 14,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 3,
"name": "metafilter"
}
},
{
"pk": 15,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "",
"points": 4,
"criterion": 3,
"name": "Usenet, 1996"
}
},
{
"pk": 16,
"model": "assessment.criterionoption",
"fields": {
"order_num": 5,
"explanation": "",
"points": 5,
"criterion": 3,
"name": "The Elements of Style"
}
},
{
"pk": 17,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 4,
"name": "The Bible"
}
},
{
"pk": 18,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 4,
"name": "Earnest Hemingway"
}
},
{
"pk": 19,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 3,
"criterion": 4,
"name": "Matsuo Basho"
}
},
{
"pk": 20,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 5,
"name": "Eric"
}
},
{
"pk": 21,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 5,
"name": "John"
}
},
{
"pk": 22,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 5,
"name": "Ian"
}
},
{
"pk": 23,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 6,
"name": "IRC"
}
},
{
"pk": 24,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 6,
"name": "Real Email"
}
},
{
"pk": 25,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 6,
"name": "Old-timey letters"
}
},
{
"pk": 26,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 7,
"name": "The Bible"
}
},
{
"pk": 27,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 7,
"name": "Earnest Hemingway"
}
},
{
"pk": 28,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 3,
"criterion": 7,
"name": "Matsuo Basho"
}
},
{
"pk": 29,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "\n In \"Cryptonomicon\", Stephenson spent multiple pages talking about breakfast cereal.\n While hilarious, in recent years his work has been anything but 'concise'.\n ",
"points": 0,
"criterion": 8,
"name": "Neal Stephenson (late)"
}
},
{
"pk": 30,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "\n If the author wrote something cyclopean that staggers the mind, score it thus.\n ",
"points": 1,
"criterion": 8,
"name": "HP Lovecraft"
}
},
{
"pk": 31,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "\n Tight prose that conveys a wealth of information about the world in relatively\n few words. Example, \"The door irised open and he stepped inside.\"\n ",
"points": 3,
"criterion": 8,
"name": "Robert Heinlein"
}
},
{
"pk": 32,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "\n When Stephenson still had an editor, his prose was dense, with anecdotes about\n nitrox abuse implying main characters' whole life stories.\n ",
"points": 4,
"criterion": 8,
"name": "Neal Stephenson (early)"
}
},
{
"pk": 33,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Score the work this way if it makes you weep, and the removal of a single\n word would make you sneer.\n ",
"points": 5,
"criterion": 8,
"name": "Earnest Hemingway"
}
},
{
"pk": 34,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 9,
"name": "Yogi Berra"
}
},
{
"pk": 35,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 9,
"name": "Hunter S. Thompson"
}
},
{
"pk": 36,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 9,
"name": "Robert Heinlein"
}
},
{
"pk": 37,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 9,
"name": "Isaac Asimov"
}
},
{
"pk": 38,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Coolly rational, with a firm grasp of the main topics, a crystal-clear train of thought,\n and unemotional examination of the facts. This is the only item explained in this category,\n to show that explained and unexplained items can be mixed.\n ",
"points": 10,
"criterion": 9,
"name": "Spock"
}
},
{
"pk": 39,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 10,
"name": "lolcats"
}
},
{
"pk": 40,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 10,
"name": "Facebook"
}
},
{
"pk": 41,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 10,
"name": "Reddit"
}
},
{
"pk": 42,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 10,
"name": "metafilter"
}
},
{
"pk": 43,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "",
"points": 4,
"criterion": 10,
"name": "Usenet, 1996"
}
},
{
"pk": 44,
"model": "assessment.criterionoption",
"fields": {
"order_num": 5,
"explanation": "",
"points": 5,
"criterion": 10,
"name": "The Elements of Style"
}
},
{
"pk": 1,
"model": "assessment.assessment",
"fields": {
"scorer_id": "other",
"feedback": "Donec consequat vitae ante in pellentesque.",
"submission_uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"scored_at": "2014-04-30T21:06:35.019Z",
"rubric": 4,
"score_type": "PE"
}
},
{
"pk": 1,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 1,
"option": 32,
"feedback": "Praesent ac lorem ac nunc tincidunt ultricies sit amet ut magna."
}
},
{
"pk": 2,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 1,
"option": 44,
"feedback": "Fusce varius, elit ut blandit consequat, odio ante mollis lectus"
}
},
{
"pk": 3,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 1,
"option": 37,
"feedback": ""
}
},
{
"pk": 1,
"model": "assessment.peerworkflow",
"fields": {
"completed_at": null,
"student_id": "student_1",
"created_at": "2014-04-30T21:02:59.297Z",
"submission_uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"course_id": "edX/Enchantment_101/April_1",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"grading_completed_at": "2014-04-30T21:06:35.090Z"
}
},
{
"pk": 2,
"model": "assessment.peerworkflow",
"fields": {
"completed_at": "2014-04-30T21:06:35.332Z",
"student_id": "other",
"created_at": "2014-04-30T21:05:29.427Z",
"submission_uuid": "28cebeca-d0ab-11e3-a6ab-14109fd8dc43",
"course_id": "edX/Enchantment_101/April_1",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"grading_completed_at": null
}
},
{
"pk": 1,
"model": "assessment.peerworkflowitem",
"fields": {
"scored": false,
"author": 1,
"submission_uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"scorer": 2,
"started_at": "2014-04-30T21:05:29.994Z",
"assessment": 1
}
},
{
"pk": 1,
"model": "submissions.studentitem",
"fields": {
"course_id": "edX/Enchantment_101/April_1",
"student_id": "student_1",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"item_type": "openassessment"
}
},
{
"pk": 2,
"model": "submissions.studentitem",
"fields": {
"course_id": "edX/Enchantment_101/April_1",
"student_id": "other",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"item_type": "openassessment"
}
},
{
"pk": 2,
"model": "submissions.submission",
"fields": {
"submitted_at": "2014-04-30T21:05:29.372Z",
"student_item": 2,
"created_at": "2014-04-30T21:05:29.380Z",
"raw_answer": "{\"text\": \"Etiam vel neque id nunc lacinia tincidunt.\"}",
"attempt_number": 1,
"uuid": "28cebeca-d0ab-11e3-a6ab-14109fd8dc43"
}
},
{
"pk": 1,
"model": "submissions.submission",
"fields": {
"submitted_at": "2014-04-30T21:02:59.234Z",
"student_item": 1,
"created_at": "2014-04-30T21:02:59.241Z",
"raw_answer": "{\"text\": \"Lorem ipsum dolor sit amet\"}",
"attempt_number": 1,
"uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43"
}
}
]
[
{
"pk": 2,
"model": "workflow.assessmentworkflow",
"fields": {
"status": "done",
"uuid": "3884f3cc-d0ae-11e3-9820-14109fd8dc43",
"created": "2014-04-30T21:27:24.236Z",
"submission_uuid": "28cebeca-d0ab-11e3-a6ab-14109fd8dc43",
"modified": "2014-04-30T21:28:41.814Z",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"course_id": "edX/Enchantment_101/April_1",
"status_changed": "2014-04-30T21:28:41.814Z"
}
},
{
"pk": 1,
"model": "workflow.assessmentworkflow",
"fields": {
"status": "done",
"uuid": "178beedc-d0ae-11e3-afc3-14109fd8dc43",
"created": "2014-04-30T21:26:28.917Z",
"submission_uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"modified": "2014-04-30T21:28:49.284Z",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"course_id": "edX/Enchantment_101/April_1",
"status_changed": "2014-04-30T21:28:49.284Z"
}
},
{
"pk": 4,
"model": "assessment.rubric",
"fields": {
"content_hash": "1641a7cd3ab1cca196ba04db334641478b636199"
}
},
{
"pk": 1,
"model": "assessment.rubric",
"fields": {
"content_hash": "7405a513d9f99b62dd561816f20cdb90b09b8060"
}
},
{
"pk": 2,
"model": "assessment.rubric",
"fields": {
"content_hash": "bfc465aed851e45c8c4c7635d11f3114aa21f865"
}
},
{
"pk": 3,
"model": "assessment.rubric",
"fields": {
"content_hash": "d722b38507cda59c113983bc2c6014b848a2ae65"
}
},
{
"pk": 1,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 1,
"name": "concise"
}
},
{
"pk": 2,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "How clear is the thinking?",
"rubric": 1,
"name": "clear-headed"
}
},
{
"pk": 3,
"model": "assessment.criterion",
"fields": {
"order_num": 2,
"prompt": "Lastly, how is its form? Punctuation, grammar, and spelling all count.",
"rubric": 1,
"name": "form"
}
},
{
"pk": 4,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 2,
"name": "concise"
}
},
{
"pk": 5,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "How clear is the thinking?",
"rubric": 2,
"name": "clear-headed"
}
},
{
"pk": 6,
"model": "assessment.criterion",
"fields": {
"order_num": 2,
"prompt": "Lastly, how is its form? Punctuation, grammar, and spelling all count.",
"rubric": 2,
"name": "form"
}
},
{
"pk": 7,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 3,
"name": "concise"
}
},
{
"pk": 8,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 4,
"name": "concise"
}
},
{
"pk": 9,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "How clear is the thinking?",
"rubric": 4,
"name": "clear-headed"
}
},
{
"pk": 10,
"model": "assessment.criterion",
"fields": {
"order_num": 2,
"prompt": "Lastly, how is its form? Punctuation, grammar, and spelling all count.",
"rubric": 4,
"name": "form"
}
},
{
"pk": 1,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "\n In \"Cryptonomicon\", Stephenson spent multiple pages talking about breakfast cereal.\n While hilarious, in recent years his work has been anything but 'concise'.\n ",
"points": 0,
"criterion": 1,
"name": "Neal Stephenson (late)"
}
},
{
"pk": 2,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "\n If the author wrote something cyclopean that staggers the mind, score it thus.\n ",
"points": 1,
"criterion": 1,
"name": "HP Lovecraft"
}
},
{
"pk": 3,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "\n Tight prose that conveys a wealth of information about the world in relatively\n few words. Example, \"The door irised open and he stepped inside.\"\n ",
"points": 3,
"criterion": 1,
"name": "Robert Heinlein"
}
},
{
"pk": 4,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "\n When Stephenson still had an editor, his prose was dense, with anecdotes about\n nitrox abuse implying main characters' whole life stories.\n ",
"points": 4,
"criterion": 1,
"name": "Neal Stephenson (early)"
}
},
{
"pk": 5,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Score the work this way if it makes you weep, and the removal of a single\n word would make you sneer.\n ",
"points": 5,
"criterion": 1,
"name": "Earnest Hemingway"
}
},
{
"pk": 6,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 2,
"name": "Yogi Berra"
}
},
{
"pk": 7,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 2,
"name": "Hunter S. Thompson"
}
},
{
"pk": 8,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 2,
"name": "Robert Heinlein"
}
},
{
"pk": 9,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 2,
"name": "Isaac Asimov"
}
},
{
"pk": 10,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Coolly rational, with a firm grasp of the main topics, a crystal-clear train of thought,\n and unemotional examination of the facts. This is the only item explained in this category,\n to show that explained and unexplained items can be mixed.\n ",
"points": 10,
"criterion": 2,
"name": "Spock"
}
},
{
"pk": 11,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 3,
"name": "lolcats"
}
},
{
"pk": 12,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 3,
"name": "Facebook"
}
},
{
"pk": 13,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 3,
"name": "Reddit"
}
},
{
"pk": 14,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 3,
"name": "metafilter"
}
},
{
"pk": 15,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "",
"points": 4,
"criterion": 3,
"name": "Usenet, 1996"
}
},
{
"pk": 16,
"model": "assessment.criterionoption",
"fields": {
"order_num": 5,
"explanation": "",
"points": 5,
"criterion": 3,
"name": "The Elements of Style"
}
},
{
"pk": 17,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 4,
"name": "The Bible"
}
},
{
"pk": 18,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 4,
"name": "Earnest Hemingway"
}
},
{
"pk": 19,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 3,
"criterion": 4,
"name": "Matsuo Basho"
}
},
{
"pk": 20,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 5,
"name": "Eric"
}
},
{
"pk": 21,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 5,
"name": "John"
}
},
{
"pk": 22,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 5,
"name": "Ian"
}
},
{
"pk": 23,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 6,
"name": "IRC"
}
},
{
"pk": 24,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 6,
"name": "Real Email"
}
},
{
"pk": 25,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 6,
"name": "Old-timey letters"
}
},
{
"pk": 26,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 7,
"name": "The Bible"
}
},
{
"pk": 27,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 7,
"name": "Earnest Hemingway"
}
},
{
"pk": 28,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 3,
"criterion": 7,
"name": "Matsuo Basho"
}
},
{
"pk": 29,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "\n In \"Cryptonomicon\", Stephenson spent multiple pages talking about breakfast cereal.\n While hilarious, in recent years his work has been anything but 'concise'.\n ",
"points": 0,
"criterion": 8,
"name": "Neal Stephenson (late)"
}
},
{
"pk": 30,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "\n If the author wrote something cyclopean that staggers the mind, score it thus.\n ",
"points": 1,
"criterion": 8,
"name": "HP Lovecraft"
}
},
{
"pk": 31,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "\n Tight prose that conveys a wealth of information about the world in relatively\n few words. Example, \"The door irised open and he stepped inside.\"\n ",
"points": 3,
"criterion": 8,
"name": "Robert Heinlein"
}
},
{
"pk": 32,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "\n When Stephenson still had an editor, his prose was dense, with anecdotes about\n nitrox abuse implying main characters' whole life stories.\n ",
"points": 4,
"criterion": 8,
"name": "Neal Stephenson (early)"
}
},
{
"pk": 33,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Score the work this way if it makes you weep, and the removal of a single\n word would make you sneer.\n ",
"points": 5,
"criterion": 8,
"name": "Earnest Hemingway"
}
},
{
"pk": 34,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 9,
"name": "Yogi Berra"
}
},
{
"pk": 35,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 9,
"name": "Hunter S. Thompson"
}
},
{
"pk": 36,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 9,
"name": "Robert Heinlein"
}
},
{
"pk": 37,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 9,
"name": "Isaac Asimov"
}
},
{
"pk": 38,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Coolly rational, with a firm grasp of the main topics, a crystal-clear train of thought,\n and unemotional examination of the facts. This is the only item explained in this category,\n to show that explained and unexplained items can be mixed.\n ",
"points": 10,
"criterion": 9,
"name": "Spock"
}
},
{
"pk": 39,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 10,
"name": "lolcats"
}
},
{
"pk": 40,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 10,
"name": "Facebook"
}
},
{
"pk": 41,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 10,
"name": "Reddit"
}
},
{
"pk": 42,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 10,
"name": "metafilter"
}
},
{
"pk": 43,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "",
"points": 4,
"criterion": 10,
"name": "Usenet, 1996"
}
},
{
"pk": 44,
"model": "assessment.criterionoption",
"fields": {
"order_num": 5,
"explanation": "",
"points": 5,
"criterion": 10,
"name": "The Elements of Style"
}
},
{
"pk": 4,
"model": "assessment.assessment",
"fields": {
"scorer_id": "student_1",
"feedback": "",
"submission_uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"scored_at": "2014-04-30T21:07:53.168Z",
"rubric": 4,
"score_type": "SE"
}
},
{
"pk": 3,
"model": "assessment.assessment",
"fields": {
"scorer_id": "student_1",
"feedback": "Donec eu turpis id turpis ornare auctor id ac justo",
"submission_uuid": "28cebeca-d0ab-11e3-a6ab-14109fd8dc43",
"scored_at": "2014-04-30T21:07:46.133Z",
"rubric": 4,
"score_type": "PE"
}
},
{
"pk": 2,
"model": "assessment.assessment",
"fields": {
"scorer_id": "other",
"feedback": "",
"submission_uuid": "28cebeca-d0ab-11e3-a6ab-14109fd8dc43",
"scored_at": "2014-04-30T21:06:59.953Z",
"rubric": 4,
"score_type": "SE"
}
},
{
"pk": 1,
"model": "assessment.assessment",
"fields": {
"scorer_id": "other",
"feedback": "Donec consequat vitae ante in pellentesque.",
"submission_uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"scored_at": "2014-04-30T21:06:35.019Z",
"rubric": 4,
"score_type": "PE"
}
},
{
"pk": 1,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 1,
"option": 32,
"feedback": "Praesent ac lorem ac nunc tincidunt ultricies sit amet ut magna."
}
},
{
"pk": 2,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 1,
"option": 44,
"feedback": "Fusce varius, elit ut blandit consequat, odio ante mollis lectus"
}
},
{
"pk": 3,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 1,
"option": 37,
"feedback": ""
}
},
{
"pk": 4,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 2,
"option": 33,
"feedback": ""
}
},
{
"pk": 5,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 2,
"option": 44,
"feedback": ""
}
},
{
"pk": 6,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 2,
"option": 38,
"feedback": ""
}
},
{
"pk": 7,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 3,
"option": 32,
"feedback": "Aenean vehicula nunc quis semper porttitor. "
}
},
{
"pk": 8,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 3,
"option": 42,
"feedback": "Etiam vitae facilisis ante, in tristique lacus."
}
},
{
"pk": 9,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 3,
"option": 38,
"feedback": ""
}
},
{
"pk": 10,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 4,
"option": 43,
"feedback": ""
}
},
{
"pk": 11,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 4,
"option": 38,
"feedback": ""
}
},
{
"pk": 12,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 4,
"option": 31,
"feedback": ""
}
},
{
"pk": 1,
"model": "assessment.peerworkflow",
"fields": {
"completed_at": "2014-04-30T21:07:46.612Z",
"student_id": "student_1",
"created_at": "2014-04-30T21:02:59.297Z",
"submission_uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"course_id": "edX/Enchantment_101/April_1",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"grading_completed_at": "2014-04-30T21:06:35.090Z"
}
},
{
"pk": 2,
"model": "assessment.peerworkflow",
"fields": {
"completed_at": "2014-04-30T21:06:35.332Z",
"student_id": "other",
"created_at": "2014-04-30T21:05:29.427Z",
"submission_uuid": "28cebeca-d0ab-11e3-a6ab-14109fd8dc43",
"course_id": "edX/Enchantment_101/April_1",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"grading_completed_at": "2014-04-30T21:07:46.204Z"
}
},
{
"pk": 1,
"model": "assessment.peerworkflowitem",
"fields": {
"scored": true,
"author": 1,
"submission_uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"scorer": 2,
"started_at": "2014-04-30T21:05:29.994Z",
"assessment": 1
}
},
{
"pk": 2,
"model": "assessment.peerworkflowitem",
"fields": {
"scored": true,
"author": 2,
"submission_uuid": "28cebeca-d0ab-11e3-a6ab-14109fd8dc43",
"scorer": 1,
"started_at": "2014-04-30T21:07:14.216Z",
"assessment": 3
}
},
{
"pk": 1,
"model": "submissions.studentitem",
"fields": {
"course_id": "edX/Enchantment_101/April_1",
"student_id": "student_1",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"item_type": "openassessment"
}
},
{
"pk": 2,
"model": "submissions.studentitem",
"fields": {
"course_id": "edX/Enchantment_101/April_1",
"student_id": "other",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"item_type": "openassessment"
}
},
{
"pk": 2,
"model": "submissions.submission",
"fields": {
"submitted_at": "2014-04-30T21:05:29.372Z",
"student_item": 2,
"created_at": "2014-04-30T21:05:29.380Z",
"raw_answer": "{\"text\": \"Etiam vel neque id nunc lacinia tincidunt.\"}",
"attempt_number": 1,
"uuid": "28cebeca-d0ab-11e3-a6ab-14109fd8dc43"
}
},
{
"pk": 1,
"model": "submissions.submission",
"fields": {
"submitted_at": "2014-04-30T21:02:59.234Z",
"student_item": 1,
"created_at": "2014-04-30T21:02:59.241Z",
"raw_answer": "{\"text\": \"Lorem ipsum dolor sit amet\"}",
"attempt_number": 1,
"uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43"
}
},
{
"pk": 1,
"model": "submissions.score",
"fields": {
"reset": false,
"submission": 2,
"created_at": "2014-04-30T21:07:46.524Z",
"points_earned": 17,
"student_item": 2,
"points_possible": 20
}
},
{
"pk": 2,
"model": "submissions.score",
"fields": {
"reset": false,
"submission": 1,
"created_at": "2014-04-30T21:07:53.534Z",
"points_earned": 12,
"student_item": 1,
"points_possible": 20
}
},
{
"pk": 1,
"model": "submissions.scoresummary",
"fields": {
"highest": 1,
"student_item": 2,
"latest": 1
}
},
{
"pk": 2,
"model": "submissions.scoresummary",
"fields": {
"highest": 2,
"student_item": 1,
"latest": 2
}
}
]
[
{
"pk": 2,
"model": "workflow.assessmentworkflow",
"fields": {
"status": "done",
"uuid": "3884f3cc-d0ae-11e3-9820-14109fd8dc43",
"created": "2014-04-30T21:27:24.236Z",
"submission_uuid": "28cebeca-d0ab-11e3-a6ab-14109fd8dc43",
"modified": "2014-04-30T21:28:41.814Z",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"course_id": "edX/Enchantment_101/April_1",
"status_changed": "2014-04-30T21:28:41.814Z"
}
},
{
"pk": 1,
"model": "workflow.assessmentworkflow",
"fields": {
"status": "done",
"uuid": "178beedc-d0ae-11e3-afc3-14109fd8dc43",
"created": "2014-04-30T21:26:28.917Z",
"submission_uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"modified": "2014-04-30T21:28:49.284Z",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"course_id": "edX/Enchantment_101/April_1",
"status_changed": "2014-04-30T21:28:49.284Z"
}
},
{
"pk": 4,
"model": "assessment.rubric",
"fields": {
"content_hash": "1641a7cd3ab1cca196ba04db334641478b636199"
}
},
{
"pk": 1,
"model": "assessment.rubric",
"fields": {
"content_hash": "7405a513d9f99b62dd561816f20cdb90b09b8060"
}
},
{
"pk": 2,
"model": "assessment.rubric",
"fields": {
"content_hash": "bfc465aed851e45c8c4c7635d11f3114aa21f865"
}
},
{
"pk": 3,
"model": "assessment.rubric",
"fields": {
"content_hash": "d722b38507cda59c113983bc2c6014b848a2ae65"
}
},
{
"pk": 1,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 1,
"name": "concise"
}
},
{
"pk": 2,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "How clear is the thinking?",
"rubric": 1,
"name": "clear-headed"
}
},
{
"pk": 3,
"model": "assessment.criterion",
"fields": {
"order_num": 2,
"prompt": "Lastly, how is its form? Punctuation, grammar, and spelling all count.",
"rubric": 1,
"name": "form"
}
},
{
"pk": 4,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 2,
"name": "concise"
}
},
{
"pk": 5,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "How clear is the thinking?",
"rubric": 2,
"name": "clear-headed"
}
},
{
"pk": 6,
"model": "assessment.criterion",
"fields": {
"order_num": 2,
"prompt": "Lastly, how is its form? Punctuation, grammar, and spelling all count.",
"rubric": 2,
"name": "form"
}
},
{
"pk": 7,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 3,
"name": "concise"
}
},
{
"pk": 8,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 4,
"name": "concise"
}
},
{
"pk": 9,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "How clear is the thinking?",
"rubric": 4,
"name": "clear-headed"
}
},
{
"pk": 10,
"model": "assessment.criterion",
"fields": {
"order_num": 2,
"prompt": "Lastly, how is its form? Punctuation, grammar, and spelling all count.",
"rubric": 4,
"name": "form"
}
},
{
"pk": 1,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "\n In \"Cryptonomicon\", Stephenson spent multiple pages talking about breakfast cereal.\n While hilarious, in recent years his work has been anything but 'concise'.\n ",
"points": 0,
"criterion": 1,
"name": "Neal Stephenson (late)"
}
},
{
"pk": 2,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "\n If the author wrote something cyclopean that staggers the mind, score it thus.\n ",
"points": 1,
"criterion": 1,
"name": "HP Lovecraft"
}
},
{
"pk": 3,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "\n Tight prose that conveys a wealth of information about the world in relatively\n few words. Example, \"The door irised open and he stepped inside.\"\n ",
"points": 3,
"criterion": 1,
"name": "Robert Heinlein"
}
},
{
"pk": 4,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "\n When Stephenson still had an editor, his prose was dense, with anecdotes about\n nitrox abuse implying main characters' whole life stories.\n ",
"points": 4,
"criterion": 1,
"name": "Neal Stephenson (early)"
}
},
{
"pk": 5,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Score the work this way if it makes you weep, and the removal of a single\n word would make you sneer.\n ",
"points": 5,
"criterion": 1,
"name": "Earnest Hemingway"
}
},
{
"pk": 6,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 2,
"name": "Yogi Berra"
}
},
{
"pk": 7,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 2,
"name": "Hunter S. Thompson"
}
},
{
"pk": 8,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 2,
"name": "Robert Heinlein"
}
},
{
"pk": 9,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 2,
"name": "Isaac Asimov"
}
},
{
"pk": 10,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Coolly rational, with a firm grasp of the main topics, a crystal-clear train of thought,\n and unemotional examination of the facts. This is the only item explained in this category,\n to show that explained and unexplained items can be mixed.\n ",
"points": 10,
"criterion": 2,
"name": "Spock"
}
},
{
"pk": 11,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 3,
"name": "lolcats"
}
},
{
"pk": 12,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 3,
"name": "Facebook"
}
},
{
"pk": 13,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 3,
"name": "Reddit"
}
},
{
"pk": 14,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 3,
"name": "metafilter"
}
},
{
"pk": 15,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "",
"points": 4,
"criterion": 3,
"name": "Usenet, 1996"
}
},
{
"pk": 16,
"model": "assessment.criterionoption",
"fields": {
"order_num": 5,
"explanation": "",
"points": 5,
"criterion": 3,
"name": "The Elements of Style"
}
},
{
"pk": 17,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 4,
"name": "The Bible"
}
},
{
"pk": 18,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 4,
"name": "Earnest Hemingway"
}
},
{
"pk": 19,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 3,
"criterion": 4,
"name": "Matsuo Basho"
}
},
{
"pk": 20,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 5,
"name": "Eric"
}
},
{
"pk": 21,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 5,
"name": "John"
}
},
{
"pk": 22,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 5,
"name": "Ian"
}
},
{
"pk": 23,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 6,
"name": "IRC"
}
},
{
"pk": 24,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 6,
"name": "Real Email"
}
},
{
"pk": 25,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 6,
"name": "Old-timey letters"
}
},
{
"pk": 26,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 7,
"name": "The Bible"
}
},
{
"pk": 27,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 7,
"name": "Earnest Hemingway"
}
},
{
"pk": 28,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 3,
"criterion": 7,
"name": "Matsuo Basho"
}
},
{
"pk": 29,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "\n In \"Cryptonomicon\", Stephenson spent multiple pages talking about breakfast cereal.\n While hilarious, in recent years his work has been anything but 'concise'.\n ",
"points": 0,
"criterion": 8,
"name": "Neal Stephenson (late)"
}
},
{
"pk": 30,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "\n If the author wrote something cyclopean that staggers the mind, score it thus.\n ",
"points": 1,
"criterion": 8,
"name": "HP Lovecraft"
}
},
{
"pk": 31,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "\n Tight prose that conveys a wealth of information about the world in relatively\n few words. Example, \"The door irised open and he stepped inside.\"\n ",
"points": 3,
"criterion": 8,
"name": "Robert Heinlein"
}
},
{
"pk": 32,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "\n When Stephenson still had an editor, his prose was dense, with anecdotes about\n nitrox abuse implying main characters' whole life stories.\n ",
"points": 4,
"criterion": 8,
"name": "Neal Stephenson (early)"
}
},
{
"pk": 33,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Score the work this way if it makes you weep, and the removal of a single\n word would make you sneer.\n ",
"points": 5,
"criterion": 8,
"name": "Earnest Hemingway"
}
},
{
"pk": 34,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 9,
"name": "Yogi Berra"
}
},
{
"pk": 35,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 9,
"name": "Hunter S. Thompson"
}
},
{
"pk": 36,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 9,
"name": "Robert Heinlein"
}
},
{
"pk": 37,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 9,
"name": "Isaac Asimov"
}
},
{
"pk": 38,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Coolly rational, with a firm grasp of the main topics, a crystal-clear train of thought,\n and unemotional examination of the facts. This is the only item explained in this category,\n to show that explained and unexplained items can be mixed.\n ",
"points": 10,
"criterion": 9,
"name": "Spock"
}
},
{
"pk": 39,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 10,
"name": "lolcats"
}
},
{
"pk": 40,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 10,
"name": "Facebook"
}
},
{
"pk": 41,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 10,
"name": "Reddit"
}
},
{
"pk": 42,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 10,
"name": "metafilter"
}
},
{
"pk": 43,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "",
"points": 4,
"criterion": 10,
"name": "Usenet, 1996"
}
},
{
"pk": 44,
"model": "assessment.criterionoption",
"fields": {
"order_num": 5,
"explanation": "",
"points": 5,
"criterion": 10,
"name": "The Elements of Style"
}
},
{
"pk": 2,
"model": "assessment.assessment",
"fields": {
"scorer_id": "other",
"feedback": "",
"submission_uuid": "28cebeca-d0ab-11e3-a6ab-14109fd8dc43",
"scored_at": "2014-04-30T21:06:59.953Z",
"rubric": 4,
"score_type": "SE"
}
},
{
"pk": 1,
"model": "assessment.assessment",
"fields": {
"scorer_id": "other",
"feedback": "Donec consequat vitae ante in pellentesque.",
"submission_uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"scored_at": "2014-04-30T21:06:35.019Z",
"rubric": 4,
"score_type": "PE"
}
},
{
"pk": 1,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 1,
"option": 32,
"feedback": "Praesent ac lorem ac nunc tincidunt ultricies sit amet ut magna."
}
},
{
"pk": 2,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 1,
"option": 44,
"feedback": "Fusce varius, elit ut blandit consequat, odio ante mollis lectus"
}
},
{
"pk": 3,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 1,
"option": 37,
"feedback": ""
}
},
{
"pk": 4,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 2,
"option": 33,
"feedback": ""
}
},
{
"pk": 5,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 2,
"option": 44,
"feedback": ""
}
},
{
"pk": 6,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 2,
"option": 38,
"feedback": ""
}
},
{
"pk": 1,
"model": "assessment.peerworkflow",
"fields": {
"completed_at": null,
"student_id": "student_1",
"created_at": "2014-04-30T21:02:59.297Z",
"submission_uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"course_id": "edX/Enchantment_101/April_1",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"grading_completed_at": "2014-04-30T21:06:35.090Z"
}
},
{
"pk": 2,
"model": "assessment.peerworkflow",
"fields": {
"completed_at": "2014-04-30T21:06:35.332Z",
"student_id": "other",
"created_at": "2014-04-30T21:05:29.427Z",
"submission_uuid": "28cebeca-d0ab-11e3-a6ab-14109fd8dc43",
"course_id": "edX/Enchantment_101/April_1",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"grading_completed_at": null
}
},
{
"pk": 1,
"model": "assessment.peerworkflowitem",
"fields": {
"scored": false,
"author": 1,
"submission_uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"scorer": 2,
"started_at": "2014-04-30T21:05:29.994Z",
"assessment": 1
}
},
{
"pk": 1,
"model": "submissions.studentitem",
"fields": {
"course_id": "edX/Enchantment_101/April_1",
"student_id": "student_1",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"item_type": "openassessment"
}
},
{
"pk": 2,
"model": "submissions.studentitem",
"fields": {
"course_id": "edX/Enchantment_101/April_1",
"student_id": "other",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"item_type": "openassessment"
}
},
{
"pk": 2,
"model": "submissions.submission",
"fields": {
"submitted_at": "2014-04-30T21:05:29.372Z",
"student_item": 2,
"created_at": "2014-04-30T21:05:29.380Z",
"raw_answer": "{\"text\": \"Etiam vel neque id nunc lacinia tincidunt.\"}",
"attempt_number": 1,
"uuid": "28cebeca-d0ab-11e3-a6ab-14109fd8dc43"
}
},
{
"pk": 1,
"model": "submissions.submission",
"fields": {
"submitted_at": "2014-04-30T21:02:59.234Z",
"student_item": 1,
"created_at": "2014-04-30T21:02:59.241Z",
"raw_answer": "{\"text\": \"Lorem ipsum dolor sit amet\"}",
"attempt_number": 1,
"uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43"
}
}
]
[
{
"pk": 1,
"model": "workflow.assessmentworkflow",
"fields": {
"status": "done",
"uuid": "178beedc-d0ae-11e3-afc3-14109fd8dc43",
"created": "2014-04-30T21:26:28.917Z",
"submission_uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"modified": "2014-04-30T21:28:49.284Z",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"course_id": "edX/Enchantment_101/April_1",
"status_changed": "2014-04-30T21:28:49.284Z"
}
},
{
"pk": 1,
"model": "assessment.rubric",
"fields": {
"content_hash": "7405a513d9f99b62dd561816f20cdb90b09b8060"
}
},
{
"pk": 2,
"model": "assessment.rubric",
"fields": {
"content_hash": "bfc465aed851e45c8c4c7635d11f3114aa21f865"
}
},
{
"pk": 3,
"model": "assessment.rubric",
"fields": {
"content_hash": "d722b38507cda59c113983bc2c6014b848a2ae65"
}
},
{
"pk": 1,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 1,
"name": "concise"
}
},
{
"pk": 2,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "How clear is the thinking?",
"rubric": 1,
"name": "clear-headed"
}
},
{
"pk": 3,
"model": "assessment.criterion",
"fields": {
"order_num": 2,
"prompt": "Lastly, how is its form? Punctuation, grammar, and spelling all count.",
"rubric": 1,
"name": "form"
}
},
{
"pk": 4,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 2,
"name": "concise"
}
},
{
"pk": 5,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "How clear is the thinking?",
"rubric": 2,
"name": "clear-headed"
}
},
{
"pk": 6,
"model": "assessment.criterion",
"fields": {
"order_num": 2,
"prompt": "Lastly, how is its form? Punctuation, grammar, and spelling all count.",
"rubric": 2,
"name": "form"
}
},
{
"pk": 7,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "How concise is it?",
"rubric": 3,
"name": "concise"
}
},
{
"pk": 1,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "\n In \"Cryptonomicon\", Stephenson spent multiple pages talking about breakfast cereal.\n While hilarious, in recent years his work has been anything but 'concise'.\n ",
"points": 0,
"criterion": 1,
"name": "Neal Stephenson (late)"
}
},
{
"pk": 2,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "\n If the author wrote something cyclopean that staggers the mind, score it thus.\n ",
"points": 1,
"criterion": 1,
"name": "HP Lovecraft"
}
},
{
"pk": 3,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "\n Tight prose that conveys a wealth of information about the world in relatively\n few words. Example, \"The door irised open and he stepped inside.\"\n ",
"points": 3,
"criterion": 1,
"name": "Robert Heinlein"
}
},
{
"pk": 4,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "\n When Stephenson still had an editor, his prose was dense, with anecdotes about\n nitrox abuse implying main characters' whole life stories.\n ",
"points": 4,
"criterion": 1,
"name": "Neal Stephenson (early)"
}
},
{
"pk": 5,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Score the work this way if it makes you weep, and the removal of a single\n word would make you sneer.\n ",
"points": 5,
"criterion": 1,
"name": "Earnest Hemingway"
}
},
{
"pk": 6,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 2,
"name": "Yogi Berra"
}
},
{
"pk": 7,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 2,
"name": "Hunter S. Thompson"
}
},
{
"pk": 8,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 2,
"name": "Robert Heinlein"
}
},
{
"pk": 9,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 2,
"name": "Isaac Asimov"
}
},
{
"pk": 10,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "\n Coolly rational, with a firm grasp of the main topics, a crystal-clear train of thought,\n and unemotional examination of the facts. This is the only item explained in this category,\n to show that explained and unexplained items can be mixed.\n ",
"points": 10,
"criterion": 2,
"name": "Spock"
}
},
{
"pk": 11,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 3,
"name": "lolcats"
}
},
{
"pk": 12,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 3,
"name": "Facebook"
}
},
{
"pk": 13,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 3,
"name": "Reddit"
}
},
{
"pk": 14,
"model": "assessment.criterionoption",
"fields": {
"order_num": 3,
"explanation": "",
"points": 3,
"criterion": 3,
"name": "metafilter"
}
},
{
"pk": 15,
"model": "assessment.criterionoption",
"fields": {
"order_num": 4,
"explanation": "",
"points": 4,
"criterion": 3,
"name": "Usenet, 1996"
}
},
{
"pk": 16,
"model": "assessment.criterionoption",
"fields": {
"order_num": 5,
"explanation": "",
"points": 5,
"criterion": 3,
"name": "The Elements of Style"
}
},
{
"pk": 17,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 4,
"name": "The Bible"
}
},
{
"pk": 18,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 4,
"name": "Earnest Hemingway"
}
},
{
"pk": 19,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 3,
"criterion": 4,
"name": "Matsuo Basho"
}
},
{
"pk": 20,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 5,
"name": "Eric"
}
},
{
"pk": 21,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 5,
"name": "John"
}
},
{
"pk": 22,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 5,
"name": "Ian"
}
},
{
"pk": 23,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 6,
"name": "IRC"
}
},
{
"pk": 24,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 6,
"name": "Real Email"
}
},
{
"pk": 25,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 2,
"criterion": 6,
"name": "Old-timey letters"
}
},
{
"pk": 26,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "",
"points": 0,
"criterion": 7,
"name": "The Bible"
}
},
{
"pk": 27,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "",
"points": 1,
"criterion": 7,
"name": "Earnest Hemingway"
}
},
{
"pk": 28,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "",
"points": 3,
"criterion": 7,
"name": "Matsuo Basho"
}
},
{
"pk": 1,
"model": "assessment.peerworkflow",
"fields": {
"completed_at": null,
"student_id": "student_1",
"created_at": "2014-04-30T21:02:59.297Z",
"submission_uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"course_id": "edX/Enchantment_101/April_1",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"grading_completed_at": null
}
},
{
"pk": 1,
"model": "submissions.studentitem",
"fields": {
"course_id": "edX/Enchantment_101/April_1",
"student_id": "student_1",
"item_id": "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"item_type": "openassessment"
}
},
{
"pk": 1,
"model": "submissions.submission",
"fields": {
"submitted_at": "2014-04-30T21:02:59.234Z",
"student_item": 1,
"created_at": "2014-04-30T21:02:59.241Z",
"raw_answer": "{\"text\": \"Lorem ipsum dolor sit amet\"}",
"attempt_number": 1,
"uuid": "cf5190b8-d0aa-11e3-a734-14109fd8dc43"
}
}
]
[
{
"pk": 1,
"model": "assessment.rubric",
"fields": {
"content_hash": "57bdaefbe114871f0363bf3d7e843cdec94b2d1d"
}
},
{
"pk": 2,
"model": "assessment.rubric",
"fields": {
"content_hash": "c0580cc523eb09e75a517616a777627ebf85fefc"
}
},
{
"pk": 1,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "\u041d\u043e\u0448 \u0441\u043e\u0438\u0441\u0456\u0455\u044d \u0456\u0455 \u0456\u0442?",
"rubric": 1,
"name": "\u023c\u00f8n\u023c\u0268s\u0247"
}
},
{
"pk": 2,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "\u03c9\u03b1\u0455 \u0442\u043d\u0454 \u03c9\u044f\u03b9\u0442\u0454\u044f \u03c3\u03b7 \u0442\u03c3\u03c1\u03b9\u00a2?",
"rubric": 1,
"name": "\u0151\u0144-t\u0151\u1e55\u00ed\u0107"
}
},
{
"pk": 3,
"model": "assessment.criterion",
"fields": {
"order_num": 0,
"prompt": "\u041d\u043e\u0448 \u0441\u043e\u0438\u0441\u0456\u0455\u044d \u0456\u0455 \u0456\u0442?",
"rubric": 2,
"name": "\u023c\u00f8n\u023c\u0268s\u0247"
}
},
{
"pk": 4,
"model": "assessment.criterion",
"fields": {
"order_num": 1,
"prompt": "\u03c9\u03b1\u0455 \u0442\u043d\u0454 \u03c9\u044f\u03b9\u0442\u0454\u044f \u03c3\u03b7 \u0442\u03c3\u03c1\u03b9\u00a2?",
"rubric": 2,
"name": "\u0151\u0144-t\u0151\u1e55\u00ed\u0107"
}
},
{
"pk": 1,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "\u0287\u0265\u01dd \u028d\u0279\u0131\u0287\u01dd\u0279 p\u0131p \u0250 doo\u0279 \u027eoq.",
"points": 0,
"criterion": 1,
"name": "\uff71oo\u5c3a"
}
},
{
"pk": 2,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "\u1e6a\u1e27\u00eb \u1e85\u1e5b\u00ef\u1e97\u00eb\u1e5b \u1e0b\u00ef\u1e0b \u00e4 \u1e1f\u00e4\u00ef\u1e5b j\u00f6\u1e05.",
"points": 1,
"criterion": 1,
"name": "\ua7fbAi\u1d19"
}
},
{
"pk": 3,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "\u1d1b\u029c\u1d07 \u1d21\u0280\u026a\u1d1b\u1d07\u0280 \u1d05\u026a\u1d05 \u1d00 \u0262\u1d0f\u1d0f\u1d05 \u1d0a\u1d0f\u0299.",
"points": 3,
"criterion": 1,
"name": "\u01e4\u00f8\u00f8\u0111"
}
},
{
"pk": 4,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "\u0287\u0265\u01dd \u028d\u0279\u0131\u0287\u01dd\u0279 p\u0131p \u0250 doo\u0279 \u027eoq.",
"points": 0,
"criterion": 2,
"name": "\uff71oo\u5c3a"
}
},
{
"pk": 5,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "\u1e6a\u1e27\u00eb \u1e85\u1e5b\u00ef\u1e97\u00eb\u1e5b \u1e0b\u00ef\u1e0b \u00e4 \u1e1f\u00e4\u00ef\u1e5b j\u00f6\u1e05.",
"points": 1,
"criterion": 2,
"name": "\ua7fbAi\u1d19"
}
},
{
"pk": 6,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "\u1d1b\u029c\u1d07 \u1d21\u0280\u026a\u1d1b\u1d07\u0280 \u1d05\u026a\u1d05 \u1d00 \u0262\u1d0f\u1d0f\u1d05 \u1d0a\u1d0f\u0299.",
"points": 3,
"criterion": 2,
"name": "\u01e4\u00f8\u00f8\u0111"
}
},
{
"pk": 7,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "\u0287\u0265\u01dd \u028d\u0279\u0131\u0287\u01dd\u0279 p\u0131p \u0250 doo\u0279 \u027eoq.",
"points": 0,
"criterion": 3,
"name": "\uff71oo\u5c3a"
}
},
{
"pk": 8,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "\u1e6a\u1e27\u00eb \u1e85\u1e5b\u00ef\u1e97\u00eb\u1e5b \u1e0b\u00ef\u1e0b \u00e4 \u1e1f\u00e4\u00ef\u1e5b j\u00f6\u1e05.",
"points": 1,
"criterion": 3,
"name": "\ua7fbAi\u1d19"
}
},
{
"pk": 9,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "\u1d1b\u029c\u1d07 \u1d21\u0280\u026a\u1d1b\u1d07\u0280 \u1d05\u026a\u1d05 \u1d00 \u0262\u1d0f\u1d0f\u1d05 \u1d0a\u1d0f\u0299.",
"points": 3,
"criterion": 3,
"name": "\u01e4\u00f8\u00f8\u0111"
}
},
{
"pk": 10,
"model": "assessment.criterionoption",
"fields": {
"order_num": 0,
"explanation": "\u0287\u0265\u01dd \u028d\u0279\u0131\u0287\u01dd\u0279 p\u0131p \u0250 doo\u0279 \u027eoq.",
"points": 0,
"criterion": 4,
"name": "\uff71oo\u5c3a"
}
},
{
"pk": 11,
"model": "assessment.criterionoption",
"fields": {
"order_num": 1,
"explanation": "\u1e6a\u1e27\u00eb \u1e85\u1e5b\u00ef\u1e97\u00eb\u1e5b \u1e0b\u00ef\u1e0b \u00e4 \u1e1f\u00e4\u00ef\u1e5b j\u00f6\u1e05.",
"points": 1,
"criterion": 4,
"name": "\ua7fbAi\u1d19"
}
},
{
"pk": 12,
"model": "assessment.criterionoption",
"fields": {
"order_num": 2,
"explanation": "\u1d1b\u029c\u1d07 \u1d21\u0280\u026a\u1d1b\u1d07\u0280 \u1d05\u026a\u1d05 \u1d00 \u0262\u1d0f\u1d0f\u1d05 \u1d0a\u1d0f\u0299.",
"points": 3,
"criterion": 4,
"name": "\u01e4\u00f8\u00f8\u0111"
}
},
{
"pk": 4,
"model": "assessment.assessment",
"fields": {
"scorer_id": "student_1",
"feedback": "",
"submission_uuid": "8c52cfdc-d1f9-11e3-953c-14109fd8dc43",
"scored_at": "2014-05-02T12:59:54.594Z",
"rubric": 2,
"score_type": "SE"
}
},
{
"pk": 3,
"model": "assessment.assessment",
"fields": {
"scorer_id": "student_1",
"feedback": "\u0547\ufec9\u0e23\u0547 \u0e23\u0547\u027c\u0671\u0e01\ufeed",
"submission_uuid": "99765973-d1f9-11e3-841a-14109fd8dc43",
"scored_at": "2014-05-02T12:59:49.804Z",
"rubric": 2,
"score_type": "PE"
}
},
{
"pk": 2,
"model": "assessment.assessment",
"fields": {
"scorer_id": "\u1e97\u00eb\u1e61\u1e97_\u00fc\u1e61\u00eb\u1e5b",
"feedback": "",
"submission_uuid": "99765973-d1f9-11e3-841a-14109fd8dc43",
"scored_at": "2014-05-02T12:59:40.276Z",
"rubric": 2,
"score_type": "SE"
}
},
{
"pk": 1,
"model": "assessment.assessment",
"fields": {
"scorer_id": "\u1e97\u00eb\u1e61\u1e97_\u00fc\u1e61\u00eb\u1e5b",
"feedback": "\u0547\ufec9\u0e23\u0547 \u0e23\u0547\u027c\u0671\u0e01\ufeed",
"submission_uuid": "8c52cfdc-d1f9-11e3-953c-14109fd8dc43",
"scored_at": "2014-05-02T12:59:35.741Z",
"rubric": 2,
"score_type": "PE"
}
},
{
"pk": 1,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 1,
"option": 9,
"feedback": "\u0547\ufec9\u0e23\u0547 \u0e23\u0547\u027c\u0671\u0e01\ufeed"
}
},
{
"pk": 2,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 1,
"option": 11,
"feedback": ""
}
},
{
"pk": 3,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 2,
"option": 12,
"feedback": ""
}
},
{
"pk": 4,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 2,
"option": 7,
"feedback": ""
}
},
{
"pk": 5,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 3,
"option": 9,
"feedback": "\u0547\ufec9\u0e23\u0547 \u0e23\u0547\u027c\u0671\u0e01\ufeed"
}
},
{
"pk": 6,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 3,
"option": 12,
"feedback": ""
}
},
{
"pk": 7,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 4,
"option": 12,
"feedback": ""
}
},
{
"pk": 8,
"model": "assessment.assessmentpart",
"fields": {
"assessment": 4,
"option": 7,
"feedback": ""
}
},
{
"pk": 2,
"model": "assessment.assessmentfeedbackoption",
"fields": {
"text": "Some comments I received were inappropriate."
}
},
{
"pk": 1,
"model": "assessment.assessmentfeedbackoption",
"fields": {
"text": "These assessments were not useful."
}
},
{
"pk": 1,
"model": "assessment.assessmentfeedback",
"fields": {
"feedback_text": "\u0547\ufec9\u0e23\u0547 \u0e23\u0547\u027c\u0671\u0e01\ufeed",
"assessments": [
1
],
"submission_uuid": "8c52cfdc-d1f9-11e3-953c-14109fd8dc43",
"options": [
1,
2
]
}
},
{
"pk": 1,
"model": "assessment.peerworkflow",
"fields": {
"completed_at": "2014-05-02T12:59:50.263Z",
"student_id": "student_1",
"created_at": "2014-05-02T12:59:08.304Z",
"submission_uuid": "8c52cfdc-d1f9-11e3-953c-14109fd8dc43",
"course_id": "\ud835\udcfd\ud835\udcee\ud835\udcfc\ud835\udcfd_\ud835\udcec\ud835\udcf8\ud835\udcfe\ud835\udcfb\ud835\udcfc\ud835\udcee",
"item_id": "\u1e97\u00eb\u1e61\u1e97_\u00ef\u1e97\u00eb\u1e41",
"grading_completed_at": "2014-05-02T12:59:35.804Z"
}
},
{
"pk": 2,
"model": "assessment.peerworkflow",
"fields": {
"completed_at": "2014-05-02T12:59:36.010Z",
"student_id": "\u1e97\u00eb\u1e61\u1e97_\u00fc\u1e61\u00eb\u1e5b",
"created_at": "2014-05-02T12:59:30.339Z",
"submission_uuid": "99765973-d1f9-11e3-841a-14109fd8dc43",
"course_id": "\ud835\udcfd\ud835\udcee\ud835\udcfc\ud835\udcfd_\ud835\udcec\ud835\udcf8\ud835\udcfe\ud835\udcfb\ud835\udcfc\ud835\udcee",
"item_id": "\u1e97\u00eb\u1e61\u1e97_\u00ef\u1e97\u00eb\u1e41",
"grading_completed_at": "2014-05-02T12:59:49.869Z"
}
},
{
"pk": 1,
"model": "assessment.peerworkflowitem",
"fields": {
"scored": true,
"author": 1,
"submission_uuid": "8c52cfdc-d1f9-11e3-953c-14109fd8dc43",
"scorer": 2,
"started_at": "2014-05-02T12:59:30.927Z",
"assessment": 1
}
},
{
"pk": 2,
"model": "assessment.peerworkflowitem",
"fields": {
"scored": true,
"author": 2,
"submission_uuid": "99765973-d1f9-11e3-841a-14109fd8dc43",
"scorer": 1,
"started_at": "2014-05-02T12:59:45.515Z",
"assessment": 3
}
},
{
"pk": 2,
"model": "workflow.assessmentworkflow",
"fields": {
"status": "done",
"uuid": "997dd6ca-d1f9-11e3-9c70-14109fd8dc43",
"created": "2014-05-02T12:59:30.346Z",
"submission_uuid": "99765973-d1f9-11e3-841a-14109fd8dc43",
"modified": "2014-05-02T12:59:50.217Z",
"item_id": "\u1e97\u00eb\u1e61\u1e97_\u00ef\u1e97\u00eb\u1e41",
"course_id": "\ud835\udcfd\ud835\udcee\ud835\udcfc\ud835\udcfd_\ud835\udcec\ud835\udcf8\ud835\udcfe\ud835\udcfb\ud835\udcfc\ud835\udcee",
"status_changed": "2014-05-02T12:59:50.217Z"
}
},
{
"pk": 1,
"model": "workflow.assessmentworkflow",
"fields": {
"status": "done",
"uuid": "8c5b94d1-d1f9-11e3-9ca3-14109fd8dc43",
"created": "2014-05-02T12:59:08.311Z",
"submission_uuid": "8c52cfdc-d1f9-11e3-953c-14109fd8dc43",
"modified": "2014-05-02T12:59:54.943Z",
"item_id": "\u1e97\u00eb\u1e61\u1e97_\u00ef\u1e97\u00eb\u1e41",
"course_id": "\ud835\udcfd\ud835\udcee\ud835\udcfc\ud835\udcfd_\ud835\udcec\ud835\udcf8\ud835\udcfe\ud835\udcfb\ud835\udcfc\ud835\udcee",
"status_changed": "2014-05-02T12:59:54.943Z"
}
},
{
"pk": 1,
"model": "submissions.studentitem",
"fields": {
"course_id": "\ud835\udcfd\ud835\udcee\ud835\udcfc\ud835\udcfd_\ud835\udcec\ud835\udcf8\ud835\udcfe\ud835\udcfb\ud835\udcfc\ud835\udcee",
"student_id": "student_1",
"item_id": "\u1e97\u00eb\u1e61\u1e97_\u00ef\u1e97\u00eb\u1e41",
"item_type": "openassessment"
}
},
{
"pk": 2,
"model": "submissions.studentitem",
"fields": {
"course_id": "\ud835\udcfd\ud835\udcee\ud835\udcfc\ud835\udcfd_\ud835\udcec\ud835\udcf8\ud835\udcfe\ud835\udcfb\ud835\udcfc\ud835\udcee",
"student_id": "\u1e97\u00eb\u1e61\u1e97_\u00fc\u1e61\u00eb\u1e5b",
"item_id": "\u1e97\u00eb\u1e61\u1e97_\u00ef\u1e97\u00eb\u1e41",
"item_type": "openassessment"
}
},
{
"pk": 2,
"model": "submissions.submission",
"fields": {
"submitted_at": "2014-05-02T12:59:30.283Z",
"student_item": 2,
"created_at": "2014-05-02T12:59:30.290Z",
"raw_answer": "{\"text\": \"\\u0547\\ufec9\\u0e23\\u0547 \\u0e23\\u0547\\u027c\\u0671\\u0e01\\ufeed\"}",
"attempt_number": 1,
"uuid": "99765973-d1f9-11e3-841a-14109fd8dc43"
}
},
{
"pk": 1,
"model": "submissions.submission",
"fields": {
"submitted_at": "2014-05-02T12:59:08.234Z",
"student_item": 1,
"created_at": "2014-05-02T12:59:08.243Z",
"raw_answer": "{\"text\": \"\\u0442\\u0454\\u0455\\u0442 \\u0455\\u0442\\u044f\\u03b9\\u03b7\\ufeed\"}",
"attempt_number": 1,
"uuid": "8c52cfdc-d1f9-11e3-953c-14109fd8dc43"
}
},
{
"pk": 1,
"model": "submissions.score",
"fields": {
"reset": false,
"submission": 2,
"created_at": "2014-05-02T12:59:50.172Z",
"points_earned": 6,
"student_item": 2,
"points_possible": 6
}
},
{
"pk": 2,
"model": "submissions.score",
"fields": {
"reset": false,
"submission": 1,
"created_at": "2014-05-02T12:59:54.898Z",
"points_earned": 4,
"student_item": 1,
"points_possible": 6
}
},
{
"pk": 1,
"model": "submissions.scoresummary",
"fields": {
"highest": 1,
"student_item": 2,
"latest": 1
}
},
{
"pk": 2,
"model": "submissions.scoresummary",
"fields": {
"highest": 2,
"student_item": 1,
"latest": 2
}
}
]
{
"empty": {
"fixture": "db_fixtures/empty.json",
"course_id": "edX/Enchantment_101/April_1",
"expected_csv": {
"assessment": [
[
"id", "submission_uuid", "scored_at", "scorer_id", "score_type",
"points_possible", "feedback"
]
],
"assessment_feedback": [
["submission_uuid", "feedback_text", "options"]
],
"assessment_part": [
["assessment_id", "points_earned", "criterion_name", "option_name", "feedback"]
],
"assessment_feedback_option": [
["id", "text"]
],
"submission": [
["uuid", "student_id", "item_id", "submitted_at", "created_at", "raw_answer"]
],
"score": [
["submission_uuid", "points_earned", "points_possible", "created_at"]
]
}
},
"submitted": {
"fixture": "db_fixtures/submitted.json",
"course_id": "edX/Enchantment_101/April_1",
"expected_csv": {
"submission": [
["uuid", "student_id", "item_id", "submitted_at", "created_at", "raw_answer"],
[
"cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"student_1", "openassessmentblock-poverty-rubric.openassessment.d0.u0",
"2014-04-30 21:02:59.234000+00:00", "2014-04-30 21:02:59.241000+00:00",
"{\"text\": \"Lorem ipsum dolor sit amet\"}"
]
]
}
},
"peer_assessed": {
"fixture": "db_fixtures/peer_assessed.json",
"course_id": "edX/Enchantment_101/April_1",
"expected_csv": {
"assessment": [
[
"id", "submission_uuid", "scored_at", "scorer_id", "score_type",
"points_possible", "feedback"
],
[
"1", "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"2014-04-30 21:06:35.019000+00:00",
"other",
"PE",
"20",
"Donec consequat vitae ante in pellentesque."
]
],
"assessment_part": [
["assessment_id", "points_earned", "criterion_name", "option_name", "feedback"],
["1", "4", "concise", "Neal Stephenson (early)", "Praesent ac lorem ac nunc tincidunt ultricies sit amet ut magna."],
["1", "5", "form", "The Elements of Style", "Fusce varius, elit ut blandit consequat, odio ante mollis lectus"],
["1", "3", "clear-headed", "Isaac Asimov", ""]
]
}
},
"self_assessed": {
"fixture": "db_fixtures/self_assessed.json",
"course_id": "edX/Enchantment_101/April_1",
"expected_csv": {
"assessment": [
[
"id", "submission_uuid", "scored_at", "scorer_id", "score_type",
"points_possible", "feedback"
],
[
"1", "cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"2014-04-30 21:06:35.019000+00:00",
"other",
"PE",
"20",
"Donec consequat vitae ante in pellentesque."
],
[
"2", "28cebeca-d0ab-11e3-a6ab-14109fd8dc43",
"2014-04-30 21:06:59.953000+00:00",
"other",
"SE",
"20",
""
]
],
"assessment_part": [
["assessment_id", "points_earned", "criterion_name", "option_name", "feedback"],
["1", "4", "concise", "Neal Stephenson (early)", "Praesent ac lorem ac nunc tincidunt ultricies sit amet ut magna."],
["1", "5", "form", "The Elements of Style", "Fusce varius, elit ut blandit consequat, odio ante mollis lectus"],
["1", "3", "clear-headed", "Isaac Asimov", ""],
["2", "5", "concise", "Earnest Hemingway", ""],
["2", "5", "form", "The Elements of Style", ""],
["2", "10", "clear-headed", "Spock", ""]
]
}
},
"scored": {
"fixture": "db_fixtures/scored.json",
"course_id": "edX/Enchantment_101/April_1",
"expected_csv": {
"score": [
["submission_uuid", "points_earned", "points_possible", "created_at"],
[
"cf5190b8-d0aa-11e3-a734-14109fd8dc43",
"12", "20",
"2014-04-30 21:07:53.534000+00:00"
],
[
"28cebeca-d0ab-11e3-a6ab-14109fd8dc43",
"17", "20",
"2014-04-30 21:07:46.524000+00:00"
]
]
}
},
"feedback_on_assessment": {
"fixture": "db_fixtures/feedback_on_assessment.json",
"course_id": "edX/Enchantment_101/April_1",
"expected_csv": {
"assessment_feedback": [
["submission_uuid", "feedback_text", "options"],
[
"1783758f-d0ae-11e3-b495-14109fd8dc43",
"Feedback on assessment",
"1,2"
],
[
"387d840a-d0ae-11e3-bb0e-14109fd8dc43",
"Feedback on assessment",
"1,2"
]
],
"assessment_feedback_option": [
["id", "text"],
["1", "These assessments were useful."],
["2", "I disagree with one or more of the peer assessments of my response."]
]
}
}
}
# -*- coding: utf-8 -*-
"""
Tests for openassessment data aggregation.
"""
import os.path
from StringIO import StringIO
import csv
from django.core.management import call_command
import ddt
from openassessment.test_utils import CacheResetTest
from submissions import api as sub_api
from openassessment.workflow import api as workflow_api
from openassessment.data import CsvWriter
@ddt.ddt
class CsvWriterTest(CacheResetTest):
"""
Test for writing openassessment data to CSV.
"""
longMessage = True
maxDiff = None
@ddt.file_data('data/write_to_csv.json')
def test_write_to_csv(self, data):
# Create in-memory buffers for the CSV file data
output_streams = self._output_streams(data['expected_csv'].keys())
# Load the database fixture
# We use the database fixture to ensure that this test will
# catch backwards-compatibility issues even if the Django model
# implementation or API calls change.
self._load_fixture(data['fixture'])
# Write the data to CSV
writer = CsvWriter(output_streams)
writer.write_to_csv(data['course_id'])
# Check that the CSV matches what we expected
for output_name, expected_csv in data['expected_csv'].iteritems():
output_buffer = output_streams[output_name]
output_buffer.seek(0)
actual_csv = csv.reader(output_buffer)
for expected_row in expected_csv:
try:
actual_row = actual_csv.next()
except StopIteration:
actual_row = None
self.assertEqual(
actual_row, expected_row,
msg="Output name: {}".format(output_name)
)
# Check for extra rows
try:
extra_row = actual_csv.next()
except StopIteration:
extra_row = None
if extra_row is not None:
self.fail(u"CSV contains extra row: {}".format(extra_row))
def test_many_submissions(self):
# Create a lot of submissions
num_submissions = 234
for index in range(num_submissions):
student_item = {
'student_id': "test_user_{}".format(index),
'course_id': 'test_course',
'item_id': 'test_item',
'item_type': 'openassessment',
}
submission_text = "test submission {}".format(index)
submission = sub_api.create_submission(student_item, submission_text)
workflow_api.create_workflow(submission['uuid'])
# Generate a CSV file for the submissions
output_streams = self._output_streams(['submission'])
writer = CsvWriter(output_streams)
writer.write_to_csv('test_course')
# Parse the generated CSV
content = output_streams['submission'].getvalue()
rows = content.split('\n')
# Remove the first row (header) and last row (blank line)
rows = rows[1:-1]
# Check that we have the right number of rows
self.assertEqual(len(rows), num_submissions)
def test_other_course_id(self):
# Try a course ID with no submissions
self._load_fixture('db_fixtures/scored.json')
output_streams = self._output_streams(CsvWriter.MODELS)
writer = CsvWriter(output_streams)
writer.write_to_csv('other_course')
# Expect that each output has only two lines (the header and a blank line)
# since this course has no submissions
for output in output_streams.values():
content = output.getvalue()
rows = content.split('\n')
self.assertEqual(len(rows), 2)
def test_unicode(self):
# Flush out unicode errors
self._load_fixture('db_fixtures/unicode.json')
output_streams = self._output_streams(CsvWriter.MODELS)
CsvWriter(output_streams).write_to_csv(u"𝓽𝓮𝓼𝓽_𝓬𝓸𝓾𝓻𝓼𝓮")
# Check that data ended up in the reports
for output in output_streams.values():
content = output.getvalue()
rows = content.split('\n')
self.assertGreater(len(rows), 2)
def _output_streams(self, names):
"""
Create in-memory buffers.
Args:
names (list of unicode): The output names.
Returns:
dict: map of output names to StringIO objects.
"""
output_streams = dict()
for output_name in names:
output_buffer = StringIO()
self.addCleanup(output_buffer.close)
output_streams[output_name] = output_buffer
return output_streams
def _load_fixture(self, fixture_relpath):
"""
Load a database fixture into the test database.
Args:
fixture_relpath (unicode): Path to the fixture,
relative to the test/data directory.
Returns:
None
"""
fixture_path = os.path.join(
os.path.dirname(__file__), 'data', fixture_relpath
)
print "Loading database fixtures from {}".format(fixture_path)
call_command('loaddata', fixture_path)
......@@ -305,6 +305,10 @@ class OpenAssessmentBlock(
"""
return [
(
"OpenAssessmentBlock Unicode",
load('static/xml/unicode.xml')
),
(
"OpenAssessmentBlock Poverty Rubric",
load('static/xml/poverty_rubric_example.xml')
),
......
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<openassessment>
<title>
Censorship in Public Libraries
......
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<openassessment submission_due="2015-03-11T18:20">
<title>
Global Poverty
......
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<openassessment>
<title>
Promptless rubric
......
<openassessment>
<title>υηι¢σ∂є тєѕт</title>
<rubric>
<prompt>Uᴎiↄobɘ qᴙomqT</prompt>
<criterion feedback='optional'>
<name>ȼønȼɨsɇ</name>
<prompt>Нош соисіѕэ іѕ іт?</prompt>
<option points="0">
<name>アoo尺</name>
<explanation>ʇɥǝ ʍɹıʇǝɹ pıp ɐ dooɹ ɾoq.</explanation>
</option>
<option points="1">
<name>ꟻAiᴙ</name>
<explanation>Ṫḧë ẅṛïẗëṛ ḋïḋ ä ḟäïṛ jöḅ.</explanation>
</option>
<option points="3">
<name>Ǥøøđ</name>
<explanation>ᴛʜᴇ ᴡʀɪᴛᴇʀ ᴅɪᴅ ᴀ ɢᴏᴏᴅ ᴊᴏʙ.</explanation>
</option>
</criterion>
<criterion>
<name>őń-tőṕíć</name>
<prompt>ωαѕ тнє ωяιтєя ση тσρι¢?</prompt>
<option points="0">
<name>アoo尺</name>
<explanation>ʇɥǝ ʍɹıʇǝɹ pıp ɐ dooɹ ɾoq.</explanation>
</option>
<option points="1">
<name>ꟻAiᴙ</name>
<explanation>Ṫḧë ẅṛïẗëṛ ḋïḋ ä ḟäïṛ jöḅ.</explanation>
</option>
<option points="3">
<name>Ǥøøđ</name>
<explanation>ᴛʜᴇ ᴡʀɪᴛᴇʀ ᴅɪᴅ ᴀ ɢᴏᴏᴅ ᴊᴏʙ.</explanation>
</option>
</criterion>
</rubric>
<assessments>
<assessment name="peer-assessment" must_grade="1" must_be_graded_by="1" />
<assessment name="self-assessment" />
</assessments>
</openassessment>
# edX Internal Requirements
git+https://github.com/edx/XBlock.git@3b6e4218bd326f84dbeb0baed7b2b7813ffea3dd#egg=XBlock
git+https://github.com/edx/XBlock.git@fc5fea25c973ec66d8db63cf69a817ce624f5ef5#egg=XBlock
git+https://github.com/edx/xblock-sdk.git@643900aadcb18aaeb7fe67271ca9dbf36e463ee6#egg=xblock-sdk
# Third Party Requirements
boto==2.13.3
defusedxml==0.4.1
dogapi==1.2.1
django>=1.4,<1.5
......
# Grab everything in base requirements
-r base.txt
# There's a unicode bug in the httpretty==0.8 (used by moto)
# Once a new version gets released on PyPi we can use that instead.
git+https://github.com/gabrielfalcao/HTTPretty.git@4c2b10925c86c9b6299c1a04ae334d89fe007ae2#egg=httpretty
ddt==0.7.0
django-nose==1.2
mock==1.0.1
moto==0.2.22
nose==1.3.0
coverage==3.7.1
pep8==1.4.6
......
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