From 7b43672718fa290a3beee33f819b018c958f6349 Mon Sep 17 00:00:00 2001 From: Alejandro Cardenas Date: Sun, 11 Dec 2022 10:35:41 -0500 Subject: [PATCH 1/9] feat: add generate report button in admin --- lms/urls.py | 6 +++ openedx/features/survey_report/admin.py | 6 ++- openedx/features/survey_report/api.py | 30 ++++++++----- .../management/commands/generate_report.py | 11 +++-- .../migrations/0003_auto_20221211_1533.py | 43 +++++++++++++++++++ openedx/features/survey_report/models.py | 32 +++++++++++--- openedx/features/survey_report/tasks.py | 33 ++++++++++++++ .../templates/survey_report/change_list.html | 12 ++++++ openedx/features/survey_report/urls.py | 12 ++++++ openedx/features/survey_report/views.py | 30 +++++++++++++ 10 files changed, 194 insertions(+), 21 deletions(-) create mode 100644 openedx/features/survey_report/migrations/0003_auto_20221211_1533.py create mode 100644 openedx/features/survey_report/tasks.py create mode 100644 openedx/features/survey_report/templates/survey_report/change_list.html create mode 100644 openedx/features/survey_report/urls.py create mode 100644 openedx/features/survey_report/views.py diff --git a/lms/urls.py b/lms/urls.py index f02b1ecadb89..82d604a79650 100644 --- a/lms/urls.py +++ b/lms/urls.py @@ -659,6 +659,12 @@ 'u/', include('openedx.features.learner_profile.urls'), ), + + # Survey Report + re_path( + fr'^survey_report/', + include('openedx.features.survey_report.urls'), + ), ] if settings.FEATURES.get('ENABLE_TEAMS'): diff --git a/openedx/features/survey_report/admin.py b/openedx/features/survey_report/admin.py index cac84681abe1..368159a08d33 100644 --- a/openedx/features/survey_report/admin.py +++ b/openedx/features/survey_report/admin.py @@ -11,14 +11,16 @@ class SurveyReportAdmin(admin.ModelAdmin): """ Admin to manage survey reports. """ + change_list_template = "survey_report/change_list.html" + readonly_fields = ( 'courses_offered', 'learners', 'registered_learners', 'enrollments', 'generated_certificates', 'extra_data', - 'created_at' + 'created_at', 'state', ) list_display = ( - 'id', 'summary', 'created_at' + 'id', 'summary', 'created_at', 'state' ) def summary(self, obj) -> str: diff --git a/openedx/features/survey_report/api.py b/openedx/features/survey_report/api.py index dc1f621a6aab..283f531efb0e 100644 --- a/openedx/features/survey_report/api.py +++ b/openedx/features/survey_report/api.py @@ -16,8 +16,8 @@ MAX_WEEKS_SINCE_LAST_LOGIN: int = 4 -def generate_report() -> None: - """ Generate a report with relevant data.""" +def get_report_data() -> dict: + """ Get data from database to generate a new report.""" courses_offered = get_unique_courses_offered() learners = get_recently_active_users(weeks=MAX_WEEKS_SINCE_LAST_LOGIN) registered_learners = get_registered_learners() @@ -25,13 +25,21 @@ def generate_report() -> None: enrollments = get_course_enrollments() extra_data = settings.SURVEY_REPORT_EXTRA_DATA - survey_report = SurveyReport( - courses_offered=courses_offered, - learners=learners, - registered_learners=registered_learners, - generated_certificates=certificates, - enrollments=enrollments, - extra_data=extra_data, - ) - + return { + "courses_offered": courses_offered, + "learners": learners, + "registered_learners": registered_learners, + "generated_certificates": certificates, + "enrollments": enrollments, + "extra_data": extra_data, + } +def generate_report(defaults:bool=False) -> int: + """ Generate a report with relevant data.""" + data = {} + if not defaults: + data = get_report_data() + survey_report = SurveyReport(**data) survey_report.save() + return survey_report.id +def update_report(survey_report_id: int, data:dict) -> None: + SurveyReport.objects.filter(id=survey_report_id).update(**data) diff --git a/openedx/features/survey_report/management/commands/generate_report.py b/openedx/features/survey_report/management/commands/generate_report.py index cb94f9ad2e97..0b7faabeff6f 100644 --- a/openedx/features/survey_report/management/commands/generate_report.py +++ b/openedx/features/survey_report/management/commands/generate_report.py @@ -4,7 +4,8 @@ from django.core.management.base import BaseCommand, CommandError -from openedx.features.survey_report.api import generate_report +from openedx.features.survey_report.api import generate_report, update_report +from openedx.features.survey_report.models import SURVEY_REPORT_GENERATED class Command(BaseCommand): @@ -24,8 +25,12 @@ class Command(BaseCommand): def handle(self, *_args, **_options): try: - generate_report() + survey_report_id = generate_report() + data = {"state": SURVEY_REPORT_GENERATED} + update_report(survey_report_id=survey_report_id, data=data) except Exception as error: raise CommandError(f'An error has occurred while survey report was generating. {error}') from error - self.stdout.write(self.style.SUCCESS('Survey report has been generated successfully.')) + self.stdout.write( + self.style.SUCCESS(f'Survey report has been generated successfully with ID #{survey_report_id}.') + ) diff --git a/openedx/features/survey_report/migrations/0003_auto_20221211_1533.py b/openedx/features/survey_report/migrations/0003_auto_20221211_1533.py new file mode 100644 index 000000000000..e019de9f459b --- /dev/null +++ b/openedx/features/survey_report/migrations/0003_auto_20221211_1533.py @@ -0,0 +1,43 @@ +# Generated by Django 3.2.16 on 2022-12-11 15:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('survey_report', '0002_auto_20221130_1533'), + ] + + operations = [ + migrations.AddField( + model_name='surveyreport', + name='state', + field=models.CharField(choices=[('processing', 'Processing'), ('generated', 'Generated'), ('error', 'Error')], default='processing', help_text='State of the async generating process.', max_length=24), + ), + migrations.AlterField( + model_name='surveyreport', + name='courses_offered', + field=models.BigIntegerField(default=0, help_text='Total number of active unique courses.'), + ), + migrations.AlterField( + model_name='surveyreport', + name='enrollments', + field=models.BigIntegerField(default=0, help_text='Total number of active enrollments in the platform.'), + ), + migrations.AlterField( + model_name='surveyreport', + name='generated_certificates', + field=models.BigIntegerField(default=0, help_text='Total number of generated certificates.'), + ), + migrations.AlterField( + model_name='surveyreport', + name='learners', + field=models.BigIntegerField(default=0, help_text='Total number of recently active users with login in some weeks.'), + ), + migrations.AlterField( + model_name='surveyreport', + name='registered_learners', + field=models.BigIntegerField(default=0, help_text='Total number of users ever registered in the platform.'), + ), + ] diff --git a/openedx/features/survey_report/models.py b/openedx/features/survey_report/models.py index 3e34b75a8051..47f12376beb0 100644 --- a/openedx/features/survey_report/models.py +++ b/openedx/features/survey_report/models.py @@ -5,6 +5,15 @@ from django.db import models from jsonfield import JSONField +SURVEY_REPORT_PROCESSING = 'processing' +SURVEY_REPORT_GENERATED = 'generated' +SURVEY_REPORT_ERROR = 'error' + +SURVEY_REPORT_STATES= [ + (SURVEY_REPORT_PROCESSING, 'Processing'), + (SURVEY_REPORT_GENERATED, 'Generated'), + (SURVEY_REPORT_ERROR, 'Error'), +] class SurveyReport(models.Model): """ @@ -19,18 +28,31 @@ class SurveyReport(models.Model): - enrollments: Total number of active enrollments in the platform. - generated_certificates: Total number of generated certificates. - extra_data: Extra information that will be saved in the report, E.g: site_name, openedx-release. + - state: State of the async generating process. """ - courses_offered = models.BigIntegerField(help_text="Total number of active unique courses.") - learners = models.BigIntegerField(help_text="Total number of recently active users with login in some weeks.") - registered_learners = models.BigIntegerField(help_text="Total number of users ever registered in the platform.") - enrollments = models.BigIntegerField(help_text="Total number of active enrollments in the platform.") - generated_certificates = models.BigIntegerField(help_text="Total number of generated certificates.") + courses_offered = models.BigIntegerField(default=0, help_text="Total number of active unique courses.") + learners = models.BigIntegerField( + default=0, + help_text="Total number of recently active users with login in some weeks." + ) + registered_learners = models.BigIntegerField( + default=0, + help_text="Total number of users ever registered in the platform." + ) + enrollments = models.BigIntegerField(default=0, help_text="Total number of active enrollments in the platform.") + generated_certificates = models.BigIntegerField(default=0, help_text="Total number of generated certificates.") extra_data = JSONField( blank=True, default=dict, help_text="Extra information that will be saved in the report, E.g: site_name, openedx-release.", ) created_at = models.DateTimeField(auto_now=True) + state = models.CharField( + max_length=24, + choices=SURVEY_REPORT_STATES, + default=SURVEY_REPORT_PROCESSING, + help_text="State of the async generating process." + ) class Meta: ordering = ["-created_at"] diff --git a/openedx/features/survey_report/tasks.py b/openedx/features/survey_report/tasks.py new file mode 100644 index 000000000000..379204055d75 --- /dev/null +++ b/openedx/features/survey_report/tasks.py @@ -0,0 +1,33 @@ +""" +Tasks for Survey Report. +""" + + +import logging + +from celery import shared_task +from .api import update_report, get_report_data +from .models import SURVEY_REPORT_GENERATED, SURVEY_REPORT_ERROR + +log = logging.getLogger('edx.celery.task') + + +@shared_task(name='openedx.features.survey_report.tasks.generate_survey_report') +def generate_survey_report(survey_report_id: int): + """ + Tasks to generate a new survey report with non-sensitive data. + """ + log.info( + 'Started - generate survey report' + ) + + data = get_report_data() + try: + update_report(survey_report_id=survey_report_id, data=data) + state = SURVEY_REPORT_GENERATED + except (Exception, ): + state = SURVEY_REPORT_ERROR + data = {"state": state} + update_report(survey_report_id=survey_report_id, data=data) + + log.info('Done - generate survey report') diff --git a/openedx/features/survey_report/templates/survey_report/change_list.html b/openedx/features/survey_report/templates/survey_report/change_list.html new file mode 100644 index 000000000000..c4c0ebcb6728 --- /dev/null +++ b/openedx/features/survey_report/templates/survey_report/change_list.html @@ -0,0 +1,12 @@ +{% extends 'admin/change_list.html' %} + +{% block object-tools %} + +{% endblock %} diff --git a/openedx/features/survey_report/urls.py b/openedx/features/survey_report/urls.py new file mode 100644 index 000000000000..0a81aa7d6fda --- /dev/null +++ b/openedx/features/survey_report/urls.py @@ -0,0 +1,12 @@ +""" +Defines URLs for Survey Report. +""" + +from django.urls import path +from .views import SurveyReportView + +urlpatterns = [ + path('generate_report', SurveyReportView.as_view(), + name='openedx.generate_survey_report', + ), +] diff --git a/openedx/features/survey_report/views.py b/openedx/features/survey_report/views.py new file mode 100644 index 000000000000..8de65767ae6c --- /dev/null +++ b/openedx/features/survey_report/views.py @@ -0,0 +1,30 @@ +""" +Views to manage the Survey Reports. +""" + + +from django.contrib.auth.decorators import login_required +from django.shortcuts import redirect +from django.utils.decorators import method_decorator +from django.views.decorators.csrf import ensure_csrf_cookie +from django.views.generic import View +from common.djangoapps.util.views import ensure_valid_course_key +from .tasks import generate_survey_report +from .api import generate_report + +class SurveyReportView(View): + """ + View for Survey Reports. + """ + @method_decorator(login_required) + @method_decorator(ensure_csrf_cookie) + @method_decorator(ensure_valid_course_key) + def post(self, request): + """ + Generate a new survey report using the generate_report method in api.py + Arguments: + request: HTTP request + """ + survey_report_id = generate_report(defaults=True) + generate_survey_report.delay(survey_report_id) + return redirect("admin:survey_report_surveyreport_changelist") From 01ed6df08c9cf1b73b34b69e57e6debbabf50eb6 Mon Sep 17 00:00:00 2001 From: Alejandro Cardenas Date: Sun, 11 Dec 2022 11:01:58 -0500 Subject: [PATCH 2/9] style: fix quality tests --- openedx/features/survey_report/api.py | 8 ++++++-- openedx/features/survey_report/models.py | 3 ++- openedx/features/survey_report/urls.py | 2 +- openedx/features/survey_report/views.py | 1 + 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/openedx/features/survey_report/api.py b/openedx/features/survey_report/api.py index 283f531efb0e..bc62afbedaef 100644 --- a/openedx/features/survey_report/api.py +++ b/openedx/features/survey_report/api.py @@ -33,7 +33,9 @@ def get_report_data() -> dict: "enrollments": enrollments, "extra_data": extra_data, } -def generate_report(defaults:bool=False) -> int: + + +def generate_report(defaults: bool = False) -> int: """ Generate a report with relevant data.""" data = {} if not defaults: @@ -41,5 +43,7 @@ def generate_report(defaults:bool=False) -> int: survey_report = SurveyReport(**data) survey_report.save() return survey_report.id -def update_report(survey_report_id: int, data:dict) -> None: + + +def update_report(survey_report_id: int, data: dict) -> None: SurveyReport.objects.filter(id=survey_report_id).update(**data) diff --git a/openedx/features/survey_report/models.py b/openedx/features/survey_report/models.py index 47f12376beb0..ebcf4195c820 100644 --- a/openedx/features/survey_report/models.py +++ b/openedx/features/survey_report/models.py @@ -9,12 +9,13 @@ SURVEY_REPORT_GENERATED = 'generated' SURVEY_REPORT_ERROR = 'error' -SURVEY_REPORT_STATES= [ +SURVEY_REPORT_STATES = [ (SURVEY_REPORT_PROCESSING, 'Processing'), (SURVEY_REPORT_GENERATED, 'Generated'), (SURVEY_REPORT_ERROR, 'Error'), ] + class SurveyReport(models.Model): """ This model stores information to automate the way of gathering impact data from the openedx project. diff --git a/openedx/features/survey_report/urls.py b/openedx/features/survey_report/urls.py index 0a81aa7d6fda..b37e43ad1808 100644 --- a/openedx/features/survey_report/urls.py +++ b/openedx/features/survey_report/urls.py @@ -7,6 +7,6 @@ urlpatterns = [ path('generate_report', SurveyReportView.as_view(), - name='openedx.generate_survey_report', + name='openedx.generate_survey_report', ), ] diff --git a/openedx/features/survey_report/views.py b/openedx/features/survey_report/views.py index 8de65767ae6c..5a9d98f59df3 100644 --- a/openedx/features/survey_report/views.py +++ b/openedx/features/survey_report/views.py @@ -12,6 +12,7 @@ from .tasks import generate_survey_report from .api import generate_report + class SurveyReportView(View): """ View for Survey Reports. From 3f46f5394afb8d066cb64ac9e715e75c767174c7 Mon Sep 17 00:00:00 2001 From: Alejandro Cardenas Date: Sun, 11 Dec 2022 11:12:16 -0500 Subject: [PATCH 3/9] style: fix style issues --- openedx/features/survey_report/urls.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openedx/features/survey_report/urls.py b/openedx/features/survey_report/urls.py index b37e43ad1808..dc7d2e29074a 100644 --- a/openedx/features/survey_report/urls.py +++ b/openedx/features/survey_report/urls.py @@ -6,7 +6,9 @@ from .views import SurveyReportView urlpatterns = [ - path('generate_report', SurveyReportView.as_view(), + path( + 'generate_report', + SurveyReportView.as_view(), name='openedx.generate_survey_report', ), ] From ddc4b38d79c0b7ea0cc98629f2825cd2399a04ba Mon Sep 17 00:00:00 2001 From: Alejandro Cardenas Date: Sun, 11 Dec 2022 11:24:20 -0500 Subject: [PATCH 4/9] test: update unit tests --- .../commands/tests/test_generate_report.py | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/openedx/features/survey_report/management/commands/tests/test_generate_report.py b/openedx/features/survey_report/management/commands/tests/test_generate_report.py index 84e7a38325e1..90d6bbe6adac 100644 --- a/openedx/features/survey_report/management/commands/tests/test_generate_report.py +++ b/openedx/features/survey_report/management/commands/tests/test_generate_report.py @@ -15,30 +15,29 @@ class GenerateReportTest(TestCase): """ Test for generate_report command. """ - @override_settings(SURVEY_REPORT_EXTRA_DATA={'extra_data': 'extra_data'}) - @mock.patch('openedx.features.survey_report.queries.get_course_enrollments') - @mock.patch('openedx.features.survey_report.queries.get_generated_certificates') - @mock.patch('openedx.features.survey_report.queries.get_registered_learners') - @mock.patch('openedx.features.survey_report.queries.get_recently_active_users') - @mock.patch('openedx.features.survey_report.queries.get_unique_courses_offered') - def test_generate_report(self, mock_get_unique_courses_offered, mock_get_recently_active_users, - mock_get_registered_learners, mock_get_generated_certificates, - mock_get_course_enrollments): + + @mock.patch('openedx.features.survey_report.api.get_report_data') + def test_generate_report(self, mock_get_report_data): """ Test that generate_report command creates a survey report. """ - mock_get_unique_courses_offered.return_value = 1 - mock_get_recently_active_users.return_value = 2 - mock_get_registered_learners.return_value = 3 - mock_get_generated_certificates.return_value = 4 - mock_get_course_enrollments.return_value = 5 + report_test_data = { + 'courses_offered': 1, + 'learners': 2, + 'registered_learners': 3, + 'generated_certificates': 4, + 'enrollments': 5, + 'extra_data': {'extra': 'data'}, + } + mock_get_report_data.return_value = report_test_data out = StringIO() call_command('generate_report', stdout=out) survey_report = SurveyReport.objects.last() - assert survey_report.courses_offered == 1 - assert survey_report.learners == 2 - assert survey_report.registered_learners == 3 - assert survey_report.generated_certificates == 4 - assert survey_report.enrollments == 5 - assert survey_report.extra_data == {'extra_data': 'extra_data'} + + assert survey_report.courses_offered == report_test_data['courses_offered'] + assert survey_report.learners == report_test_data['learners'] + assert survey_report.registered_learners == report_test_data['registered_learners'] + assert survey_report.generated_certificates == report_test_data['generated_certificates'] + assert survey_report.enrollments == report_test_data['enrollments'] + assert survey_report.extra_data == report_test_data['extra_data'] From 10f55fcd79f04da43809e2f09270952c423edc45 Mon Sep 17 00:00:00 2001 From: Alejandro Cardenas Date: Sun, 11 Dec 2022 11:43:25 -0500 Subject: [PATCH 5/9] style: fix pylint issues --- .../management/commands/tests/test_generate_report.py | 2 +- openedx/features/survey_report/tasks.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openedx/features/survey_report/management/commands/tests/test_generate_report.py b/openedx/features/survey_report/management/commands/tests/test_generate_report.py index 90d6bbe6adac..a2156fb0199f 100644 --- a/openedx/features/survey_report/management/commands/tests/test_generate_report.py +++ b/openedx/features/survey_report/management/commands/tests/test_generate_report.py @@ -6,7 +6,7 @@ from unittest import mock from django.core.management import call_command -from django.test import TestCase, override_settings +from django.test import TestCase from openedx.features.survey_report.models import SurveyReport diff --git a/openedx/features/survey_report/tasks.py b/openedx/features/survey_report/tasks.py index 379204055d75..47ded5dba682 100644 --- a/openedx/features/survey_report/tasks.py +++ b/openedx/features/survey_report/tasks.py @@ -25,7 +25,7 @@ def generate_survey_report(survey_report_id: int): try: update_report(survey_report_id=survey_report_id, data=data) state = SURVEY_REPORT_GENERATED - except (Exception, ): + except (Exception, ): # pylint: disable=broad-except state = SURVEY_REPORT_ERROR data = {"state": state} update_report(survey_report_id=survey_report_id, data=data) From 75bb87c25ef0da2c424d47dd62d388eea156114d Mon Sep 17 00:00:00 2001 From: Alejandro Cardenas Date: Mon, 19 Dec 2022 15:15:39 -0500 Subject: [PATCH 6/9] feat: move generate process to generate_report method --- openedx/features/survey_report/api.py | 14 ++++++++++---- .../management/commands/generate_report.py | 9 +++------ ...te_field_and_add_default_values_to_fields.py} | 0 openedx/features/survey_report/tasks.py | 16 +++++----------- openedx/features/survey_report/views.py | 8 +++----- 5 files changed, 21 insertions(+), 26 deletions(-) rename openedx/features/survey_report/migrations/{0003_auto_20221211_1533.py => 0003_add_state_field_and_add_default_values_to_fields.py} (100%) diff --git a/openedx/features/survey_report/api.py b/openedx/features/survey_report/api.py index bc62afbedaef..c08ccea5a149 100644 --- a/openedx/features/survey_report/api.py +++ b/openedx/features/survey_report/api.py @@ -12,6 +12,7 @@ get_registered_learners, get_unique_courses_offered ) +from .models import SURVEY_REPORT_ERROR, SURVEY_REPORT_GENERATED MAX_WEEKS_SINCE_LAST_LOGIN: int = 4 @@ -35,14 +36,19 @@ def get_report_data() -> dict: } -def generate_report(defaults: bool = False) -> int: +def generate_report() -> None: """ Generate a report with relevant data.""" data = {} - if not defaults: - data = get_report_data() survey_report = SurveyReport(**data) survey_report.save() - return survey_report.id + + try: + data = get_report_data() + data["state"] = SURVEY_REPORT_GENERATED + update_report(survey_report.id, data) + except (Exception, ) as update_report_error: + update_report(survey_report.id, {"state": SURVEY_REPORT_ERROR}) + raise Exception(update_report_error) def update_report(survey_report_id: int, data: dict) -> None: diff --git a/openedx/features/survey_report/management/commands/generate_report.py b/openedx/features/survey_report/management/commands/generate_report.py index 0b7faabeff6f..36837559aeb6 100644 --- a/openedx/features/survey_report/management/commands/generate_report.py +++ b/openedx/features/survey_report/management/commands/generate_report.py @@ -4,8 +4,7 @@ from django.core.management.base import BaseCommand, CommandError -from openedx.features.survey_report.api import generate_report, update_report -from openedx.features.survey_report.models import SURVEY_REPORT_GENERATED +from openedx.features.survey_report.api import generate_report class Command(BaseCommand): @@ -25,12 +24,10 @@ class Command(BaseCommand): def handle(self, *_args, **_options): try: - survey_report_id = generate_report() - data = {"state": SURVEY_REPORT_GENERATED} - update_report(survey_report_id=survey_report_id, data=data) + generate_report() except Exception as error: raise CommandError(f'An error has occurred while survey report was generating. {error}') from error self.stdout.write( - self.style.SUCCESS(f'Survey report has been generated successfully with ID #{survey_report_id}.') + self.style.SUCCESS(f'Survey report has been generated successfully.') ) diff --git a/openedx/features/survey_report/migrations/0003_auto_20221211_1533.py b/openedx/features/survey_report/migrations/0003_add_state_field_and_add_default_values_to_fields.py similarity index 100% rename from openedx/features/survey_report/migrations/0003_auto_20221211_1533.py rename to openedx/features/survey_report/migrations/0003_add_state_field_and_add_default_values_to_fields.py diff --git a/openedx/features/survey_report/tasks.py b/openedx/features/survey_report/tasks.py index 47ded5dba682..9f02b9795cc2 100644 --- a/openedx/features/survey_report/tasks.py +++ b/openedx/features/survey_report/tasks.py @@ -6,14 +6,13 @@ import logging from celery import shared_task -from .api import update_report, get_report_data -from .models import SURVEY_REPORT_GENERATED, SURVEY_REPORT_ERROR +from .api import generate_report log = logging.getLogger('edx.celery.task') @shared_task(name='openedx.features.survey_report.tasks.generate_survey_report') -def generate_survey_report(survey_report_id: int): +def generate_survey_report(): """ Tasks to generate a new survey report with non-sensitive data. """ @@ -21,13 +20,8 @@ def generate_survey_report(survey_report_id: int): 'Started - generate survey report' ) - data = get_report_data() try: - update_report(survey_report_id=survey_report_id, data=data) - state = SURVEY_REPORT_GENERATED + generate_report() + log.info('Done - generate survey report') except (Exception, ): # pylint: disable=broad-except - state = SURVEY_REPORT_ERROR - data = {"state": state} - update_report(survey_report_id=survey_report_id, data=data) - - log.info('Done - generate survey report') + log.error('Error - generate survey report') diff --git a/openedx/features/survey_report/views.py b/openedx/features/survey_report/views.py index 5a9d98f59df3..7633f73dc1dc 100644 --- a/openedx/features/survey_report/views.py +++ b/openedx/features/survey_report/views.py @@ -10,7 +10,6 @@ from django.views.generic import View from common.djangoapps.util.views import ensure_valid_course_key from .tasks import generate_survey_report -from .api import generate_report class SurveyReportView(View): @@ -20,12 +19,11 @@ class SurveyReportView(View): @method_decorator(login_required) @method_decorator(ensure_csrf_cookie) @method_decorator(ensure_valid_course_key) - def post(self, request): + def post(self, _request): """ Generate a new survey report using the generate_report method in api.py Arguments: - request: HTTP request + _request: HTTP request """ - survey_report_id = generate_report(defaults=True) - generate_survey_report.delay(survey_report_id) + generate_survey_report.delay() return redirect("admin:survey_report_surveyreport_changelist") From d9af204ff2c3885a74ba5115ebca8b97e7a3851f Mon Sep 17 00:00:00 2001 From: Alejandro Cardenas Date: Mon, 19 Dec 2022 18:42:29 -0500 Subject: [PATCH 7/9] style: solve pylint issues --- openedx/features/survey_report/api.py | 2 +- .../survey_report/management/commands/generate_report.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openedx/features/survey_report/api.py b/openedx/features/survey_report/api.py index c08ccea5a149..7cd8633b2f70 100644 --- a/openedx/features/survey_report/api.py +++ b/openedx/features/survey_report/api.py @@ -48,7 +48,7 @@ def generate_report() -> None: update_report(survey_report.id, data) except (Exception, ) as update_report_error: update_report(survey_report.id, {"state": SURVEY_REPORT_ERROR}) - raise Exception(update_report_error) + raise Exception(update_report_error) from update_report_error def update_report(survey_report_id: int, data: dict) -> None: diff --git a/openedx/features/survey_report/management/commands/generate_report.py b/openedx/features/survey_report/management/commands/generate_report.py index 36837559aeb6..5c8978e4c23b 100644 --- a/openedx/features/survey_report/management/commands/generate_report.py +++ b/openedx/features/survey_report/management/commands/generate_report.py @@ -29,5 +29,5 @@ def handle(self, *_args, **_options): raise CommandError(f'An error has occurred while survey report was generating. {error}') from error self.stdout.write( - self.style.SUCCESS(f'Survey report has been generated successfully.') + self.style.SUCCESS('Survey report has been generated successfully.') ) From 099c496d75d8901641e7971ce8cd77ae95b4dcf3 Mon Sep 17 00:00:00 2001 From: Alejandro Cardenas Date: Tue, 3 Jan 2023 08:58:06 -0500 Subject: [PATCH 8/9] refactor: remove useless request validator --- openedx/features/survey_report/views.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openedx/features/survey_report/views.py b/openedx/features/survey_report/views.py index 7633f73dc1dc..f343645aed82 100644 --- a/openedx/features/survey_report/views.py +++ b/openedx/features/survey_report/views.py @@ -18,7 +18,6 @@ class SurveyReportView(View): """ @method_decorator(login_required) @method_decorator(ensure_csrf_cookie) - @method_decorator(ensure_valid_course_key) def post(self, _request): """ Generate a new survey report using the generate_report method in api.py From a7ddc78419a4e06ecd3cfab12328142bd389ce2f Mon Sep 17 00:00:00 2001 From: Alejandro Cardenas Date: Fri, 6 Jan 2023 09:37:17 -0500 Subject: [PATCH 9/9] test: remove useless imports --- openedx/features/survey_report/views.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openedx/features/survey_report/views.py b/openedx/features/survey_report/views.py index f343645aed82..d8487e8cd4a4 100644 --- a/openedx/features/survey_report/views.py +++ b/openedx/features/survey_report/views.py @@ -8,7 +8,6 @@ from django.utils.decorators import method_decorator from django.views.decorators.csrf import ensure_csrf_cookie from django.views.generic import View -from common.djangoapps.util.views import ensure_valid_course_key from .tasks import generate_survey_report