Skip to content

Commit 95e7d4d

Browse files
authored
Migrate 'test_conf.yml' to 'assert_type' tests (typeddjango#2182)
1 parent 1f4efbe commit 95e7d4d

File tree

6 files changed

+58
-69
lines changed

6 files changed

+58
-69
lines changed

Diff for: django-stubs/conf/urls/__init__.pyi

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ handler403: str | Callable[..., HttpResponse]
1212
handler404: str | Callable[..., HttpResponse]
1313
handler500: str | Callable[..., HttpResponse]
1414

15-
IncludedURLConf: TypeAlias = tuple[Sequence[URLResolver | URLPattern], str | None, str | None]
15+
_IncludedURLConf: TypeAlias = tuple[Sequence[URLResolver | URLPattern], str | None, str | None]
1616

1717
# Deprecated
1818
@overload
@@ -21,7 +21,7 @@ def url(
2121
) -> URLPattern: ...
2222
@overload
2323
def url(
24-
regex: str, view: IncludedURLConf, kwargs: dict[str, Any] | None = ..., name: str | None = ...
24+
regex: str, view: _IncludedURLConf, kwargs: dict[str, Any] | None = ..., name: str | None = ...
2525
) -> URLResolver: ...
2626
@overload
2727
def url(

Diff for: django-stubs/urls/conf.pyi

+6-6
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@ from django.urls import URLPattern, URLResolver, _AnyURL
66
from django.utils.functional import _StrOrPromise
77
from typing_extensions import TypeAlias
88

9-
from ..conf.urls import IncludedURLConf
9+
from ..conf.urls import _IncludedURLConf
1010
from ..http.response import HttpResponseBase
1111

1212
_URLConf: TypeAlias = str | ModuleType | Sequence[_AnyURL]
1313

14-
def include(
15-
arg: _URLConf | tuple[_URLConf, str], namespace: str | None = ...
16-
) -> tuple[Sequence[URLResolver | URLPattern], str | None, str | None]: ...
14+
def include(arg: _URLConf | tuple[_URLConf, str], namespace: str | None = ...) -> _IncludedURLConf: ...
1715

1816
# path()
1917
@overload
@@ -28,7 +26,9 @@ def path(
2826
name: str = ...,
2927
) -> URLPattern: ...
3028
@overload
31-
def path(route: _StrOrPromise, view: IncludedURLConf, kwargs: dict[str, Any] = ..., name: str = ...) -> URLResolver: ...
29+
def path(
30+
route: _StrOrPromise, view: _IncludedURLConf, kwargs: dict[str, Any] = ..., name: str = ...
31+
) -> URLResolver: ...
3232
@overload
3333
def path(
3434
route: _StrOrPromise, view: Sequence[URLResolver | str], kwargs: dict[str, Any] = ..., name: str = ...
@@ -48,7 +48,7 @@ def re_path(
4848
) -> URLPattern: ...
4949
@overload
5050
def re_path(
51-
route: _StrOrPromise, view: IncludedURLConf, kwargs: dict[str, Any] = ..., name: str = ...
51+
route: _StrOrPromise, view: _IncludedURLConf, kwargs: dict[str, Any] = ..., name: str = ...
5252
) -> URLResolver: ...
5353
@overload
5454
def re_path(

Diff for: pytest.ini

+1
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ addopts =
99
--cache-clear
1010
--mypy-ini-file=mypy.ini
1111
--mypy-extension-hook=scripts.tests_extension_hook.django_plugin_hook
12+
--ignore=tests/assert_type

Diff for: scripts/stubtest/allowlist_todo.txt

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ django.conf.LazySettings.DEFAULT_FILE_STORAGE
77
django.conf.LazySettings.STATICFILES_STORAGE
88
django.conf.STATICFILES_STORAGE_DEPRECATED_MSG
99
django.conf.global_settings.gettext_noop
10-
django.conf.urls.IncludedURLConf
1110
django.conf.urls.url
1211
django.contrib.admin.FieldListFilter.title
1312
django.contrib.admin.ModelAdmin

Diff for: tests/assert_type/urls/test_conf.py

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
from typing import List, Tuple
2+
3+
from django.conf.urls.i18n import urlpatterns as i18n_urlpatterns
4+
from django.contrib import admin
5+
from django.contrib.auth.views import LoginView
6+
from django.contrib.flatpages import urls as flatpages_urls
7+
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
8+
from django.http import HttpResponse
9+
from django.urls import URLPattern, URLResolver, _AnyURL, include, path, re_path
10+
from django.utils.translation import gettext_lazy as _
11+
from typing_extensions import assert_type
12+
13+
# Test 'path' accepts mix of pattern and resolver object
14+
include1: Tuple[List[_AnyURL], None, None] = ([], None, None)
15+
assert_type(path("test/", include1), URLResolver)
16+
17+
# Test 'path' accepts pattern resolver union subset
18+
include2: Tuple[List[URLPattern], None, None] = ([], None, None)
19+
assert_type(path("test/", include2), URLResolver)
20+
21+
# Test 'path'
22+
assert_type(path("admin/", admin.site.urls), URLResolver)
23+
assert_type(path(_("admin/"), admin.site.urls, name="admin"), URLResolver)
24+
assert_type(path("login/", LoginView.as_view(), name="login1"), URLPattern)
25+
assert_type(path(_("login/"), LoginView.as_view(), name="login2"), URLPattern)
26+
27+
28+
def v1() -> HttpResponse: ...
29+
async def v2() -> HttpResponse: ...
30+
31+
32+
assert_type(path("v1/", v1), URLPattern)
33+
assert_type(path("v2/", v2), URLPattern)
34+
assert_type(re_path("^v1/", v1), URLPattern)
35+
assert_type(re_path("^v2/", v2), URLPattern)
36+
37+
# Test 'include'
38+
patterns1: List[_AnyURL] = []
39+
assert_type(re_path(_("^foo/"), include(patterns1)), URLResolver)
40+
assert_type(re_path("^foo/", include(patterns1, namespace="foo")), URLResolver)
41+
assert_type(re_path("^foo/", include((patterns1, "foo"), namespace="foo")), URLResolver)
42+
assert_type(re_path("^foo/", include(patterns1, "foo")), URLResolver)
43+
assert_type(path("flat/", include(flatpages_urls)), URLResolver)
44+
assert_type(path("flat/", include((flatpages_urls, "static"))), URLResolver)
45+
assert_type(path("i18n/", include(i18n_urlpatterns)), URLResolver)
46+
assert_type(path("i18n/", include((i18n_urlpatterns, "i18n"))), URLResolver)
47+
assert_type(path("admindocs/", include("django.contrib.admindocs.urls")), URLResolver)
48+
assert_type(path("admindocs/", include(("django.contrib.admindocs.urls", "i18n"))), URLResolver)
49+
assert_type(path("", include(staticfiles_urlpatterns(prefix="static/"))), URLResolver)

Diff for: tests/typecheck/urls/test_conf.yml

-60
This file was deleted.

0 commit comments

Comments
 (0)