From c6cd367cc9542f92aa6f7efa61fb58dc462e29cb Mon Sep 17 00:00:00 2001 From: Anders Pearson Date: Tue, 5 Apr 2022 10:29:58 +0100 Subject: [PATCH 1/5] move operator import to top no reason that that import needs to be happening deep inside a method --- gradefetcher/gradefetcher.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gradefetcher/gradefetcher.py b/gradefetcher/gradefetcher.py index e31ab68..0b04459 100644 --- a/gradefetcher/gradefetcher.py +++ b/gradefetcher/gradefetcher.py @@ -9,6 +9,7 @@ from django.template import Context from django.utils.translation import ugettext_lazy as _ from markupsafe import Markup +from operator import truediv from web_fragments.fragment import Fragment from xblock.core import XBlock from xblock.fields import Integer, Scope, String @@ -400,8 +401,6 @@ def grade_user(self, data, suffix=""): if "grade" in result: grades.append(result["grade"]) if len(grades) > 1: - from operator import truediv - total_grade = 0 for g in grades: total_grade += g From 19c438af2496e7b10508785148ca2048bd5ebb2a Mon Sep 17 00:00:00 2001 From: Anders Pearson Date: Tue, 5 Apr 2022 10:37:21 +0100 Subject: [PATCH 2/5] extract grade_from_list() function --- gradefetcher/gradefetcher.py | 13 ++++++++++++- gradefetcher/tests/test_gradefetcher.py | 13 +++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 gradefetcher/tests/test_gradefetcher.py diff --git a/gradefetcher/gradefetcher.py b/gradefetcher/gradefetcher.py index 0b04459..0ccf983 100644 --- a/gradefetcher/gradefetcher.py +++ b/gradefetcher/gradefetcher.py @@ -1,6 +1,7 @@ import logging import os import urllib.parse +from operator import truediv import pkg_resources import requests @@ -9,7 +10,6 @@ from django.template import Context from django.utils.translation import ugettext_lazy as _ from markupsafe import Markup -from operator import truediv from web_fragments.fragment import Fragment from xblock.core import XBlock from xblock.fields import Integer, Scope, String @@ -21,6 +21,17 @@ loader = ResourceLoader(__name__) +def grade_from_list(grades): + if len(grades) > 1: + total_grade = 0 + for g in grades: + total_grade += g + grade = int(truediv(total_grade * 100, len(grades))) + else: + grade = grades[0] * 100 + return grade + + @XBlock.needs("i18n", "user") @XBlock.wants("settings") class GradeFetcherXBlock(XBlock, StudioEditableXBlockMixin): diff --git a/gradefetcher/tests/test_gradefetcher.py b/gradefetcher/tests/test_gradefetcher.py new file mode 100644 index 0000000..3534dac --- /dev/null +++ b/gradefetcher/tests/test_gradefetcher.py @@ -0,0 +1,13 @@ +import unittest + +from gradefetcher.gradefetcher import grade_from_list + + +class GradeFetcherHelperTests(unittest.TestCase): + def test_grade_from_list(self): + assert grade_from_list([0]) == 0 + assert grade_from_list([1]) == 100 + assert grade_from_list([2]) == 200 + assert grade_from_list([0, 0]) == 0 + assert grade_from_list([1, 1]) == 100 + assert grade_from_list([1, 0]) == 50 From 383cb6770c55b142f1665c0fd2c78b1c9f7dd708 Mon Sep 17 00:00:00 2001 From: Anders Pearson Date: Tue, 5 Apr 2022 10:38:21 +0100 Subject: [PATCH 3/5] use grade_from_list() --- gradefetcher/gradefetcher.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/gradefetcher/gradefetcher.py b/gradefetcher/gradefetcher.py index 0ccf983..6c01a51 100644 --- a/gradefetcher/gradefetcher.py +++ b/gradefetcher/gradefetcher.py @@ -411,13 +411,7 @@ def grade_user(self, data, suffix=""): for result in grader_response.json()["results"]: if "grade" in result: grades.append(result["grade"]) - if len(grades) > 1: - total_grade = 0 - for g in grades: - total_grade += g - grade = int(truediv(total_grade * 100, len(grades))) - else: - grade = grades[0] * 100 + grade = grade_from_list(grades) reasons = [] for result in grader_response.json()["results"]: if "grade" in result: From 14fcddd6353988a4c2412ee432c36ff35df03175 Mon Sep 17 00:00:00 2001 From: Anders Pearson Date: Tue, 5 Apr 2022 10:39:24 +0100 Subject: [PATCH 4/5] use sum() function instead of for loop --- gradefetcher/gradefetcher.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/gradefetcher/gradefetcher.py b/gradefetcher/gradefetcher.py index 6c01a51..71a92fa 100644 --- a/gradefetcher/gradefetcher.py +++ b/gradefetcher/gradefetcher.py @@ -23,9 +23,7 @@ def grade_from_list(grades): if len(grades) > 1: - total_grade = 0 - for g in grades: - total_grade += g + total_grade = sum(grades) grade = int(truediv(total_grade * 100, len(grades))) else: grade = grades[0] * 100 From 0bad2e837a72470cba114f157aeac4b920e679a5 Mon Sep 17 00:00:00 2001 From: Anders Pearson Date: Tue, 5 Apr 2022 10:43:23 +0100 Subject: [PATCH 5/5] function docstring --- gradefetcher/gradefetcher.py | 1 + 1 file changed, 1 insertion(+) diff --git a/gradefetcher/gradefetcher.py b/gradefetcher/gradefetcher.py index 71a92fa..e4aeb39 100644 --- a/gradefetcher/gradefetcher.py +++ b/gradefetcher/gradefetcher.py @@ -22,6 +22,7 @@ def grade_from_list(grades): + """take a list of integers and calculate grade from them""" if len(grades) > 1: total_grade = sum(grades) grade = int(truediv(total_grade * 100, len(grades)))