Commit dac46528 by Eric Fischer Committed by GitHub

Merge pull request #1008 from edx/efischer/fix_columns

Expand course_id column
parents c8ea15a9 0f12fc0a
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# pylint: skip-file
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models, migrations from django.db import models, migrations
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# pylint: skip-file
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
......
# -*- coding: utf-8 -*-
# pylint: skip-file
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('assessment', '0002_staffworkflow'),
]
operations = [
migrations.AlterField(
model_name='aiclassifierset',
name='course_id',
field=models.CharField(max_length=255, db_index=True),
),
migrations.AlterField(
model_name='aigradingworkflow',
name='course_id',
field=models.CharField(max_length=255, db_index=True),
),
migrations.AlterField(
model_name='aitrainingworkflow',
name='course_id',
field=models.CharField(max_length=255, db_index=True),
),
migrations.AlterField(
model_name='peerworkflow',
name='course_id',
field=models.CharField(max_length=255, db_index=True),
),
migrations.AlterField(
model_name='staffworkflow',
name='course_id',
field=models.CharField(max_length=255, db_index=True),
),
migrations.AlterField(
model_name='studenttrainingworkflow',
name='course_id',
field=models.CharField(max_length=255, db_index=True),
),
]
...@@ -152,7 +152,7 @@ class AIClassifierSet(models.Model): ...@@ -152,7 +152,7 @@ class AIClassifierSet(models.Model):
# Though these items are duplicated in the database tables for the AITrainingWorkflow, # Though these items are duplicated in the database tables for the AITrainingWorkflow,
# this is okay because it will drastically speed up the operation of assigning classifiers # this is okay because it will drastically speed up the operation of assigning classifiers
# to AIGradingWorkflows # to AIGradingWorkflows
course_id = models.CharField(max_length=40, db_index=True) course_id = models.CharField(max_length=255, db_index=True)
item_id = models.CharField(max_length=128, db_index=True) item_id = models.CharField(max_length=128, db_index=True)
@classmethod @classmethod
...@@ -201,7 +201,7 @@ class AIClassifierSet(models.Model): ...@@ -201,7 +201,7 @@ class AIClassifierSet(models.Model):
# we can't assign them a score. # we can't assign them a score.
all_criteria = set(classifiers_dict.keys()) all_criteria = set(classifiers_dict.keys())
all_criteria |= set( all_criteria |= set(
criterion.name for criterion in criterion.name for criterion in
rubric_index.find_criteria_without_options() rubric_index.find_criteria_without_options()
) )
missing_criteria = rubric_index.find_missing_criteria(all_criteria) missing_criteria = rubric_index.find_missing_criteria(all_criteria)
...@@ -414,6 +414,7 @@ class AIClassifierSet(models.Model): ...@@ -414,6 +414,7 @@ class AIClassifierSet(models.Model):
# an AWS S3 bucket. # an AWS S3 bucket.
AI_CLASSIFIER_STORAGE = "ora2_ai_classifiers" AI_CLASSIFIER_STORAGE = "ora2_ai_classifiers"
def upload_to_path(instance, filename): # pylint:disable=W0613 def upload_to_path(instance, filename): # pylint:disable=W0613
""" """
Calculate the file path where classifiers should be uploaded. Calculate the file path where classifiers should be uploaded.
...@@ -505,7 +506,7 @@ class AIWorkflow(models.Model): ...@@ -505,7 +506,7 @@ class AIWorkflow(models.Model):
# Though these items are duplicated in the database tables for the submissions app, # Though these items are duplicated in the database tables for the submissions app,
# and every workflow has a reference to a submission entry, this is okay because # and every workflow has a reference to a submission entry, this is okay because
# submissions are immutable. # submissions are immutable.
course_id = models.CharField(max_length=40, db_index=True) course_id = models.CharField(max_length=255, db_index=True)
item_id = models.CharField(max_length=128, db_index=True) item_id = models.CharField(max_length=128, db_index=True)
# Timestamps # Timestamps
......
...@@ -790,7 +790,6 @@ class AssessmentPart(models.Model): ...@@ -790,7 +790,6 @@ class AssessmentPart(models.Model):
msg = u"Missing selections for criteria: {missing}".format(missing=missing_criteria) msg = u"Missing selections for criteria: {missing}".format(missing=missing_criteria)
raise InvalidRubricSelection(msg) raise InvalidRubricSelection(msg)
@classmethod @classmethod
def _check_all_criteria_assessed(cls, rubric_index, selected_criteria, criteria_feedback): def _check_all_criteria_assessed(cls, rubric_index, selected_criteria, criteria_feedback):
""" """
......
...@@ -109,7 +109,7 @@ class PeerWorkflow(models.Model): ...@@ -109,7 +109,7 @@ class PeerWorkflow(models.Model):
student_id = models.CharField(max_length=40, db_index=True) student_id = models.CharField(max_length=40, db_index=True)
item_id = models.CharField(max_length=128, db_index=True) item_id = models.CharField(max_length=128, db_index=True)
course_id = models.CharField(max_length=40, db_index=True) course_id = models.CharField(max_length=255, db_index=True)
submission_uuid = models.CharField(max_length=128, db_index=True, unique=True) submission_uuid = models.CharField(max_length=128, db_index=True, unique=True)
created_at = models.DateTimeField(default=now, db_index=True) created_at = models.DateTimeField(default=now, db_index=True)
completed_at = models.DateTimeField(null=True, db_index=True) completed_at = models.DateTimeField(null=True, db_index=True)
...@@ -341,9 +341,10 @@ class PeerWorkflow(models.Model): ...@@ -341,9 +341,10 @@ class PeerWorkflow(models.Model):
"and student_id<>%s " "and student_id<>%s "
"and pw.cancelled_at is NULL " "and pw.cancelled_at is NULL "
"and pw.id not in ( " "and pw.id not in ( "
"select pwi.author_id " "select pwi.author_id "
"from assessment_peerworkflowitem pwi " "from assessment_peerworkflowitem pwi "
"where pwi.scorer_id=%s); ", "where pwi.scorer_id=%s"
"); ",
[self.course_id, self.item_id, self.student_id, self.id] [self.course_id, self.item_id, self.student_id, self.id]
)) ))
workflow_count = len(query) workflow_count = len(query)
...@@ -379,7 +380,9 @@ class PeerWorkflow(models.Model): ...@@ -379,7 +380,9 @@ class PeerWorkflow(models.Model):
""" """
try: try:
item_query = self.graded.filter(submission_uuid=submission_uuid).order_by("-started_at", "-id") # pylint:disable=E1101 item_query = self.graded.filter(
submission_uuid=submission_uuid
).order_by("-started_at", "-id") # pylint:disable=E1101
items = list(item_query[:1]) items = list(item_query[:1])
if not items: if not items:
msg = ( msg = (
...@@ -391,8 +394,10 @@ class PeerWorkflow(models.Model): ...@@ -391,8 +394,10 @@ class PeerWorkflow(models.Model):
item.assessment = assessment item.assessment = assessment
item.save() item.save()
if (not item.author.grading_completed_at if (
and item.author.graded_by.filter(assessment__isnull=False).count() >= num_required_grades): not item.author.grading_completed_at and
item.author.graded_by.filter(assessment__isnull=False).count() >= num_required_grades
):
item.author.grading_completed_at = now() item.author.grading_completed_at = now()
item.author.save() item.author.save()
except (DatabaseError, PeerWorkflowItem.DoesNotExist): except (DatabaseError, PeerWorkflowItem.DoesNotExist):
......
...@@ -27,7 +27,7 @@ class StaffWorkflow(models.Model): ...@@ -27,7 +27,7 @@ class StaffWorkflow(models.Model):
TIME_LIMIT = timedelta(hours=8) TIME_LIMIT = timedelta(hours=8)
scorer_id = models.CharField(max_length=40, db_index=True) scorer_id = models.CharField(max_length=40, db_index=True)
course_id = models.CharField(max_length=40, db_index=True) course_id = models.CharField(max_length=255, db_index=True)
item_id = models.CharField(max_length=128, db_index=True) item_id = models.CharField(max_length=128, db_index=True)
submission_uuid = models.CharField(max_length=128, db_index=True, unique=True) submission_uuid = models.CharField(max_length=128, db_index=True, unique=True)
created_at = models.DateTimeField(default=now, db_index=True) created_at = models.DateTimeField(default=now, db_index=True)
......
...@@ -21,7 +21,7 @@ class StudentTrainingWorkflow(models.Model): ...@@ -21,7 +21,7 @@ class StudentTrainingWorkflow(models.Model):
# jeopardizing data integrity. # jeopardizing data integrity.
student_id = models.CharField(max_length=40, db_index=True) student_id = models.CharField(max_length=40, db_index=True)
item_id = models.CharField(max_length=128, db_index=True) item_id = models.CharField(max_length=128, db_index=True)
course_id = models.CharField(max_length=40, db_index=True) course_id = models.CharField(max_length=255, db_index=True)
class Meta: class Meta:
app_label = "assessment" app_label = "assessment"
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# pylint: skip-file
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
......
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