From 3078042e89d180d8f534cf3b81dc98d51e018b62 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 16 Jan 2024 16:44:09 +0000 Subject: [PATCH 1/3] feat: Upgrade Python dependency ora2 (#34064) Commit generated by workflow `openedx/edx-platform/.github/workflows/upgrade-one-python-dependency.yml@refs/heads/master` Co-authored-by: jansenk --- requirements/edx/base.txt | 2 +- requirements/edx/development.txt | 2 +- requirements/edx/doc.txt | 2 +- requirements/edx/testing.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index b077658dbb..8fe5f1b95b 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -787,7 +787,7 @@ openedx-mongodbproxy==0.2.0 # via -r requirements/edx/kernel.in optimizely-sdk==4.1.1 # via -r requirements/edx/bundled.in -ora2==6.0.25 +ora2==6.0.26 # via -r requirements/edx/bundled.in packaging==23.2 # via diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 4ecb8930ff..4eb6605264 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -1324,7 +1324,7 @@ optimizely-sdk==4.1.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -ora2==6.0.25 +ora2==6.0.26 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index bd6f40cb99..c63746adf8 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -929,7 +929,7 @@ openedx-mongodbproxy==0.2.0 # via -r requirements/edx/base.txt optimizely-sdk==4.1.1 # via -r requirements/edx/base.txt -ora2==6.0.25 +ora2==6.0.26 # via -r requirements/edx/base.txt packaging==23.2 # via diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 358fb76339..3622270e2a 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -989,7 +989,7 @@ openedx-mongodbproxy==0.2.0 # via -r requirements/edx/base.txt optimizely-sdk==4.1.1 # via -r requirements/edx/base.txt -ora2==6.0.25 +ora2==6.0.26 # via -r requirements/edx/base.txt packaging==23.2 # via From 73a446d85b9a36c2664f0912dd453ba100ba695d Mon Sep 17 00:00:00 2001 From: ahmed-zubair-1998 <41994834+ahmed-zubair-1998@users.noreply.github.com> Date: Tue, 16 Jan 2024 23:41:15 +0500 Subject: [PATCH 2/3] perf: Reduce database calls when generating problem responses report (#33940) During the process of generatinng report for problem responses, there are two places where N + 1 query problem exist. In both cases, `StudentModule` objects are fetched and looped over where `student.username` field for each object is accessed. This result in a seperate database call to get the username for each student response. This problem is fixed by creating a join to fetch the related table in the original query using `select_related`. In a test conducted on report having 5000 `StudentModule` objects, the number of queries for the request reduced from 8363 to 29. The total time taken for the task reduced from 23764 ms to 7394 ms. --- lms/djangoapps/courseware/user_state_client.py | 2 +- lms/djangoapps/instructor_analytics/basic.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lms/djangoapps/courseware/user_state_client.py b/lms/djangoapps/courseware/user_state_client.py index b893200c21..b85f20175c 100644 --- a/lms/djangoapps/courseware/user_state_client.py +++ b/lms/djangoapps/courseware/user_state_client.py @@ -600,7 +600,7 @@ class DjangoXBlockUserStateClient(XBlockUserStateClient): if scope != Scope.user_state: raise ValueError("Only Scope.user_state is supported") - results = StudentModule.objects.order_by('id').filter(module_state_key=block_key) + results = StudentModule.objects.order_by('id').filter(module_state_key=block_key).select_related('student') p = Paginator(results, settings.USER_STATE_BATCH_SIZE) for page_number in p.page_range: diff --git a/lms/djangoapps/instructor_analytics/basic.py b/lms/djangoapps/instructor_analytics/basic.py index afce0620aa..c7bc6ca6da 100644 --- a/lms/djangoapps/instructor_analytics/basic.py +++ b/lms/djangoapps/instructor_analytics/basic.py @@ -349,7 +349,7 @@ def list_problem_responses(course_key, problem_location, limit_responses=None): smdat = StudentModule.objects.filter( course_id=course_key, module_state_key=problem_key - ) + ).select_related('student') smdat = smdat.order_by('student') if limit_responses is not None: smdat = smdat[:limit_responses] From 00630cf22dd341a8bc607a68691d0cfcd46e999c Mon Sep 17 00:00:00 2001 From: Asespinel <79876430+Asespinel@users.noreply.github.com> Date: Tue, 16 Jan 2024 16:25:05 -0500 Subject: [PATCH 3/3] =?UTF-8?q?refactor:=20changed=20survey=20report=20mes?= =?UTF-8?q?sage=20location=20and=20added=20a=20new=20info=E2=80=A6=20(#340?= =?UTF-8?q?33)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: changed survey report message location and added a new informative sent state * chore: added Generate and Send text on button * chore: added comment to new state column and added reference to static jquery. * fix: fixed non Attribute error when a report hasn't been sent yet --- lms/templates/admin/base_site.html | 4 ++-- openedx/features/survey_report/admin.py | 14 +++++++++++++- .../templates/survey_report/admin_banner.html | 2 ++ .../templates/survey_report/change_list.html | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lms/templates/admin/base_site.html b/lms/templates/admin/base_site.html index fa93f9c3e8..2dfd0bef7a 100644 --- a/lms/templates/admin/base_site.html +++ b/lms/templates/admin/base_site.html @@ -21,6 +21,6 @@ {% endblock %} -{% block header %}{{ block.super }} +{% block messages %}{{ block.super }} {% include "survey_report/admin_banner.html" %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/openedx/features/survey_report/admin.py b/openedx/features/survey_report/admin.py index f2a422de2e..8d4652282b 100644 --- a/openedx/features/survey_report/admin.py +++ b/openedx/features/survey_report/admin.py @@ -21,7 +21,7 @@ class SurveyReportAdmin(admin.ModelAdmin): ) list_display = ( - 'id', 'summary', 'created_at', 'state' + 'id', 'summary', 'created_at', 'report_state' ) actions = ['send_report'] @@ -80,4 +80,16 @@ class SurveyReportAdmin(admin.ModelAdmin): del actions['delete_selected'] return actions + def report_state(self, obj): + """ + Method to define the custom State column with the new "send" state, + to avoid modifying the current models. + """ + try: + if obj.surveyreportupload_set.last().is_uploaded(): + return "Sent" + except AttributeError: + return obj.state.capitalize() + report_state.short_description = 'State' + admin.site.register(SurveyReport, SurveyReportAdmin) diff --git a/openedx/features/survey_report/templates/survey_report/admin_banner.html b/openedx/features/survey_report/templates/survey_report/admin_banner.html index 6a8e2ea92e..e881966f14 100644 --- a/openedx/features/survey_report/templates/survey_report/admin_banner.html +++ b/openedx/features/survey_report/templates/survey_report/admin_banner.html @@ -1,5 +1,6 @@ {% block survey_report_banner %} {% if show_survey_report_banner %} +{% load static %}

Join the Open edX Data Sharing Initiative and shape the future of learning

@@ -31,6 +32,7 @@ {% endif %} +