|
| 1 | +- case: login_required_bare |
| 2 | + main: | |
| 3 | + from django.contrib.auth.decorators import login_required |
| 4 | + @login_required |
| 5 | + def view_func(request): ... |
| 6 | + reveal_type(view_func) # N: Revealed type is 'def (request: Any) -> Any' |
| 7 | +- case: login_required_fancy |
| 8 | + main: | |
| 9 | + from django.contrib.auth.decorators import login_required |
| 10 | + from django.core.handlers.wsgi import WSGIRequest |
| 11 | + from django.http import HttpResponse |
| 12 | + @login_required(redirect_field_name='a', login_url='b') |
| 13 | + def view_func(request: WSGIRequest, arg: str) -> HttpResponse: ... |
| 14 | + reveal_type(view_func) # N: Revealed type is 'def (request: django.core.handlers.wsgi.WSGIRequest, arg: builtins.str) -> django.http.response.HttpResponse' |
| 15 | +- case: login_required_weird |
| 16 | + main: | |
| 17 | + from django.contrib.auth.decorators import login_required |
| 18 | + # This is non-conventional usage, but covered in Django tests, so we allow it. |
| 19 | + def view_func(request): ... |
| 20 | + wrapped_view = login_required(view_func, redirect_field_name='a', login_url='b') |
| 21 | + reveal_type(wrapped_view) # N: Revealed type is 'def (request: Any) -> Any' |
| 22 | +- case: login_required_incorrect_return |
| 23 | + main: | |
| 24 | + from django.contrib.auth.decorators import login_required |
| 25 | + @login_required() # E: Value of type variable "_VIEW" of function cannot be "Callable[[Any], str]" |
| 26 | + def view_func2(request) -> str: ... |
| 27 | +- case: user_passes_test |
| 28 | + main: | |
| 29 | + from django.contrib.auth.decorators import user_passes_test |
| 30 | + @user_passes_test(lambda u: u.username.startswith('super')) |
| 31 | + def view_func(request): ... |
| 32 | + reveal_type(view_func) # N: Revealed type is 'def (request: Any) -> Any' |
| 33 | +- case: user_passes_test_bare_is_error |
| 34 | + main: | |
| 35 | + from django.http.response import HttpResponse |
| 36 | + from django.contrib.auth.decorators import user_passes_test |
| 37 | + @user_passes_test # E: Argument 1 to "user_passes_test" has incompatible type "Callable[[Any], HttpResponse]"; expected "Callable[[AbstractUser], bool]" |
| 38 | + def view_func(request) -> HttpResponse: ... |
| 39 | +- case: permission_required |
| 40 | + main: | |
| 41 | + from django.contrib.auth.decorators import permission_required |
| 42 | + @permission_required('polls.can_vote') |
| 43 | + def view_func(request): ... |
0 commit comments