From 08c84a3ae7c6a932ff1007d7da5dc654c142dee1 Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Tue, 4 May 2021 11:47:12 -0400 Subject: [PATCH] fix: bring back email_marketing model momentarily and bump enterprise Enterprise was still using email_marketing code. This will bump enterprise to a version that does not any more. And also temporarily put the email_marketing model back for blue/green deploy sanity. --- lms/djangoapps/email_marketing/README.rst | 9 - ...0011_delete_emailmarketingconfiguration.py | 16 -- lms/djangoapps/email_marketing/models.py | 173 ++++++++++++++++++ requirements/constraints.txt | 2 +- requirements/edx/base.txt | 2 +- requirements/edx/development.txt | 2 +- requirements/edx/testing.txt | 2 +- 7 files changed, 177 insertions(+), 29 deletions(-) delete mode 100644 lms/djangoapps/email_marketing/README.rst delete mode 100644 lms/djangoapps/email_marketing/migrations/0011_delete_emailmarketingconfiguration.py create mode 100644 lms/djangoapps/email_marketing/models.py diff --git a/lms/djangoapps/email_marketing/README.rst b/lms/djangoapps/email_marketing/README.rst deleted file mode 100644 index 5cd66a3816..0000000000 --- a/lms/djangoapps/email_marketing/README.rst +++ /dev/null @@ -1,9 +0,0 @@ -Email Marketing -=============== - -If you are reading this and the 'Maple' Open edX release is out, you can safely delete -this whole djangoapp. It only exists to hold old model migrations and any post-Maple -installation will no longer have any model in the database for this app. - -But for some minor historical context, this djangoapp used to hold some integration -with sailthru that we no longer needed. diff --git a/lms/djangoapps/email_marketing/migrations/0011_delete_emailmarketingconfiguration.py b/lms/djangoapps/email_marketing/migrations/0011_delete_emailmarketingconfiguration.py deleted file mode 100644 index f892feff09..0000000000 --- a/lms/djangoapps/email_marketing/migrations/0011_delete_emailmarketingconfiguration.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 2.2.20 on 2021-05-03 20:17 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('email_marketing', '0010_auto_20180425_0800'), - ] - - operations = [ - migrations.DeleteModel( - name='EmailMarketingConfiguration', - ), - ] diff --git a/lms/djangoapps/email_marketing/models.py b/lms/djangoapps/email_marketing/models.py new file mode 100644 index 0000000000..ee82309f84 --- /dev/null +++ b/lms/djangoapps/email_marketing/models.py @@ -0,0 +1,173 @@ +""" +Email-marketing-related models. +""" + + +from config_models.models import ConfigurationModel +from django.db import models +from django.utils.encoding import python_2_unicode_compatible +from django.utils.translation import ugettext_lazy as _ + + +@python_2_unicode_compatible +class EmailMarketingConfiguration(ConfigurationModel): + """ + Email marketing configuration + + .. no_pii: + """ + + class Meta: + app_label = "email_marketing" + + sailthru_key = models.fields.CharField( + max_length=32, + help_text=_( + "API key for accessing Sailthru. " + ) + ) + + sailthru_secret = models.fields.CharField( + max_length=32, + help_text=_( + "API secret for accessing Sailthru. " + ) + ) + + sailthru_new_user_list = models.fields.CharField( + max_length=48, + help_text=_( + "Sailthru list name to add new users to. " + ) + ) + + sailthru_retry_interval = models.fields.IntegerField( + default=3600, + help_text=_( + "Sailthru connection retry interval (secs)." + ) + ) + + sailthru_max_retries = models.fields.IntegerField( + default=24, + help_text=_( + "Sailthru maximum retries." + ) + ) + + sailthru_welcome_template = models.fields.CharField( + max_length=20, + blank=True, + help_text=_( + "Sailthru template to use on welcome send." + ) + ) + + sailthru_abandoned_cart_template = models.fields.CharField( + max_length=20, + blank=True, + help_text=_( + "Sailthru template to use on abandoned cart reminder. Deprecated." + ) + ) + + sailthru_abandoned_cart_delay = models.fields.IntegerField( + default=60, + help_text=_( + "Sailthru minutes to wait before sending abandoned cart message. Deprecated." + ) + ) + + sailthru_enroll_template = models.fields.CharField( + max_length=20, + blank=True, + help_text=_( + "Sailthru send template to use on enrolling for audit. " + ) + ) + + sailthru_verification_passed_template = models.fields.CharField( + max_length=20, + blank=True, + help_text=_( + "Sailthru send template to use on passed ID verification." + ) + ) + + sailthru_verification_failed_template = models.fields.CharField( + max_length=20, + blank=True, + help_text=_( + "Sailthru send template to use on failed ID verification." + ) + ) + + sailthru_upgrade_template = models.fields.CharField( + max_length=20, + blank=True, + help_text=_( + "Sailthru send template to use on upgrading a course. Deprecated " + ) + ) + + sailthru_purchase_template = models.fields.CharField( + max_length=20, + blank=True, + help_text=_( + "Sailthru send template to use on purchasing a course seat. Deprecated " + ) + ) + + # Sailthru purchases can be tagged with interest tags to provide information about the types of courses + # users are interested in. The easiest way to get the tags currently is the Sailthru content API which + # looks in the content library (the content library is populated daily with a script that pulls the data + # from the course discovery API) This option should normally be on, but it does add overhead to processing + # purchases and enrolls. + sailthru_get_tags_from_sailthru = models.BooleanField( + default=True, + help_text=_('Use the Sailthru content API to fetch course tags.') + ) + + sailthru_content_cache_age = models.fields.IntegerField( + default=3600, + help_text=_( + "Number of seconds to cache course content retrieved from Sailthru." + ) + ) + + sailthru_enroll_cost = models.fields.IntegerField( + default=100, + help_text=_( + "Cost in cents to report to Sailthru for enrolls." + ) + ) + + sailthru_lms_url_override = models.fields.CharField( + max_length=80, + blank=True, + help_text=_( + "Optional lms url scheme + host used to construct urls for content library, e.g. https://courses.edx.org." + ) + ) + + # The number of seconds to delay for welcome emails sending. This is needed to acommendate those + # learners who created user account during course enrollment so we can send a different message + # in our welcome email. + welcome_email_send_delay = models.fields.IntegerField( + default=600, + help_text=_( + "Number of seconds to delay the sending of User Welcome email after user has been created" + ) + ) + + # The number of seconds to delay/timeout wait to get cookie values from sailthru. + user_registration_cookie_timeout_delay = models.fields.FloatField( + default=3.0, + help_text=_( + "The number of seconds to delay/timeout wait to get cookie values from sailthru." + ) + ) + + def __str__(self): + return "Email marketing configuration: New user list %s, Welcome template: %s" % \ + (self.sailthru_new_user_list, self.sailthru_welcome_template) diff --git a/requirements/constraints.txt b/requirements/constraints.txt index d39d48fb88..a585f3c13d 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -36,7 +36,7 @@ django-storages<1.9 # The team that owns this package will manually bump this package rather than having it pulled in automatically. # This is to allow them to better control its deployment and to do it in a process that works better # for them. -edx-enterprise==3.22.10 +edx-enterprise==3.22.11 # Newer versions need a more recent version of python-dateutil freezegun==0.3.12 diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index 93e960cbe5..1d88cb0a69 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -101,7 +101,7 @@ edx-django-release-util==1.0.0 # via -r requirements/edx/base.in edx-django-sites-extensions==3.0.0 # via -r requirements/edx/base.in edx-django-utils==4.0.0 # via -r requirements/edx/base.in, django-config-models, edx-drf-extensions, edx-enterprise, edx-rest-api-client, edx-toggles, edx-when, ora2, super-csv edx-drf-extensions==6.5.0 # via -r requirements/edx/base.in, edx-completion, edx-enterprise, edx-organizations, edx-proctoring, edx-rbac, edx-when, edxval -edx-enterprise==3.22.10 # via -c requirements/edx/../constraints.txt, -r requirements/edx/base.in +edx-enterprise==3.22.11 # via -c requirements/edx/../constraints.txt, -r requirements/edx/base.in edx-event-routing-backends==4.0.1 # via -r requirements/edx/base.in edx-i18n-tools==0.5.3 # via ora2 edx-milestones==0.3.1 # via -r requirements/edx/base.in diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 6921fc7908..b99867284d 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -111,7 +111,7 @@ edx-django-release-util==1.0.0 # via -r requirements/edx/testing.txt edx-django-sites-extensions==3.0.0 # via -r requirements/edx/testing.txt edx-django-utils==4.0.0 # via -r requirements/edx/testing.txt, django-config-models, edx-drf-extensions, edx-enterprise, edx-rest-api-client, edx-toggles, edx-when, ora2, super-csv edx-drf-extensions==6.5.0 # via -r requirements/edx/testing.txt, edx-completion, edx-enterprise, edx-organizations, edx-proctoring, edx-rbac, edx-when, edxval -edx-enterprise==3.22.10 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt +edx-enterprise==3.22.11 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt edx-event-routing-backends==4.0.1 # via -r requirements/edx/testing.txt edx-i18n-tools==0.5.3 # via -r requirements/edx/testing.txt, ora2 edx-lint==5.0.0 # via -r requirements/edx/testing.txt diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 2cc210d697..2ec3be54da 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -108,7 +108,7 @@ edx-django-release-util==1.0.0 # via -r requirements/edx/base.txt edx-django-sites-extensions==3.0.0 # via -r requirements/edx/base.txt edx-django-utils==4.0.0 # via -r requirements/edx/base.txt, django-config-models, edx-drf-extensions, edx-enterprise, edx-rest-api-client, edx-toggles, edx-when, ora2, super-csv edx-drf-extensions==6.5.0 # via -r requirements/edx/base.txt, edx-completion, edx-enterprise, edx-organizations, edx-proctoring, edx-rbac, edx-when, edxval -edx-enterprise==3.22.10 # via -c requirements/edx/../constraints.txt, -r requirements/edx/base.txt +edx-enterprise==3.22.11 # via -c requirements/edx/../constraints.txt, -r requirements/edx/base.txt edx-event-routing-backends==4.0.1 # via -r requirements/edx/base.txt edx-i18n-tools==0.5.3 # via -r requirements/edx/base.txt, -r requirements/edx/testing.in, ora2 edx-lint==5.0.0 # via -r requirements/edx/testing.in