Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Django 2.0+ django.urls import fixes #404

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ Changelog

Thanks to Alessandro Ferrini in `PR #423 <https://github.com/adamchainz/django-upgrade/pull/423>`__.

* Add Django 2.0+ imports fixes for names moved from ``django.core.urlresolvers`` to ``django.urls``.

Thanks to Thibaut Decombe in `PR #404 <https://github.com/adamchainz/django-upgrade/pull/404>`__.

1.15.0 (2023-09-24)
-------------------

Expand Down
9 changes: 8 additions & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -326,14 +326,21 @@ Rewrites some compatibility imports:

* ``django.templatetags.static.static`` in ``django.contrib.staticfiles.templatetags.staticfiles``

Whilst mentioned in the `Django 2.1 release notes <https://docs.djangoproject.com/en/2.1/releases/2.1/#features-deprecated-in-2-1>`_, these have been possible since Django 1.10.
(Whilst mentioned in the `Django 2.1 release notes <https://docs.djangoproject.com/en/2.1/releases/2.1/#features-deprecated-in-2-1>`_, this has been possible since Django 1.10.)

* ``django.urls.*`` in ``django.core.urlresolvers.*``

.. code-block:: diff

-from django.contrib.staticfiles.templatetags.staticfiles import static
+from django.templatetags.static import static

-from django.core.urlresolvers import reverse
+from django.urls import reverse

-from django.core.urlresolvers import resolve
+from django.urls import resolve

Django 1.11
-----------

Expand Down
30 changes: 30 additions & 0 deletions src/django_upgrade/fixers/compatibility_imports.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,36 @@
"django.contrib.staticfiles.templatetags.staticfiles": {
"static": "django.templatetags.static",
},
"django.core.urlresolvers": {
# Objects moved from django.core.resolvers to django.urls in
# Django 1.10:
# https://github.com/django/django/blob/stable/1.10.x/django/urls/__init__.py
# The following are excluded because they were removed in Django
# 2.0: RegexURLPattern, LocaleRegexURLResolver, RegexURLResolver
# and LocaleRegexProvider. See:
# https://github.com/django/django/pull/7482#discussion_r121311884
name: "django.urls"
for name in (
"NoReverseMatch",
"Resolver404",
"ResolverMatch",
"clear_script_prefix",
"clear_url_caches",
"get_callable",
"get_mod_func",
"get_ns_resolver",
"get_resolver",
"get_script_prefix",
"get_urlconf",
"is_valid_path",
"resolve",
"reverse",
"reverse_lazy",
"set_script_prefix",
"set_urlconf",
"translate_url",
)
},
},
(1, 11): {
"django.db.models.fields": {
Expand Down
60 changes: 60 additions & 0 deletions tests/fixers/test_compatibility_imports.py
Original file line number Diff line number Diff line change
Expand Up @@ -353,3 +353,63 @@ def test_all_transformed():
""",
Settings(target_version=(3, 1)),
)


def test_urlresolvers_noop():
check_noop(
"""\
from django.core.urlresolvers import RegexURLPattern
from django.core.urlresolvers import LocaleRegexURLResolver
from django.core.urlresolvers import RegexURLResolver
from django.core.urlresolvers import LocaleRegexProvider
from django.core.urlresolvers import Foo
from django.core.urlresolvers import *
""",
Settings(target_version=(1, 10)),
)


def test_urlresolvers_transformed():
check_transformed(
"""\
from django.core.urlresolvers import NoReverseMatch
from django.core.urlresolvers import Resolver404
from django.core.urlresolvers import ResolverMatch
from django.core.urlresolvers import clear_script_prefix
from django.core.urlresolvers import clear_url_caches
from django.core.urlresolvers import get_callable
from django.core.urlresolvers import get_mod_func
from django.core.urlresolvers import get_ns_resolver
from django.core.urlresolvers import get_resolver
from django.core.urlresolvers import get_script_prefix
from django.core.urlresolvers import get_urlconf
from django.core.urlresolvers import is_valid_path
from django.core.urlresolvers import resolve
from django.core.urlresolvers import reverse
from django.core.urlresolvers import reverse_lazy
from django.core.urlresolvers import set_script_prefix
from django.core.urlresolvers import set_urlconf
from django.core.urlresolvers import translate_url
""",
"""\
from django.urls import NoReverseMatch
from django.urls import Resolver404
from django.urls import ResolverMatch
from django.urls import clear_script_prefix
from django.urls import clear_url_caches
from django.urls import get_callable
from django.urls import get_mod_func
from django.urls import get_ns_resolver
from django.urls import get_resolver
from django.urls import get_script_prefix
from django.urls import get_urlconf
from django.urls import is_valid_path
from django.urls import resolve
from django.urls import reverse
from django.urls import reverse_lazy
from django.urls import set_script_prefix
from django.urls import set_urlconf
from django.urls import translate_url
""",
Settings(target_version=(1, 10)),
)
Loading