Commit 920cc3d2 by Eric Fischer

Inform openassessment to clear submission

The openassessment xblock stores some information that assumes
a given student module is never cleared, it needs to be informed of
this operation.
parent 5903ef83
......@@ -219,6 +219,8 @@ def reset_student_attempts(course_id, student, module_state_key, delete_module=F
submissions.SubmissionError: unexpected error occurred while resetting the score in the submissions API.
"""
user_id = anonymous_id_for_user(student, course_id)
submission_cleared = False
try:
# A block may have children. Clear state on children first.
block = modulestore().get_item(module_state_key)
......@@ -229,16 +231,27 @@ def reset_student_attempts(course_id, student, module_state_key, delete_module=F
except StudentModule.DoesNotExist:
# If a particular child doesn't have any state, no big deal, as long as the parent does.
pass
if delete_module:
# Some blocks (openassessment) use StudentModule data as a key for internal submission data.
# Inform these blocks of the reset and allow them to handle their data.
clear_student_state = getattr(block, "clear_student_state", None)
if callable(clear_student_state):
clear_student_state(
user_id=user_id,
course_id=unicode(course_id),
item_id=unicode(module_state_key)
)
submission_cleared = True
except ItemNotFoundError:
log.warning("Could not find %s in modulestore when attempting to reset attempts.", module_state_key)
# Reset the student's score in the submissions API
# Currently this is used only by open assessment (ORA 2)
# We need to do this *before* retrieving the `StudentModule` model,
# because it's possible for a score to exist even if no student module exists.
if delete_module:
# Reset the student's score in the submissions API, if xblock.clear_student_state has not done so already.
# TODO: Remove this once we've finalized and communicated how xblocks should handle clear_student_state
# and made sure that other xblocks relying on the submission api understand this is going away.
# We need to do this before retrieving the `StudentModule` model, because a score may exist with no student module.
if delete_module and not submission_cleared:
sub_api.reset_score(
anonymous_id_for_user(student, course_id),
user_id,
course_id.to_deprecated_string(),
module_state_key.to_deprecated_string(),
)
......
......@@ -77,8 +77,8 @@ git+https://github.com/edx/XBlock.git@xblock-0.4.4#egg=XBlock==0.4.4
-e git+https://github.com/edx/event-tracking.git@0.2.1#egg=event-tracking==0.2.1
-e git+https://github.com/edx/django-splash.git@v0.2#egg=django-splash==0.2
-e git+https://github.com/edx/acid-block.git@e46f9cda8a03e121a00c7e347084d142d22ebfb7#egg=acid-xblock
-e git+https://github.com/edx/edx-ora2.git@0.2.7#egg=ora2==0.2.7
-e git+https://github.com/edx/edx-submissions.git@0.1.3#egg=edx-submissions==0.1.3
-e git+https://github.com/edx/edx-ora2.git@0.2.8#egg=ora2==0.2.8
-e git+https://github.com/edx/edx-submissions.git@0.1.4#egg=edx-submissions==0.1.4
git+https://github.com/edx/ease.git@release-2015-07-14#egg=ease==0.1.3
git+https://github.com/edx/i18n-tools.git@v0.2#egg=i18n-tools==v0.2
git+https://github.com/edx/edx-val.git@0.0.9#egg=edxval==0.0.9
......
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