Fix for grade assertions
This commit is contained in:
@@ -108,20 +108,23 @@ def get_score(submissions_scores, csm_scores, persisted_block, block):
|
||||
_get_score_from_persisted_or_latest_block(persisted_block, block, weight)
|
||||
)
|
||||
|
||||
assert weighted_possible is not None
|
||||
has_valid_denominator = weighted_possible > 0.0
|
||||
graded = _get_graded_from_block(persisted_block, block) if has_valid_denominator else False
|
||||
if weighted_possible is None or weighted_earned is None:
|
||||
return None
|
||||
|
||||
return ProblemScore(
|
||||
raw_earned,
|
||||
raw_possible,
|
||||
weighted_earned,
|
||||
weighted_possible,
|
||||
weight,
|
||||
graded,
|
||||
display_name=display_name_with_default_escaped(block),
|
||||
module_id=block.location,
|
||||
)
|
||||
else:
|
||||
has_valid_denominator = weighted_possible > 0.0
|
||||
graded = _get_graded_from_block(persisted_block, block) if has_valid_denominator else False
|
||||
|
||||
return ProblemScore(
|
||||
raw_earned,
|
||||
raw_possible,
|
||||
weighted_earned,
|
||||
weighted_possible,
|
||||
weight,
|
||||
graded,
|
||||
display_name=display_name_with_default_escaped(block),
|
||||
module_id=block.location,
|
||||
)
|
||||
|
||||
|
||||
def weighted_score(raw_earned, raw_possible, weight):
|
||||
@@ -191,7 +194,10 @@ def _get_score_from_persisted_or_latest_block(persisted_block, block, weight):
|
||||
else:
|
||||
raw_possible = block.transformer_data[GradesTransformer].max_score
|
||||
|
||||
return (raw_earned, raw_possible) + weighted_score(raw_earned, raw_possible, weight)
|
||||
if raw_possible is None:
|
||||
return (raw_earned, raw_possible) + (None, None)
|
||||
else:
|
||||
return (raw_earned, raw_possible) + weighted_score(raw_earned, raw_possible, weight)
|
||||
|
||||
|
||||
def _get_weight_from_block(persisted_block, block):
|
||||
|
||||
@@ -3,6 +3,7 @@ Grades Transformer
|
||||
"""
|
||||
from django.test.client import RequestFactory
|
||||
from functools import reduce as functools_reduce
|
||||
from logging import getLogger
|
||||
|
||||
from courseware.model_data import FieldDataCache
|
||||
from courseware.module_render import get_module_for_descriptor
|
||||
@@ -11,6 +12,9 @@ from openedx.core.lib.block_structure.transformer import BlockStructureTransform
|
||||
from openedx.core.djangoapps.util.user_utils import SystemUser
|
||||
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class GradesTransformer(BlockStructureTransformer):
|
||||
"""
|
||||
The GradesTransformer collects grading information and stores it on
|
||||
@@ -119,8 +123,10 @@ class GradesTransformer(BlockStructureTransformer):
|
||||
Collect the `max_score` from the given module, storing it as a
|
||||
`transformer_block_field` associated with the `GradesTransformer`.
|
||||
"""
|
||||
score = module.max_score()
|
||||
block_structure.set_transformer_block_field(module.location, cls, 'max_score', score)
|
||||
max_score = module.max_score()
|
||||
block_structure.set_transformer_block_field(module.location, cls, 'max_score', max_score)
|
||||
if max_score is None:
|
||||
log.warning("GradesTransformer: max_score is None for {}".format(module.location))
|
||||
|
||||
@staticmethod
|
||||
def _iter_scorable_xmodules(block_structure):
|
||||
|
||||
Reference in New Issue
Block a user