diff --git a/cms/djangoapps/contentstore/api/tests/base.py b/cms/djangoapps/contentstore/api/tests/base.py
index 283ec83a57..304a2c5cd0 100644
--- a/cms/djangoapps/contentstore/api/tests/base.py
+++ b/cms/djangoapps/contentstore/api/tests/base.py
@@ -3,7 +3,7 @@ Base test case for the course API views.
"""
-from django.core.urlresolvers import reverse
+from django.urls import reverse
from rest_framework.test import APITestCase
from lms.djangoapps.courseware.tests.factories import StaffFactory
diff --git a/cms/djangoapps/contentstore/api/tests/test_validation.py b/cms/djangoapps/contentstore/api/tests/test_validation.py
index 63475ab0cc..2e891d2ba2 100644
--- a/cms/djangoapps/contentstore/api/tests/test_validation.py
+++ b/cms/djangoapps/contentstore/api/tests/test_validation.py
@@ -5,7 +5,7 @@ Tests for the course import API views
from datetime import datetime
-from django.core.urlresolvers import reverse
+from django.urls import reverse
from rest_framework import status
from rest_framework.test import APITestCase
diff --git a/cms/djangoapps/maintenance/views.py b/cms/djangoapps/maintenance/views.py
index 1f287965d0..15cc8bce9e 100644
--- a/cms/djangoapps/maintenance/views.py
+++ b/cms/djangoapps/maintenance/views.py
@@ -6,9 +6,9 @@ Views for the maintenance app.
import logging
import six
-from django.core.urlresolvers import reverse, reverse_lazy
from django.core.validators import ValidationError
from django.db import transaction
+from django.urls import reverse, reverse_lazy
from django.utils.decorators import method_decorator
from django.utils.translation import ugettext as _
from django.views.generic import View
diff --git a/cms/envs/common.py b/cms/envs/common.py
index 0e5ae5b923..dcace5eb8a 100644
--- a/cms/envs/common.py
+++ b/cms/envs/common.py
@@ -111,7 +111,7 @@ from lms.envs.common import (
_make_locale_paths,
)
from path import Path as path
-from django.core.urlresolvers import reverse_lazy
+from django.urls import reverse_lazy # pylint: disable=wrong-import-order
from lms.djangoapps.lms_xblock.mixin import LmsBlockMixin
from cms.lib.xblock.authoring_mixin import AuthoringMixin
diff --git a/cms/envs/production.py b/cms/envs/production.py
index 23da28ebf2..0b5302de7e 100644
--- a/cms/envs/production.py
+++ b/cms/envs/production.py
@@ -12,7 +12,7 @@ import os
import yaml
from django.core.exceptions import ImproperlyConfigured
-from django.core.urlresolvers import reverse_lazy
+from django.urls import reverse_lazy
from path import Path as path
from .common import *
diff --git a/cms/templates/checklists.html b/cms/templates/checklists.html
index 7bc7fd0f01..d5b602b946 100644
--- a/cms/templates/checklists.html
+++ b/cms/templates/checklists.html
@@ -6,7 +6,7 @@
from cms.djangoapps.contentstore import utils
from cms.djangoapps.contentstore.config.waffle_utils import should_show_checklists_quality
- from django.core.urlresolvers import reverse
+ from django.urls import reverse
from django.utils.translation import ugettext as _
from openedx.core.djangolib.markup import HTML, Text
from openedx.core.djangolib.js_utils import js_escaped_string, dump_js_escaped_json
diff --git a/cms/templates/course_outline.html b/cms/templates/course_outline.html
index c8f418fc6e..1cf4a7aee2 100644
--- a/cms/templates/course_outline.html
+++ b/cms/templates/course_outline.html
@@ -10,7 +10,7 @@ from util.date_utils import get_default_time_display
from django.utils.translation import ugettext as _
from openedx.core.djangolib.js_utils import js_escaped_string, dump_js_escaped_json
from openedx.core.djangolib.markup import HTML, Text
-from django.core.urlresolvers import reverse
+from django.urls import reverse
%>
<%block name="title">${_("Course Outline")}%block>
<%block name="bodyclass">is-signedin course view-outline%block>
diff --git a/cms/templates/maintenance/_announcement_index.html b/cms/templates/maintenance/_announcement_index.html
index af1105da62..b8597144af 100644
--- a/cms/templates/maintenance/_announcement_index.html
+++ b/cms/templates/maintenance/_announcement_index.html
@@ -1,9 +1,11 @@
<%page expression_filter="h"/>
<%namespace name='static' file='../static_content.html'/>
<%!
-from django.core.urlresolvers import reverse
+from django.urls import reverse
from django.utils.translation import ugettext as _
+
from openedx.core.djangolib.markup import HTML, Text
+
%>
diff --git a/lms/djangoapps/grades/rest_api/v1/tests/test_gradebook_views.py b/lms/djangoapps/grades/rest_api/v1/tests/test_gradebook_views.py
index 6dfedd71e7..6551c8e1cd 100644
--- a/lms/djangoapps/grades/rest_api/v1/tests/test_gradebook_views.py
+++ b/lms/djangoapps/grades/rest_api/v1/tests/test_gradebook_views.py
@@ -8,7 +8,7 @@ from collections import OrderedDict, namedtuple
from datetime import datetime
import ddt
-from django.core.urlresolvers import reverse
+from django.urls import reverse
from freezegun import freeze_time
from mock import MagicMock, patch
from opaque_keys.edx.locator import BlockUsageLocator
@@ -27,9 +27,9 @@ from lms.djangoapps.grades.course_grade import CourseGrade
from lms.djangoapps.grades.models import (
BlockRecord,
BlockRecordList,
- PersistentSubsectionGrade,
- PersistentSubsectionGradeOverride,
PersistentCourseGrade,
+ PersistentSubsectionGrade,
+ PersistentSubsectionGradeOverride
)
from lms.djangoapps.grades.rest_api.v1.tests.mixins import GradeViewTestMixin
from lms.djangoapps.grades.rest_api.v1.views import CourseEnrollmentPagination
diff --git a/lms/djangoapps/program_enrollments/models.py b/lms/djangoapps/program_enrollments/models.py
index 8ff6abed43..3ed2b36680 100644
--- a/lms/djangoapps/program_enrollments/models.py
+++ b/lms/djangoapps/program_enrollments/models.py
@@ -114,6 +114,7 @@ class ProgramCourseEnrollment(TimeStampedModel): # pylint: disable=model-missin
CourseEnrollment,
null=True,
blank=True,
+ on_delete=models.CASCADE
)
course_key = CourseKeyField(max_length=255)
status = models.CharField(max_length=9, choices=STATUS_CHOICES)
diff --git a/openedx/core/djangoapps/ace_common/template_context.py b/openedx/core/djangoapps/ace_common/template_context.py
index 032c861ee7..2bff54cf3a 100644
--- a/openedx/core/djangoapps/ace_common/template_context.py
+++ b/openedx/core/djangoapps/ace_common/template_context.py
@@ -4,8 +4,7 @@ Context dictionary for templates that use the ace_common base template.
from django.conf import settings
-from django.core.urlresolvers import NoReverseMatch
-from django.urls import reverse
+from django.urls import NoReverseMatch, reverse
from edxmako.shortcuts import marketing_link
from openedx.core.djangoapps.theming.helpers import get_config_value_from_site_or_settings
diff --git a/openedx/core/djangoapps/oauth_dispatch/dot_overrides/views.py b/openedx/core/djangoapps/oauth_dispatch/dot_overrides/views.py
index a03142fd52..249e2cf00e 100644
--- a/openedx/core/djangoapps/oauth_dispatch/dot_overrides/views.py
+++ b/openedx/core/djangoapps/oauth_dispatch/dot_overrides/views.py
@@ -4,7 +4,7 @@ Classes that override default django-oauth-toolkit behavior
from oauth2_provider.exceptions import OAuthToolkitError
-from oauth2_provider.http import HttpResponseUriRedirect
+from oauth2_provider.http import OAuth2ResponseRedirect
from oauth2_provider.models import get_access_token_model, get_application_model
from oauth2_provider.scopes import get_scopes_backend
from oauth2_provider.settings import oauth2_settings
@@ -72,7 +72,7 @@ class EdxOAuth2AuthorizationView(AuthorizationView):
uri, headers, body, status = self.create_authorization_response(
request=self.request, scopes=" ".join(scopes),
credentials=credentials, allow=True)
- return HttpResponseUriRedirect(uri, application.get_allowed_schemes())
+ return OAuth2ResponseRedirect(uri, application.get_allowed_schemes())
# *** Changed the if statement that checked for require_approval to an assert.
assert require_approval == 'auto_even_if_expired'
@@ -90,7 +90,7 @@ class EdxOAuth2AuthorizationView(AuthorizationView):
uri, headers, body, status = self.create_authorization_response(
request=self.request, scopes=" ".join(scopes),
credentials=credentials, allow=True)
- return HttpResponseUriRedirect(uri, application.get_allowed_schemes())
+ return OAuth2ResponseRedirect(uri, application.get_allowed_schemes())
# render an authorization prompt so the user can approve
# the application's requested scopes
diff --git a/openedx/core/djangoapps/user_api/accounts/tests/test_retirement_views.py b/openedx/core/djangoapps/user_api/accounts/tests/test_retirement_views.py
index 99b6a3b58b..ac0155e368 100644
--- a/openedx/core/djangoapps/user_api/accounts/tests/test_retirement_views.py
+++ b/openedx/core/djangoapps/user_api/accounts/tests/test_retirement_views.py
@@ -18,8 +18,8 @@ from django.contrib.auth.models import User
from django.contrib.sites.models import Site
from django.core import mail
from django.core.cache import cache
-from django.core.urlresolvers import reverse
from django.test import TestCase
+from django.urls import reverse
from enterprise.models import (
EnterpriseCourseEnrollment,
EnterpriseCustomer,
diff --git a/openedx/core/djangoapps/user_api/accounts/tests/test_views.py b/openedx/core/djangoapps/user_api/accounts/tests/test_views.py
index 00b05b4645..d67ffcc693 100644
--- a/openedx/core/djangoapps/user_api/accounts/tests/test_views.py
+++ b/openedx/core/djangoapps/user_api/accounts/tests/test_views.py
@@ -14,9 +14,9 @@ import mock
import pytz
import six
from django.conf import settings
-from django.core.urlresolvers import reverse
from django.test.testcases import TransactionTestCase
from django.test.utils import override_settings
+from django.urls import reverse
from rest_framework.test import APIClient, APITestCase
from six.moves import range
diff --git a/openedx/core/djangoapps/user_api/admin.py b/openedx/core/djangoapps/user_api/admin.py
index e315f6bc05..66750d8d0f 100644
--- a/openedx/core/djangoapps/user_api/admin.py
+++ b/openedx/core/djangoapps/user_api/admin.py
@@ -6,9 +6,9 @@ Django admin configuration pages for the user_api app
from django.conf.urls import url
from django.contrib import admin, messages
from django.core.exceptions import ValidationError
-from django.core.urlresolvers import reverse
from django.http import HttpResponseForbidden, HttpResponseRedirect
from django.template.response import TemplateResponse
+from django.urls import reverse
from django.utils.html import format_html
from django.utils.translation import ugettext as _
diff --git a/openedx/features/announcements/tests/test_announcements.py b/openedx/features/announcements/tests/test_announcements.py
index b630ea534b..dc1bd336d3 100644
--- a/openedx/features/announcements/tests/test_announcements.py
+++ b/openedx/features/announcements/tests/test_announcements.py
@@ -10,7 +10,7 @@ from mock import patch
from django.conf import settings
from django.test import TestCase
from django.test.client import Client
-from django.core.urlresolvers import reverse
+from django.urls import reverse
from student.tests.factories import AdminFactory
diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt
index d64e81b3fa..b112a502fc 100644
--- a/requirements/edx/base.txt
+++ b/requirements/edx/base.txt
@@ -8,7 +8,7 @@
-e common/lib/capa # via -r requirements/edx/local.in
-e git+https://github.com/edx/codejail.git@4127fc4bd5775cc72aee8d7f0a70e31405e22439#egg=codejail # via -r requirements/edx/github.in
-e git+https://github.com/jsocol/django-ratelimit.git@72edbe8949fbf6699848e5847645a1998f121d46#egg=ratelimit # via -r requirements/edx/github.in
--e git+https://github.com/edx/django-wiki.git@v0.0.25#egg=django-wiki # via -r requirements/edx/github.in
+-e git+https://github.com/edx/django-wiki.git@v0.0.26#egg=django-wiki # via -r requirements/edx/github.in
-e git+https://github.com/edx/DoneXBlock.git@2.0.1#egg=done-xblock # via -r requirements/edx/github.in
-e git+https://github.com/jazkarta/edx-jsme.git@690dbf75441fa91c7c4899df0b83d77f7deb5458#egg=edx-jsme # via -r requirements/edx/github.in
-e . # via -r requirements/edx/local.in
@@ -117,7 +117,7 @@ edx-submissions==3.0.4 # via -r requirements/edx/base.in, ora2
edx-tincan-py35==0.0.5 # via edx-enterprise
edx-user-state-client==1.1.2 # via -r requirements/edx/base.in
edx-when==1.0.5 # via -r requirements/edx/base.in, edx-proctoring
-edxval==1.2.4 # via -r requirements/edx/base.in
+edxval==1.2.5 # via -r requirements/edx/base.in
elasticsearch==1.9.0 # via edx-search
enum34==1.1.10 # via edxval
event-tracking==0.3.0 # via -r requirements/edx/base.in, edx-proctoring, edx-search
@@ -166,7 +166,7 @@ nodeenv==1.3.5 # via -r requirements/edx/base.in
numpy==1.18.1 # via chem, openedx-calc, scipy
git+https://github.com/joestump/python-oauth2.git@b94f69b1ad195513547924e380d9265133e995fa#egg=oauth2 # via -r requirements/edx/github.in
oauthlib==3.0.1 # via -c requirements/edx/../constraints.txt, -r requirements/edx/base.in, django-oauth-toolkit, lti-consumer-xblock, requests-oauthlib, social-auth-core
-openedx-calc==1.0.4 # via -r requirements/edx/base.in
+openedx-calc==1.0.5 # via -r requirements/edx/base.in
git+https://github.com/edx/edx-ora2.git@2.6.18#egg=ora2==2.6.18 # via -r requirements/edx/github.in
packaging==20.3 # via drf-yasg
path.py==12.4.0 # via edx-enterprise, edx-i18n-tools, ora2, xmodule
diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt
index a77205384c..e679584fe6 100644
--- a/requirements/edx/development.txt
+++ b/requirements/edx/development.txt
@@ -8,7 +8,7 @@
-e common/lib/capa # via -r requirements/edx/testing.txt
-e git+https://github.com/edx/codejail.git@4127fc4bd5775cc72aee8d7f0a70e31405e22439#egg=codejail # via -r requirements/edx/testing.txt
-e git+https://github.com/jsocol/django-ratelimit.git@72edbe8949fbf6699848e5847645a1998f121d46#egg=ratelimit # via -r requirements/edx/testing.txt
--e git+https://github.com/edx/django-wiki.git@v0.0.25#egg=django-wiki # via -r requirements/edx/testing.txt
+-e git+https://github.com/edx/django-wiki.git@v0.0.26#egg=django-wiki # via -r requirements/edx/testing.txt
-e git+https://github.com/edx/DoneXBlock.git@2.0.1#egg=done-xblock # via -r requirements/edx/testing.txt
-e git+https://github.com/jazkarta/edx-jsme.git@690dbf75441fa91c7c4899df0b83d77f7deb5458#egg=edx-jsme # via -r requirements/edx/testing.txt
-e . # via -r requirements/edx/testing.txt
@@ -131,7 +131,7 @@ edx-submissions==3.0.4 # via -r requirements/edx/testing.txt, ora2
edx-tincan-py35==0.0.5 # via -r requirements/edx/testing.txt, edx-enterprise
edx-user-state-client==1.1.2 # via -r requirements/edx/testing.txt
edx-when==1.0.5 # via -r requirements/edx/testing.txt, edx-proctoring
-edxval==1.2.4 # via -r requirements/edx/testing.txt
+edxval==1.2.5 # via -r requirements/edx/testing.txt
elasticsearch==1.9.0 # via -r requirements/edx/testing.txt, edx-search
entrypoints==0.3 # via -r requirements/edx/testing.txt, flake8
enum34==1.1.10 # via -r requirements/edx/testing.txt, edxval
@@ -200,7 +200,7 @@ nodeenv==1.3.5 # via -r requirements/edx/testing.txt
numpy==1.18.1 # via -r requirements/edx/testing.txt, chem, openedx-calc, pandas, scipy
git+https://github.com/joestump/python-oauth2.git@b94f69b1ad195513547924e380d9265133e995fa#egg=oauth2 # via -r requirements/edx/testing.txt
oauthlib==3.0.1 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt, django-oauth-toolkit, lti-consumer-xblock, requests-oauthlib, social-auth-core
-openedx-calc==1.0.4 # via -r requirements/edx/testing.txt
+openedx-calc==1.0.5 # via -r requirements/edx/testing.txt
git+https://github.com/edx/edx-ora2.git@2.6.18#egg=ora2==2.6.18 # via -r requirements/edx/testing.txt
packaging==20.3 # via -r requirements/edx/testing.txt, drf-yasg, pytest, sphinx, tox
pandas==0.22.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt
diff --git a/requirements/edx/github.in b/requirements/edx/github.in
index 06ae7f31fb..f0c3ba3bf8 100644
--- a/requirements/edx/github.in
+++ b/requirements/edx/github.in
@@ -55,7 +55,7 @@
git+https://github.com/edx/openedx-chem.git@ff4e3a03d3c7610e47a9af08eb648d8aabe2eb18#egg=chem==1.0.0
# Third-party:
--e git+https://github.com/edx/django-wiki.git@v0.0.25#egg=django-wiki
+-e git+https://github.com/edx/django-wiki.git@v0.0.26#egg=django-wiki
git+https://github.com/edx/MongoDBProxy.git@d92bafe9888d2940f647a7b2b2383b29c752f35a#egg=MongoDBProxy==0.1.0+edx.2
-e git+https://github.com/dementrock/pystache_custom.git@776973740bdaad83a3b029f96e415a7d1e8bec2f#egg=pystache_custom-dev
-e git+https://github.com/jazkarta/edx-jsme.git@690dbf75441fa91c7c4899df0b83d77f7deb5458#egg=edx-jsme
diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt
index 3207d3448e..499c9b39a4 100644
--- a/requirements/edx/testing.txt
+++ b/requirements/edx/testing.txt
@@ -8,7 +8,7 @@
-e common/lib/capa # via -r requirements/edx/base.txt
-e git+https://github.com/edx/codejail.git@4127fc4bd5775cc72aee8d7f0a70e31405e22439#egg=codejail # via -r requirements/edx/base.txt
-e git+https://github.com/jsocol/django-ratelimit.git@72edbe8949fbf6699848e5847645a1998f121d46#egg=ratelimit # via -r requirements/edx/base.txt
--e git+https://github.com/edx/django-wiki.git@v0.0.25#egg=django-wiki # via -r requirements/edx/base.txt
+-e git+https://github.com/edx/django-wiki.git@v0.0.26#egg=django-wiki # via -r requirements/edx/base.txt
-e git+https://github.com/edx/DoneXBlock.git@2.0.1#egg=done-xblock # via -r requirements/edx/base.txt
-e git+https://github.com/jazkarta/edx-jsme.git@690dbf75441fa91c7c4899df0b83d77f7deb5458#egg=edx-jsme # via -r requirements/edx/base.txt
-e . # via -r requirements/edx/base.txt
@@ -126,7 +126,7 @@ edx-submissions==3.0.4 # via -r requirements/edx/base.txt, ora2
edx-tincan-py35==0.0.5 # via -r requirements/edx/base.txt, edx-enterprise
edx-user-state-client==1.1.2 # via -r requirements/edx/base.txt
edx-when==1.0.5 # via -r requirements/edx/base.txt, edx-proctoring
-edxval==1.2.4 # via -r requirements/edx/base.txt
+edxval==1.2.5 # via -r requirements/edx/base.txt
elasticsearch==1.9.0 # via -r requirements/edx/base.txt, edx-search
entrypoints==0.3 # via flake8
enum34==1.1.10 # via -r requirements/edx/base.txt, edxval
@@ -191,7 +191,7 @@ nodeenv==1.3.5 # via -r requirements/edx/base.txt
numpy==1.18.1 # via -r requirements/edx/base.txt, -r requirements/edx/coverage.txt, chem, openedx-calc, pandas, scipy
git+https://github.com/joestump/python-oauth2.git@b94f69b1ad195513547924e380d9265133e995fa#egg=oauth2 # via -r requirements/edx/base.txt
oauthlib==3.0.1 # via -c requirements/edx/../constraints.txt, -r requirements/edx/base.txt, django-oauth-toolkit, lti-consumer-xblock, requests-oauthlib, social-auth-core
-openedx-calc==1.0.4 # via -r requirements/edx/base.txt
+openedx-calc==1.0.5 # via -r requirements/edx/base.txt
git+https://github.com/edx/edx-ora2.git@2.6.18#egg=ora2==2.6.18 # via -r requirements/edx/base.txt
packaging==20.3 # via -r requirements/edx/base.txt, drf-yasg, pytest, tox
pandas==0.22.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/coverage.txt