From 8cef028429b03e6f590253cc265108501578d6fb Mon Sep 17 00:00:00 2001 From: "Albert (AJ) St. Aubin" Date: Fri, 23 Oct 2020 13:00:57 -0400 Subject: [PATCH] Update the award_program_cert task to fix celery registration [MICROBA-676] --- cms/envs/common.py | 1 - lms/djangoapps/certificates/tests/test_models.py | 2 +- lms/envs/common.py | 1 - openedx/core/djangoapps/programs/__init__.py | 2 +- openedx/core/djangoapps/programs/apps.py | 3 ++- .../commands/backpopulate_program_credentials.py | 2 +- openedx/core/djangoapps/programs/signals.py | 8 ++++---- openedx/core/djangoapps/programs/{tasks/v1 => }/tasks.py | 0 openedx/core/djangoapps/programs/tasks/__init__.py | 0 openedx/core/djangoapps/programs/tasks/v1/__init__.py | 0 .../core/djangoapps/programs/tasks/v1/tests/__init__.py | 0 openedx/core/djangoapps/programs/tests/test_signals.py | 8 ++++---- .../programs/{tasks/v1 => }/tests/test_tasks.py | 4 ++-- 13 files changed, 15 insertions(+), 16 deletions(-) rename openedx/core/djangoapps/programs/{tasks/v1 => }/tasks.py (100%) delete mode 100644 openedx/core/djangoapps/programs/tasks/__init__.py delete mode 100644 openedx/core/djangoapps/programs/tasks/v1/__init__.py delete mode 100644 openedx/core/djangoapps/programs/tasks/v1/tests/__init__.py rename openedx/core/djangoapps/programs/{tasks/v1 => }/tests/test_tasks.py (99%) diff --git a/cms/envs/common.py b/cms/envs/common.py index 8d60122d5b..1c29f6d23f 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -1218,7 +1218,6 @@ CELERY_IMPORTS = ( 'cms.djangoapps.contentstore.tasks', 'openedx.core.djangoapps.bookmarks.tasks', 'openedx.core.djangoapps.ccxcon.tasks', - 'openedx.core.djangoapps.programs.tasks.v1.tasks', ) # Message configuration diff --git a/lms/djangoapps/certificates/tests/test_models.py b/lms/djangoapps/certificates/tests/test_models.py index f68260da6c..6c8f681125 100644 --- a/lms/djangoapps/certificates/tests/test_models.py +++ b/lms/djangoapps/certificates/tests/test_models.py @@ -358,7 +358,7 @@ class CertificateInvalidationTest(SharedModuleStoreTestCase): CertificateInvalidation.has_certificate_invalidation(self.user, self.course_id) ) - @patch('openedx.core.djangoapps.programs.tasks.v1.tasks.revoke_program_certificates.delay') + @patch('openedx.core.djangoapps.programs.tasks.revoke_program_certificates.delay') @patch( 'openedx.core.djangoapps.credentials.models.CredentialsApiConfig.is_learner_issuance_enabled', return_value=True, diff --git a/lms/envs/common.py b/lms/envs/common.py index 92247b6f71..548306dd8b 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -2233,7 +2233,6 @@ DEBUG_TOOLBAR_PATCH_SETTINGS = False # Celery's task autodiscovery won't find tasks nested in a tasks package. # Tasks are only registered when the module they are defined in is imported. CELERY_IMPORTS = ( - 'openedx.core.djangoapps.programs.tasks.v1.tasks', 'poll.tasks' ) diff --git a/openedx/core/djangoapps/programs/__init__.py b/openedx/core/djangoapps/programs/__init__.py index cc8c1e889f..e46cc090b7 100644 --- a/openedx/core/djangoapps/programs/__init__.py +++ b/openedx/core/djangoapps/programs/__init__.py @@ -8,7 +8,7 @@ if and only if the service is deployed in the Open edX installation. To ensure maximum separation of concerns, and a minimum of interdependencies, this package should be kept small, thin, and stateless. """ - +default_app_config = 'openedx.core.djangoapps.programs.apps.ProgramsConfig' from openedx.core.djangoapps.waffle_utils import WaffleSwitch, WaffleSwitchNamespace diff --git a/openedx/core/djangoapps/programs/apps.py b/openedx/core/djangoapps/programs/apps.py index f3a7b27f8d..e656d8d7ea 100644 --- a/openedx/core/djangoapps/programs/apps.py +++ b/openedx/core/djangoapps/programs/apps.py @@ -13,4 +13,5 @@ class ProgramsConfig(AppConfig): name = u'openedx.core.djangoapps.programs' def ready(self): - from . import signals + # noinspection PyUnresolvedReferences + from . import signals, tasks # pylint: disable=unused-variable diff --git a/openedx/core/djangoapps/programs/management/commands/backpopulate_program_credentials.py b/openedx/core/djangoapps/programs/management/commands/backpopulate_program_credentials.py index 018f5ced80..e375fcff9a 100644 --- a/openedx/core/djangoapps/programs/management/commands/backpopulate_program_credentials.py +++ b/openedx/core/djangoapps/programs/management/commands/backpopulate_program_credentials.py @@ -12,7 +12,7 @@ from opaque_keys.edx.keys import CourseKey from course_modes.models import CourseMode from lms.djangoapps.certificates.models import CertificateStatuses, GeneratedCertificate from openedx.core.djangoapps.catalog.utils import get_programs -from openedx.core.djangoapps.programs.tasks.v1.tasks import award_program_certificates +from openedx.core.djangoapps.programs.tasks import award_program_certificates from openedx.core.djangoapps.programs.models import CustomProgramsConfig diff --git a/openedx/core/djangoapps/programs/signals.py b/openedx/core/djangoapps/programs/signals.py index 27f53b085b..6a47ba00c1 100644 --- a/openedx/core/djangoapps/programs/signals.py +++ b/openedx/core/djangoapps/programs/signals.py @@ -57,7 +57,7 @@ def handle_course_cert_awarded(sender, user, course_key, mode, status, **kwargs) status, ) # import here, because signal is registered at startup, but items in tasks are not yet able to be loaded - from openedx.core.djangoapps.programs.tasks.v1.tasks import award_program_certificates + from openedx.core.djangoapps.programs.tasks import award_program_certificates award_program_certificates.delay(user.username) @@ -133,7 +133,7 @@ def handle_course_cert_changed(sender, user, course_key, mode, status, **kwargs) status, ) # import here, because signal is registered at startup, but items in tasks are not yet able to be loaded - from openedx.core.djangoapps.programs.tasks.v1.tasks import award_course_certificate + from openedx.core.djangoapps.programs.tasks import award_course_certificate award_course_certificate.delay(user.username, str(course_key)) @@ -176,7 +176,7 @@ def handle_course_cert_revoked(sender, user, course_key, mode, status, **kwargs) status, ) # import here, because signal is registered at startup, but items in tasks are not yet able to be loaded - from openedx.core.djangoapps.programs.tasks.v1.tasks import revoke_program_certificates + from openedx.core.djangoapps.programs.tasks import revoke_program_certificates revoke_program_certificates.delay(user.username, course_key) @@ -209,5 +209,5 @@ def handle_course_cert_date_change(sender, course_key, **kwargs): course_key, ) # import here, because signal is registered at startup, but items in tasks are not yet loaded - from openedx.core.djangoapps.programs.tasks.v1.tasks import update_certificate_visible_date_on_course_update + from openedx.core.djangoapps.programs.tasks import update_certificate_visible_date_on_course_update update_certificate_visible_date_on_course_update.delay(course_key) diff --git a/openedx/core/djangoapps/programs/tasks/v1/tasks.py b/openedx/core/djangoapps/programs/tasks.py similarity index 100% rename from openedx/core/djangoapps/programs/tasks/v1/tasks.py rename to openedx/core/djangoapps/programs/tasks.py diff --git a/openedx/core/djangoapps/programs/tasks/__init__.py b/openedx/core/djangoapps/programs/tasks/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openedx/core/djangoapps/programs/tasks/v1/__init__.py b/openedx/core/djangoapps/programs/tasks/v1/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openedx/core/djangoapps/programs/tasks/v1/tests/__init__.py b/openedx/core/djangoapps/programs/tasks/v1/tests/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openedx/core/djangoapps/programs/tests/test_signals.py b/openedx/core/djangoapps/programs/tests/test_signals.py index 828eb44188..4b4bca8c06 100644 --- a/openedx/core/djangoapps/programs/tests/test_signals.py +++ b/openedx/core/djangoapps/programs/tests/test_signals.py @@ -28,7 +28,7 @@ TEST_COURSE_KEY = CourseKey.from_string('course-v1:edX+test_course+1') # The credentials app isn't installed for the CMS. @skip_unless_lms -@mock.patch('openedx.core.djangoapps.programs.tasks.v1.tasks.award_program_certificates.delay') +@mock.patch('openedx.core.djangoapps.programs.tasks.award_program_certificates.delay') @mock.patch( 'openedx.core.djangoapps.credentials.models.CredentialsApiConfig.is_learner_issuance_enabled', new_callable=mock.PropertyMock, @@ -89,7 +89,7 @@ class CertAwardedReceiverTest(TestCase): # The credentials app isn't installed for the CMS. @skip_unless_lms -@mock.patch('openedx.core.djangoapps.programs.tasks.v1.tasks.award_course_certificate.delay') +@mock.patch('openedx.core.djangoapps.programs.tasks.award_course_certificate.delay') @mock.patch( 'openedx.core.djangoapps.credentials.models.CredentialsApiConfig.is_learner_issuance_enabled', new_callable=mock.PropertyMock, @@ -172,7 +172,7 @@ class CertChangedReceiverTest(TestCase): # The credentials app isn't installed for the CMS. @skip_unless_lms -@mock.patch('openedx.core.djangoapps.programs.tasks.v1.tasks.revoke_program_certificates.delay') +@mock.patch('openedx.core.djangoapps.programs.tasks.revoke_program_certificates.delay') @mock.patch( 'openedx.core.djangoapps.credentials.models.CredentialsApiConfig.is_learner_issuance_enabled', new_callable=mock.PropertyMock, @@ -232,7 +232,7 @@ class CertRevokedReceiverTest(TestCase): @skip_unless_lms -@mock.patch('openedx.core.djangoapps.programs.tasks.v1.tasks.update_certificate_visible_date_on_course_update.delay') +@mock.patch('openedx.core.djangoapps.programs.tasks.update_certificate_visible_date_on_course_update.delay') @mock.patch( 'openedx.core.djangoapps.credentials.models.CredentialsApiConfig.is_learner_issuance_enabled', new_callable=mock.PropertyMock, diff --git a/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py b/openedx/core/djangoapps/programs/tests/test_tasks.py similarity index 99% rename from openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py rename to openedx/core/djangoapps/programs/tests/test_tasks.py index ef3c80c6fb..5576dada75 100644 --- a/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py +++ b/openedx/core/djangoapps/programs/tests/test_tasks.py @@ -24,7 +24,7 @@ from openedx.core.djangoapps.certificates.config import waffle from openedx.core.djangoapps.content.course_overviews.tests.factories import CourseOverviewFactory from openedx.core.djangoapps.credentials.tests.mixins import CredentialsApiConfigMixin from openedx.core.djangoapps.oauth_dispatch.tests.factories import ApplicationFactory -from openedx.core.djangoapps.programs.tasks.v1 import tasks +from openedx.core.djangoapps.programs import tasks from openedx.core.djangoapps.site_configuration.tests.factories import SiteConfigurationFactory, SiteFactory from openedx.core.djangolib.testing.utils import skip_unless_lms from student.tests.factories import UserFactory @@ -32,7 +32,7 @@ from student.tests.factories import UserFactory log = logging.getLogger(__name__) CREDENTIALS_INTERNAL_SERVICE_URL = 'https://credentials.example.com' -TASKS_MODULE = 'openedx.core.djangoapps.programs.tasks.v1.tasks' +TASKS_MODULE = 'openedx.core.djangoapps.programs.tasks' @skip_unless_lms