From df6d8fd2a3ed19d941810fb25e2043c8dd1948e3 Mon Sep 17 00:00:00 2001 From: Vik Paruchuri Date: Wed, 27 Mar 2013 18:20:04 -0400 Subject: [PATCH] Fix issues with progress page and open ended grading --- .../xmodule/xmodule/combined_open_ended_module.py | 4 +++- .../open_ended_grading_classes/xblock_field_types.py | 12 ++++++++++++ common/lib/xmodule/xmodule/peer_grading_module.py | 3 ++- .../xmodule/templates/combinedopenended/default.yaml | 1 + .../xmodule/templates/peer_grading/default.yaml | 1 + 5 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 common/lib/xmodule/xmodule/open_ended_grading_classes/xblock_field_types.py diff --git a/common/lib/xmodule/xmodule/combined_open_ended_module.py b/common/lib/xmodule/xmodule/combined_open_ended_module.py index d389fd1c2c..f45ad39e35 100644 --- a/common/lib/xmodule/xmodule/combined_open_ended_module.py +++ b/common/lib/xmodule/xmodule/combined_open_ended_module.py @@ -6,9 +6,10 @@ from pkg_resources import resource_string from xmodule.raw_module import RawDescriptor from .x_module import XModule -from xblock.core import Integer, Scope, BlockScope, ModelType, String, Boolean, Object, Float, List +from xblock.core import Integer, Scope, BlockScope, ModelType, String, Boolean, Object, List from xmodule.open_ended_grading_classes.combined_open_ended_modulev1 import CombinedOpenEndedV1Module, CombinedOpenEndedV1Descriptor from collections import namedtuple +from xmodule.open_ended_grading_classes.xblock_field_types import StringyFloat log = logging.getLogger("mitx.courseware") @@ -68,6 +69,7 @@ class CombinedOpenEndedFields(object): scope=Scope.settings) version = VersionInteger(help="Current version number", default=DEFAULT_VERSION, scope=Scope.settings) data = String(help="XML data for the problem", scope=Scope.content) + weight = StringyFloat(help="How much to weight this problem by", scope=Scope.settings) class CombinedOpenEndedModule(CombinedOpenEndedFields, XModule): diff --git a/common/lib/xmodule/xmodule/open_ended_grading_classes/xblock_field_types.py b/common/lib/xmodule/xmodule/open_ended_grading_classes/xblock_field_types.py new file mode 100644 index 0000000000..ea2986a2ec --- /dev/null +++ b/common/lib/xmodule/xmodule/open_ended_grading_classes/xblock_field_types.py @@ -0,0 +1,12 @@ +from xblock.core import Integer, Float + +class StringyFloat(Float): + """ + A model type that converts from string to floats when reading from json + """ + def from_json(self, value): + try: + return float(value) + except: + return None + diff --git a/common/lib/xmodule/xmodule/peer_grading_module.py b/common/lib/xmodule/xmodule/peer_grading_module.py index e18f2ceca3..be87194c15 100644 --- a/common/lib/xmodule/xmodule/peer_grading_module.py +++ b/common/lib/xmodule/xmodule/peer_grading_module.py @@ -13,6 +13,7 @@ from xmodule.modulestore import Location from xmodule.modulestore.django import modulestore from .timeinfo import TimeInfo from xblock.core import Object, Integer, Boolean, String, Scope +from xmodule.open_ended_grading_classes.xblock_field_types import StringyFloat from xmodule.open_ended_grading_classes.peer_grading_service import PeerGradingService, GradingServiceError, MockPeerGradingService @@ -26,7 +27,6 @@ IS_GRADED = True EXTERNAL_GRADER_NO_CONTACT_ERROR = "Failed to contact external graders. Please notify course staff." - class PeerGradingFields(object): use_for_single_location = Boolean(help="Whether to use this for a single location or as a panel.", default=USE_FOR_SINGLE_LOCATION, scope=Scope.settings) link_to_location = String(help="The location this problem is linked to.", default=LINK_TO_LOCATION, scope=Scope.settings) @@ -35,6 +35,7 @@ class PeerGradingFields(object): grace_period_string = String(help="Amount of grace to give on the due date.", default=None, scope=Scope.settings) max_grade = Integer(help="The maximum grade that a student can receieve for this problem.", default=MAX_SCORE, scope=Scope.settings) student_data_for_location = Object(help="Student data for a given peer grading problem.", default=json.dumps({}),scope=Scope.student_state) + weight = StringyFloat(help="How much to weight this problem by", scope=Scope.settings) class PeerGradingModule(PeerGradingFields, XModule): diff --git a/common/lib/xmodule/xmodule/templates/combinedopenended/default.yaml b/common/lib/xmodule/xmodule/templates/combinedopenended/default.yaml index 74a764dea1..515d9071b1 100644 --- a/common/lib/xmodule/xmodule/templates/combinedopenended/default.yaml +++ b/common/lib/xmodule/xmodule/templates/combinedopenended/default.yaml @@ -7,6 +7,7 @@ metadata: display_name: Open Ended Response skip_spelling_checks: False accept_file_upload: False + weight: "" data: | diff --git a/common/lib/xmodule/xmodule/templates/peer_grading/default.yaml b/common/lib/xmodule/xmodule/templates/peer_grading/default.yaml index cb8e29dfa2..1ba8f978d6 100644 --- a/common/lib/xmodule/xmodule/templates/peer_grading/default.yaml +++ b/common/lib/xmodule/xmodule/templates/peer_grading/default.yaml @@ -6,6 +6,7 @@ metadata: link_to_location: None is_graded: False max_grade: 1 + weight: "" data: |