As it is explained in courseware/__init__.py:
Importing 'lms.djangoapps.courseware' as 'courseware' is no longer
supported
This warning, while relevant, decreased the signal/noise ratio when
investigating the lms logs.
The "bulk_email" app was the only remaining app importing the courseware
module incorrectly. All edx-platform modules and dependencies now follow
the new convention.
This is in part for CRI-196.
Scheduled emails show "unsubscribe" link if waffle switch
`schedules.course_update_show_unsubscribe` is enabled, and
settings.ACE_ENABLED_POLICIES respects `bulk_email_optout`.
API endpoint allows GET/POST requests, which:
* GET asks for confirmation of opt-out
* POST accepts "unsubscribe" or "cancel", where "unsubscribe" creates the
Optout entry, and "cancel" does nothing.
Fixes flaky tests:
* The resolvers handle users in "bins", which are groups that depend on the user ID.
* The test user ID varies depending on the test order.
* This change ensures that the bin requested matches the user for the test.
* fix type mismatch in course_goals migrations
* fix type mismatch in experiments migrations
* fix type mismatch in xblock_django migrations
* fix type mismatch in catalog migrations
* fix type mismatch in static_replace migrations
* fix type mismatch in bulk_email migrations
* fix type mismatch in course_overviews migrations
This reverts commit 3d2617983b.
The change was not quite right because the method six provides needs to
have `self` be passed in as well. See the docs here:
https://six.readthedocs.io/#unittest-assertions
Reverting for now and we can fix it in smaller chunks later.
Currently, course email templates have hard-coded copyright year.
Marketing team needs to ping engineering to update it every year.
In this PR, steps are taken to make it dynamic.
PROD-106
the union() function to combine multiple querysets together, rather
than the or (|) operator. This avoids a very inefficient OUTER
JOIN query that reads the entire user table.
Scheduled emails show "unsubscribe" link if waffle switch `schedules.course_update_show_unsubscribe` is enabled, and
settings.ACE_ENABLED_POLICIES respects `bulk_email_optout`.
API endpoint allows GET/POST requests, which:
* GET asks for confirmation of opt-out
* POST accepts "unsubscribe" or "cancel", where "unsubscribe" creates the
Optout entry, and "cancel" does nothing.