Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-ora2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-ora2
Commits
86b1cdea
Commit
86b1cdea
authored
Apr 06, 2016
by
Diana Huang
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #898 from edx/diana/student-training-issues
Handle IntegrityError according to 1.8 conventions.
parents
b8307ca9
6fa12885
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
32 additions
and
28 deletions
+32
-28
openassessment/assessment/api/peer.py
+18
-16
openassessment/assessment/api/staff.py
+1
-1
openassessment/assessment/models/student_training.py
+7
-6
openassessment/assessment/serializers/training.py
+4
-3
openassessment/assessment/test/test_student_training_api.py
+2
-2
No files found.
openassessment/assessment/api/peer.py
View file @
86b1cdea
...
...
@@ -115,14 +115,15 @@ def on_start(submission_uuid):
"""
try
:
submission
=
sub_api
.
get_submission_and_student
(
submission_uuid
)
workflow
,
__
=
PeerWorkflow
.
objects
.
get_or_create
(
student_id
=
submission
[
'student_item'
][
'student_id'
],
course_id
=
submission
[
'student_item'
][
'course_id'
],
item_id
=
submission
[
'student_item'
][
'item_id'
],
submission_uuid
=
submission_uuid
)
workflow
.
save
()
with
transaction
.
atomic
():
submission
=
sub_api
.
get_submission_and_student
(
submission_uuid
)
workflow
,
__
=
PeerWorkflow
.
objects
.
get_or_create
(
student_id
=
submission
[
'student_item'
][
'student_id'
],
course_id
=
submission
[
'student_item'
][
'course_id'
],
item_id
=
submission
[
'student_item'
][
'item_id'
],
submission_uuid
=
submission_uuid
)
workflow
.
save
()
except
IntegrityError
:
# If we get an integrity error, it means someone else has already
# created a workflow for this submission, so we don't need to do anything.
...
...
@@ -721,14 +722,15 @@ def create_peer_workflow(submission_uuid):
"""
try
:
submission
=
sub_api
.
get_submission_and_student
(
submission_uuid
)
workflow
,
__
=
PeerWorkflow
.
objects
.
get_or_create
(
student_id
=
submission
[
'student_item'
][
'student_id'
],
course_id
=
submission
[
'student_item'
][
'course_id'
],
item_id
=
submission
[
'student_item'
][
'item_id'
],
submission_uuid
=
submission_uuid
)
workflow
.
save
()
with
transaction
.
atomic
():
submission
=
sub_api
.
get_submission_and_student
(
submission_uuid
)
workflow
,
__
=
PeerWorkflow
.
objects
.
get_or_create
(
student_id
=
submission
[
'student_item'
][
'student_id'
],
course_id
=
submission
[
'student_item'
][
'course_id'
],
item_id
=
submission
[
'student_item'
][
'item_id'
],
submission_uuid
=
submission_uuid
)
workflow
.
save
()
except
IntegrityError
:
# If we get an integrity error, it means someone else has already
# created a workflow for this submission, so we don't need to do anything.
...
...
openassessment/assessment/api/staff.py
View file @
86b1cdea
...
...
@@ -2,7 +2,7 @@
Public interface for staff grading, used by students/course staff.
"""
import
logging
from
django.db
import
DatabaseError
,
IntegrityError
,
transaction
from
django.db
import
DatabaseError
,
transaction
from
django.utils.timezone
import
now
from
dogapi
import
dog_stats_api
...
...
openassessment/assessment/models/student_training.py
View file @
86b1cdea
"""
Django models specific to the student training assessment type.
"""
from
django.db
import
models
,
IntegrityError
from
django.db
import
models
,
transaction
,
IntegrityError
from
django.utils
import
timezone
from
submissions
import
api
as
sub_api
from
.training
import
TrainingExample
...
...
@@ -137,11 +137,12 @@ class StudentTrainingWorkflow(models.Model):
next_example
=
available_examples
[
0
]
try
:
StudentTrainingWorkflowItem
.
objects
.
create
(
workflow
=
self
,
order_num
=
order_num
,
training_example
=
next_example
)
with
transaction
.
atomic
():
StudentTrainingWorkflowItem
.
objects
.
create
(
workflow
=
self
,
order_num
=
order_num
,
training_example
=
next_example
)
# If we get an integrity error, it means we've violated a uniqueness constraint
# (someone has created this object after we checked if it existed)
# Since the object already exists, we don't need to do anything
...
...
openassessment/assessment/serializers/training.py
View file @
86b1cdea
...
...
@@ -181,9 +181,10 @@ def deserialize_training_examples(examples, rubric_dict):
example
=
TrainingExample
.
objects
.
get
(
content_hash
=
content_hash
)
except
TrainingExample
.
DoesNotExist
:
try
:
example
=
TrainingExample
.
create_example
(
example_dict
[
'answer'
],
example_dict
[
'options_selected'
],
rubric
)
with
transaction
.
atomic
():
example
=
TrainingExample
.
create_example
(
example_dict
[
'answer'
],
example_dict
[
'options_selected'
],
rubric
)
except
IntegrityError
:
example
=
TrainingExample
.
objects
.
get
(
content_hash
=
content_hash
)
...
...
openassessment/assessment/test/test_student_training_api.py
View file @
86b1cdea
...
...
@@ -103,7 +103,7 @@ class StudentTrainingAssessmentTest(CacheResetTest):
# This will need to create the student training workflow and the first item
# NOTE: we *could* cache the rubric model to reduce the number of queries here,
# but we're selecting it by content hash, which is indexed and should be plenty fast.
with
self
.
assertNumQueries
(
6
):
with
self
.
assertNumQueries
(
8
):
training_api
.
get_training_example
(
self
.
submission_uuid
,
RUBRIC
,
EXAMPLES
)
# Without assessing the first training example, try to retrieve a training example.
...
...
@@ -117,7 +117,7 @@ class StudentTrainingAssessmentTest(CacheResetTest):
# Retrieve the next training example, which requires us to create
# a new workflow item (but not a new workflow).
with
self
.
assertNumQueries
(
6
):
with
self
.
assertNumQueries
(
8
):
training_api
.
get_training_example
(
self
.
submission_uuid
,
RUBRIC
,
EXAMPLES
)
def
test_submitter_is_finished_num_queries
(
self
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment