diff --git a/analytics/views.py b/analytics/views.py
index 937956a84d..af52993b07 100644
--- a/analytics/views.py
+++ b/analytics/views.py
@@ -11,7 +11,7 @@ from typing import Any, Callable, Dict, List, \
import pytz
from django.conf import settings
-from django.core import urlresolvers
+from django.urls import reverse
from django.db import connection
from django.db.models import Sum
from django.db.models.query import QuerySet
@@ -881,13 +881,13 @@ def format_date_for_activity_reports(date: Optional[datetime]) -> str:
def user_activity_link(email: str) -> mark_safe:
url_name = 'analytics.views.get_user_activity'
- url = urlresolvers.reverse(url_name, kwargs=dict(email=email))
+ url = reverse(url_name, kwargs=dict(email=email))
email_link = '%s' % (url, email)
return mark_safe(email_link)
def realm_activity_link(realm_str: str) -> mark_safe:
url_name = 'analytics.views.get_realm_activity'
- url = urlresolvers.reverse(url_name, kwargs=dict(realm_str=realm_str))
+ url = reverse(url_name, kwargs=dict(realm_str=realm_str))
realm_link = '%s' % (url, realm_str)
return mark_safe(realm_link)
diff --git a/zerver/forms.py b/zerver/forms.py
index 378e668f5b..9877daf8d8 100644
--- a/zerver/forms.py
+++ b/zerver/forms.py
@@ -5,7 +5,7 @@ from django.contrib.auth import authenticate
from django.contrib.auth.forms import SetPasswordForm, AuthenticationForm, \
PasswordResetForm
from django.core.exceptions import ValidationError
-from django.core.urlresolvers import reverse
+from django.urls import reverse
from django.core.validators import validate_email
from django.db.models.query import QuerySet
from django.utils.translation import ugettext as _
diff --git a/zerver/lib/integrations.py b/zerver/lib/integrations.py
index e304eb360a..600f50eb18 100644
--- a/zerver/lib/integrations.py
+++ b/zerver/lib/integrations.py
@@ -4,7 +4,7 @@ import pathlib
from typing import Dict, List, Optional, TypeVar, Any, Text
from django.conf import settings
from django.conf.urls import url
-from django.core.urlresolvers import LocaleRegexProvider
+from django.urls.resolvers import LocaleRegexProvider
from django.utils.module_loading import import_string
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
diff --git a/zerver/lib/test_classes.py b/zerver/lib/test_classes.py
index e11c271bc0..bbc518cfb0 100644
--- a/zerver/lib/test_classes.py
+++ b/zerver/lib/test_classes.py
@@ -2,7 +2,7 @@ from contextlib import contextmanager
from typing import (cast, Any, Callable, Dict, Iterable, Iterator, List, Mapping, Optional,
Sized, Tuple, Union, Text)
-from django.core.urlresolvers import resolve
+from django.urls import resolve
from django.conf import settings
from django.test import TestCase
from django.test.client import (
diff --git a/zerver/lib/test_helpers.py b/zerver/lib/test_helpers.py
index 6b04caa240..dee26ffedd 100644
--- a/zerver/lib/test_helpers.py
+++ b/zerver/lib/test_helpers.py
@@ -5,7 +5,7 @@ from typing import (
)
from django.core import signing
-from django.core.urlresolvers import LocaleRegexURLResolver
+from django.urls.resolvers import LocaleRegexURLResolver
from django.conf import settings
from django.test import TestCase, override_settings
from django.test.client import (
diff --git a/zerver/tests/test_auth_backends.py b/zerver/tests/test_auth_backends.py
index d277741870..dfea35d1b5 100644
--- a/zerver/tests/test_auth_backends.py
+++ b/zerver/tests/test_auth_backends.py
@@ -10,7 +10,7 @@ from typing import Any, Callable, Dict, List, Optional, Text
from builtins import object
from oauth2client.crypt import AppIdentityError
from django.core import signing
-from django.core.urlresolvers import reverse
+from django.urls import reverse
import jwt
import mock
diff --git a/zerver/tests/test_urls.py b/zerver/tests/test_urls.py
index bcc28f20f0..e8bdbc57b9 100644
--- a/zerver/tests/test_urls.py
+++ b/zerver/tests/test_urls.py
@@ -4,7 +4,7 @@ import importlib
import os
import ujson
-import django.core.urlresolvers
+import django.urls.resolvers
from django.test import TestCase, Client
from typing import List, Optional
@@ -106,7 +106,7 @@ class PublicURLTest(ZulipTestCase):
self.assertEqual('ABCD', data['google_client_id'])
class URLResolutionTest(TestCase):
- def get_callback_string(self, pattern: django.core.urlresolvers.RegexURLPattern) -> Optional[str]:
+ def get_callback_string(self, pattern: django.urls.resolvers.RegexURLPattern) -> Optional[str]:
callback_str = hasattr(pattern, 'lookup_str') and 'lookup_str'
callback_str = callback_str or '_callback_str'
return getattr(pattern, callback_str, None)
diff --git a/zerver/tornado/handlers.py b/zerver/tornado/handlers.py
index ce1c684d94..1507f0540c 100644
--- a/zerver/tornado/handlers.py
+++ b/zerver/tornado/handlers.py
@@ -8,12 +8,13 @@ from typing import Any, Callable, Dict, List, Optional
import tornado.web
from django import http
from django.conf import settings
-from django.core import exceptions, signals, urlresolvers
+from django.core import exceptions, signals
+from django.urls import resolvers
from django.core.exceptions import MiddlewareNotUsed
from django.core.handlers import base
from django.core.handlers.exception import convert_exception_to_response
from django.core.handlers.wsgi import WSGIRequest, get_script_name
-from django.core.urlresolvers import set_script_prefix
+from django.urls import set_script_prefix, set_urlconf
from django.http import HttpRequest, HttpResponse
from django.utils.module_loading import import_string
from tornado.wsgi import WSGIContainer
@@ -189,8 +190,8 @@ class AsyncDjangoHandler(tornado.web.RequestHandler, base.BaseHandler):
try:
# Setup default url resolver for this thread.
urlconf = settings.ROOT_URLCONF
- urlresolvers.set_urlconf(urlconf)
- resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)
+ set_urlconf(urlconf)
+ resolver = resolvers.RegexURLResolver(r'^/', urlconf)
response = None
@@ -203,8 +204,8 @@ class AsyncDjangoHandler(tornado.web.RequestHandler, base.BaseHandler):
if hasattr(request, "urlconf"):
# Reset url resolver with a custom urlconf.
urlconf = request.urlconf
- urlresolvers.set_urlconf(urlconf)
- resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)
+ set_urlconf(urlconf)
+ resolver = resolvers.RegexURLResolver(r'^/', urlconf)
### ADDED BY ZULIP
request._resolver = resolver
@@ -297,7 +298,7 @@ class AsyncDjangoHandler(tornado.web.RequestHandler, base.BaseHandler):
return self.handle_uncaught_exception(request, resolver, exc_info)
finally:
# Reset urlconf on the way out for isolation
- urlresolvers.set_urlconf(None)
+ set_urlconf(None)
### ZULIP CHANGE: The remainder of this function was moved
### into its own function, just below, so we can call it from
@@ -308,7 +309,7 @@ class AsyncDjangoHandler(tornado.web.RequestHandler, base.BaseHandler):
### Copied from get_response (above in this file)
def apply_response_middleware(self, request: HttpRequest, response: HttpResponse,
- resolver: urlresolvers.RegexURLResolver) -> HttpResponse:
+ resolver: resolvers.RegexURLResolver) -> HttpResponse:
try:
# Apply response middleware, regardless of the response
for middleware_method in self._response_middleware:
diff --git a/zerver/views/auth.py b/zerver/views/auth.py
index 458a59005a..cd44836520 100644
--- a/zerver/views/auth.py
+++ b/zerver/views/auth.py
@@ -6,7 +6,7 @@ from django.contrib.auth import authenticate, get_backends
from django.contrib.auth.views import login as django_login_page, \
logout_then_login as django_logout_then_login
from django.contrib.auth.views import password_reset as django_password_reset
-from django.core.urlresolvers import reverse
+from django.urls import reverse
from zerver.decorator import authenticated_json_post_view, require_post, \
process_client, do_login, log_view_func
from django.http import HttpRequest, HttpResponse, HttpResponseRedirect, \
diff --git a/zerver/views/home.py b/zerver/views/home.py
index 72be6d62ce..7b8ad4348b 100644
--- a/zerver/views/home.py
+++ b/zerver/views/home.py
@@ -1,7 +1,7 @@
from typing import Any, List, Dict, Optional, Text, Iterator
from django.conf import settings
-from django.core.urlresolvers import reverse
+from django.urls import reverse
from django.http import HttpResponseRedirect, HttpResponse, HttpRequest
from django.shortcuts import redirect, render
from django.utils import translation
diff --git a/zerver/views/registration.py b/zerver/views/registration.py
index 7ccfcc87c7..6f29dfb0c6 100644
--- a/zerver/views/registration.py
+++ b/zerver/views/registration.py
@@ -4,7 +4,7 @@ from typing import Any, List, Dict, Mapping, Optional, Text
from django.utils.translation import ugettext as _
from django.conf import settings
from django.contrib.auth import authenticate, get_backends
-from django.core.urlresolvers import reverse
+from django.urls import reverse
from django.http import HttpResponseRedirect, HttpResponseForbidden, HttpResponse, HttpRequest
from django.shortcuts import redirect, render
from django.template import RequestContext, loader
diff --git a/zproject/jinja2/__init__.py b/zproject/jinja2/__init__.py
index 2106101223..df8244e28b 100644
--- a/zproject/jinja2/__init__.py
+++ b/zproject/jinja2/__init__.py
@@ -3,7 +3,7 @@ from typing import Any
from django.contrib.staticfiles.storage import staticfiles_storage
from django.template.defaultfilters import slugify, pluralize
-from django.core.urlresolvers import reverse
+from django.urls import reverse
from django.utils import translation
from jinja2 import Environment