@@ -424,23 +424,23 @@ class DateRangeSerializer(serializers.Serializer):
424424
425425class EnagementRangeMetricSerializer (serializers .Serializer ):
426426 """
427- Serializes ModuleEngagementMetricRanges ('low ', 'normal ', and 'high ') into
428- the below_average, average , and above_average ranges represented as arrays.
429- If any one of the ranges is not defined, it is not included in the
430- serialized output.
427+ Serializes ModuleEngagementMetricRanges ('bottom ', 'average ', and 'top ') into
428+ the class_rank_bottom, class_rank_average , and class_rank_top ranges
429+ represented as arrays. If any one of the ranges is not defined, it is not
430+ included in the serialized output.
431431 """
432- below_average = serializers .SerializerMethodField ('get_below_average_range ' )
433- average = serializers .SerializerMethodField ('get_average_range ' )
434- above_average = serializers .SerializerMethodField ('get_above_average_range ' )
432+ class_rank_bottom = serializers .SerializerMethodField ('get_class_rank_bottom ' )
433+ class_rank_average = serializers .SerializerMethodField ('get_class_rank_average ' )
434+ class_rank_top = serializers .SerializerMethodField ('get_class_rank_top ' )
435435
436- def get_average_range (self , obj ):
437- return self ._transform_range (obj ['normal_range ' ])
436+ def get_class_rank_average (self , obj ):
437+ return self ._transform_range (obj ['average ' ])
438438
439- def get_below_average_range (self , obj ):
440- return self ._transform_range (obj ['low_range ' ])
439+ def get_class_rank_bottom (self , obj ):
440+ return self ._transform_range (obj ['bottom ' ])
441441
442- def get_above_average_range (self , obj ):
443- return self ._transform_range (obj ['high_range ' ])
442+ def get_class_rank_top (self , obj ):
443+ return self ._transform_range (obj ['top ' ])
444444
445445 def _transform_range (self , metric_range ):
446446 return [metric_range .low_value , metric_range .high_value ] if metric_range else None
@@ -459,15 +459,20 @@ def get_engagement_ranges(self, obj):
459459 }
460460
461461 for metric in engagement_events .EVENTS :
462- low_range_queryset = query_set .filter (metric = metric , range_type = 'low' )
463- normal_range_queryset = query_set .filter (metric = metric , range_type = 'normal' )
464- high_range_queryset = query_set .filter (metric = metric , range_type = 'high' )
462+ # construct the range type to class rank pairs
463+ ranges_ranks = [('normal' , 'average' )]
464+ if metric == 'problem_attempts_per_completed' :
465+ ranges_ranks .extend ([('low' , 'top' ), ('high' , 'bottom' )])
466+ else :
467+ ranges_ranks .extend ([('high' , 'top' ), ('low' , 'bottom' )])
468+
469+ # put together data to be serialized
470+ serializer_kwargs = {}
471+ for range_type , class_rank_type in ranges_ranks :
472+ range_queryset = query_set .filter (metric = metric , range_type = range_type )
473+ serializer_kwargs [class_rank_type ] = range_queryset [0 ] if len (range_queryset ) else None
465474 engagement_ranges .update ({
466- metric : EnagementRangeMetricSerializer ({
467- 'low_range' : low_range_queryset [0 ] if len (low_range_queryset ) else None ,
468- 'normal_range' : normal_range_queryset [0 ] if len (normal_range_queryset ) else None ,
469- 'high_range' : high_range_queryset [0 ] if len (high_range_queryset ) else None ,
470- }).data
475+ metric : EnagementRangeMetricSerializer (serializer_kwargs ).data
471476 })
472477
473478 return engagement_ranges
0 commit comments