Scorable XBlocks and Problem Rescore
The goal of this project is to provide a common interface for creating scorable XBlocks. The idea is to clearly specify what a (potentially third-party) block type needs to implement in order to work properly with the grading service. Additionally, we would like to create a shared implementation for common behaviors. Rescoring problems and resetting attempts are two particular instructor management tasks we would like to create a common implementation for.
Phase 1: ScorableXBlockMixin and SXBM.rescore_problem()
- Create a ScorableXBlockMixin that implements rescore_problem(), providing hook methods for specific block types to marshall and unmarshall their scoring data to and from a common format (dict or namedtuple, perhaps).
- Blocks should be able to opt-out of rescorability, either as a whole or depending on configuration. (Survey-type questions, for instance)
- only_if_higher functionality needs to be preserved.
- Implement mixin and hooks for specific block types. (Start with D&D and ORA)
- Refactor CapaBase to use the mixin. (Optional)
- Document process for 3rd party xblocks to take advantage of this implementation.
- Eventing?
Phase 2: SXBM.reset_attempts()
- Create shared reset_attempts() method, ensuring that necessary.
- Include any additional hooks in specific block types that want to implement reset_attempts.
- Refactor CapaBase to marshall the data needed for reset_attempts
Phase 3: Rescore container blocks
- Implement a rescore task that traverses down from a container block to contained problem blocks
- Provide access to this task in courseware.