Skip to content

Revert "Used _ContextKeys for context like dicts" #1311

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

Merged
merged 1 commit into from
Jan 21, 2023
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
23 changes: 8 additions & 15 deletions django-stubs/contrib/admin/options.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ from django.forms.models import (
from django.forms.widgets import Media
from django.http.request import HttpRequest
from django.http.response import HttpResponse, HttpResponseRedirect
from django.template.context import _ContextKeys
from django.template.response import _TemplateForResponseT
from django.urls.resolvers import URLPattern
from django.utils.datastructures import _ListOrTuple
Expand Down Expand Up @@ -232,7 +231,7 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
def render_change_form(
self,
request: HttpRequest,
context: Mapping[_ContextKeys, Any],
context: dict[str, Any],
add: bool = ...,
change: bool = ...,
form_url: str = ...,
Expand All @@ -245,7 +244,7 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
# Probably FileResponse cannot come from ModelAdmin views
def response_action(self, request: HttpRequest, queryset: QuerySet) -> HttpResponse | None: ...
def response_delete(self, request: HttpRequest, obj_display: str, obj_id: int) -> HttpResponse: ...
def render_delete_form(self, request: HttpRequest, context: Mapping[_ContextKeys, Any]) -> HttpResponse: ...
def render_delete_form(self, request: HttpRequest, context: dict[str, Any]) -> HttpResponse: ...
def get_inline_formsets(
self, request: HttpRequest, formsets: list[Any], inline_instances: list[Any], obj: _ModelT | None = ...
) -> list[Any]: ...
Expand All @@ -255,29 +254,23 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
request: HttpRequest,
object_id: str | None = ...,
form_url: str = ...,
extra_context: Mapping[_ContextKeys, Any] | None = ...,
extra_context: dict[str, Any] | None = ...,
) -> HttpResponse: ...
def add_view(
self, request: HttpRequest, form_url: str = ..., extra_context: Mapping[_ContextKeys, Any] | None = ...
self, request: HttpRequest, form_url: str = ..., extra_context: dict[str, Any] | None = ...
) -> HttpResponse: ...
def change_view(
self,
request: HttpRequest,
object_id: str,
form_url: str = ...,
extra_context: Mapping[_ContextKeys, Any] | None = ...,
) -> HttpResponse: ...
def changelist_view(
self, request: HttpRequest, extra_context: Mapping[_ContextKeys, Any] | None = ...
self, request: HttpRequest, object_id: str, form_url: str = ..., extra_context: dict[str, Any] | None = ...
) -> HttpResponse: ...
def changelist_view(self, request: HttpRequest, extra_context: dict[str, Any] | None = ...) -> HttpResponse: ...
def get_deleted_objects(
self, objs: Sequence[_ModelT] | QuerySet[_ModelT], request: HttpRequest
) -> tuple[list[Model], dict[str, int], set[str], list[str]]: ...
def delete_view(
self, request: HttpRequest, object_id: str, extra_context: Mapping[_ContextKeys, Any] | None = ...
self, request: HttpRequest, object_id: str, extra_context: dict[str, Any] | None = ...
) -> HttpResponse: ...
def history_view(
self, request: HttpRequest, object_id: str, extra_context: Mapping[_ContextKeys, Any] | None = ...
self, request: HttpRequest, object_id: str, extra_context: dict[str, Any] | None = ...
) -> HttpResponse: ...

_ChildModelT = TypeVar("_ChildModelT", bound=Model)
Expand Down
25 changes: 8 additions & 17 deletions django-stubs/contrib/admin/sites.pyi
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import sys
from collections.abc import Callable, Iterable, Mapping
from collections.abc import Callable, Iterable
from typing import Any

from django.apps.config import AppConfig
Expand All @@ -10,7 +10,6 @@ from django.db.models.base import Model
from django.db.models.query import QuerySet
from django.http.request import HttpRequest
from django.http.response import HttpResponse
from django.template.context import _ContextKeys
from django.template.response import TemplateResponse
from django.urls import URLPattern, URLResolver
from django.utils.functional import LazyObject, _StrOrPromise
Expand Down Expand Up @@ -71,26 +70,18 @@ class AdminSite:
@property
def urls(self) -> tuple[list[URLResolver | URLPattern], str, str]: ...
def each_context(self, request: HttpRequest) -> dict[str, Any]: ...
def password_change(
self, request: HttpRequest, extra_context: Mapping[_ContextKeys, Any] | None = ...
) -> TemplateResponse: ...
def password_change(self, request: HttpRequest, extra_context: dict[str, Any] | None = ...) -> TemplateResponse: ...
def password_change_done(
self, request: HttpRequest, extra_context: Mapping[_ContextKeys, Any] | None = ...
) -> TemplateResponse: ...
def i18n_javascript(
self, request: HttpRequest, extra_context: Mapping[_ContextKeys, Any] | None = ...
) -> HttpResponse: ...
def logout(
self, request: HttpRequest, extra_context: Mapping[_ContextKeys, Any] | None = ...
self, request: HttpRequest, extra_context: dict[str, Any] | None = ...
) -> TemplateResponse: ...
def login(self, request: HttpRequest, extra_context: Mapping[_ContextKeys, Any] | None = ...) -> HttpResponse: ...
def i18n_javascript(self, request: HttpRequest, extra_context: dict[str, Any] | None = ...) -> HttpResponse: ...
def logout(self, request: HttpRequest, extra_context: dict[str, Any] | None = ...) -> TemplateResponse: ...
def login(self, request: HttpRequest, extra_context: dict[str, Any] | None = ...) -> HttpResponse: ...
def _build_app_dict(self, request: HttpRequest, label: _StrOrPromise | None = ...) -> dict[str, Any]: ...
def get_app_list(self, request: HttpRequest) -> list[Any]: ...
def index(
self, request: HttpRequest, extra_context: Mapping[_ContextKeys, Any] | None = ...
) -> TemplateResponse: ...
def index(self, request: HttpRequest, extra_context: dict[str, Any] | None = ...) -> TemplateResponse: ...
def app_index(
self, request: HttpRequest, app_label: str, extra_context: Mapping[_ContextKeys, Any] | None = ...
self, request: HttpRequest, app_label: str, extra_context: dict[str, Any] | None = ...
) -> TemplateResponse: ...
def autocomplete_view(self, request: HttpRequest) -> HttpResponse: ...
def catch_all_view(self, request: HttpRequest, url: str) -> HttpResponse: ...
Expand Down
6 changes: 1 addition & 5 deletions django-stubs/forms/renderers.pyi
Original file line number Diff line number Diff line change
@@ -1,20 +1,16 @@
from collections.abc import Mapping
from typing import Any

from django.http import HttpRequest
from django.template.backends.base import BaseEngine
from django.template.backends.django import DjangoTemplates as DjangoTemplatesR
from django.template.backends.jinja2 import Jinja2 as Jinja2R
from django.template.base import Template
from django.template.context import _ContextKeys

def get_default_renderer() -> BaseRenderer: ...

class BaseRenderer:
def get_template(self, template_name: str) -> Any: ...
def render(
self, template_name: str, context: Mapping[_ContextKeys, Any], request: HttpRequest | None = ...
) -> str: ...
def render(self, template_name: str, context: dict[str, Any], request: HttpRequest | None = ...) -> str: ...

class EngineMixin:
def get_template(self, template_name: str) -> Any: ...
Expand Down
3 changes: 1 addition & 2 deletions django-stubs/shortcuts.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@ from django.http import HttpRequest
from django.http.response import HttpResponse as HttpResponse
from django.http.response import HttpResponsePermanentRedirect as HttpResponsePermanentRedirect
from django.http.response import HttpResponseRedirect as HttpResponseRedirect
from django.template.context import _ContextKeys
from typing_extensions import Literal

def render(
request: HttpRequest | None,
template_name: str | Sequence[str],
context: Mapping[_ContextKeys, Any] | None = ...,
context: Mapping[str, Any] | None = ...,
content_type: str | None = ...,
status: int | None = ...,
using: str | None = ...,
Expand Down
3 changes: 1 addition & 2 deletions django-stubs/template/backends/base.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ from typing import Any, Protocol
from django.http.request import HttpRequest
from django.template import TemplateDoesNotExist
from django.template.base import Context
from django.template.context import _ContextKeys
from django.utils.safestring import SafeString

class BaseEngine:
Expand All @@ -23,6 +22,6 @@ class BaseEngine:
class _EngineTemplate(Protocol):
def render(
self,
context: Context | Mapping[_ContextKeys, Any] | None = ...,
context: Context | dict[str, Any] | None = ...,
request: HttpRequest | None = ...,
) -> SafeString: ...
4 changes: 1 addition & 3 deletions django-stubs/template/backends/dummy.pyi
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import string
from collections.abc import Mapping
from typing import Any

from django.http.request import HttpRequest
from django.template.context import _ContextKeys

from .base import BaseEngine

Expand All @@ -13,4 +11,4 @@ class TemplateStrings(BaseEngine):

class Template(string.Template):
template: str
def render(self, context: Mapping[_ContextKeys, Any] | None = ..., request: HttpRequest | None = ...) -> str: ...
def render(self, context: dict[str, str] | None = ..., request: HttpRequest | None = ...) -> str: ...
5 changes: 2 additions & 3 deletions django-stubs/template/base.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ from re import Pattern
from typing import Any

from django.template.context import Context as Context
from django.template.context import _ContextKeys
from django.template.engine import Engine
from django.template.library import Library
from django.template.loaders.base import Loader
Expand Down Expand Up @@ -60,7 +59,7 @@ class Template:
engine: Engine | None = ...,
) -> None: ...
def __iter__(self) -> Iterator[Node]: ...
def render(self, context: Context | Mapping[_ContextKeys, Any] | None) -> SafeString: ...
def render(self, context: Context | dict[str, Any] | None) -> SafeString: ...
def compile_nodelist(self) -> NodeList: ...
def get_exception_info(self, exception: Exception, token: Token) -> dict[str, Any]: ...

Expand Down Expand Up @@ -139,7 +138,7 @@ class Variable:
translate: bool
message_context: str | None
def __init__(self, var: dict[Any, Any] | str) -> None: ...
def resolve(self, context: Mapping[_ContextKeys, Any] | Context | int | str) -> Any: ...
def resolve(self, context: Mapping[str, Mapping[str, Any]] | Context | int | str) -> Any: ...

class Node:
must_be_first: bool
Expand Down
6 changes: 3 additions & 3 deletions django-stubs/template/context.pyi
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from collections.abc import Callable, Iterable, Iterator, Mapping
from collections.abc import Callable, Iterable, Iterator
from contextlib import contextmanager
from types import TracebackType
from typing import Any, TypeVar
Expand Down Expand Up @@ -40,7 +40,7 @@ class BaseContext(Iterable[Any]):
def get(self, key: _ContextKeys, otherwise: Any | None = ...) -> Any | None: ...
def setdefault(self, key: _ContextKeys, default: list[Origin] | int | None = ...) -> list[Origin] | int | None: ...
def new(self, values: _ContextValues | None = ...) -> Context: ...
def flatten(self) -> Mapping[_ContextKeys, Any]: ...
def flatten(self) -> dict[_ContextKeys, dict[_ContextKeys, type[Any] | str] | int | str | None]: ...

class Context(BaseContext):
dicts: Any
Expand All @@ -55,7 +55,7 @@ class Context(BaseContext):
) -> None: ...
@contextmanager
def bind_template(self, template: Template) -> Iterator[None]: ...
def update(self, other_dict: Mapping[_ContextKeys, Any] | Context) -> ContextDict: ...
def update(self, other_dict: dict[str, Any] | Context) -> ContextDict: ...

class RenderContext(BaseContext):
dicts: list[dict[IncludeNode | str, str]]
Expand Down
7 changes: 3 additions & 4 deletions django-stubs/template/defaulttags.pyi
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from collections import namedtuple
from collections.abc import Iterator, Mapping, Sequence
from collections.abc import Iterator, Sequence
from datetime import date as real_date
from typing import Any

Expand All @@ -8,7 +8,6 @@ from django.template.context import Context
from django.utils.safestring import SafeString

from .base import Node, NodeList
from .context import _ContextKeys
from .library import Library
from .smartif import IfParser, Literal

Expand Down Expand Up @@ -155,13 +154,13 @@ class WidthRatioNode(Node):

class WithNode(Node):
nodelist: NodeList
extra_context: Mapping[_ContextKeys, Any]
extra_context: dict[str, Any]
def __init__(
self,
var: str | None,
name: str | None,
nodelist: NodeList | Sequence[Node],
extra_context: Mapping[_ContextKeys, Any] | None = ...,
extra_context: dict[str, Any] | None = ...,
) -> None: ...

def autoescape(parser: Parser, token: Token) -> AutoEscapeControlNode: ...
Expand Down
3 changes: 1 addition & 2 deletions django-stubs/template/engine.pyi
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from collections.abc import Callable, Mapping, Sequence
from collections.abc import Callable, Sequence
from typing import Any

from django.template.base import Origin
Expand All @@ -8,7 +8,6 @@ from django.utils.safestring import SafeString
from typing_extensions import TypeAlias

from .base import Template
from .context import _ContextKeys

_Loader: TypeAlias = Any

Expand Down
2 changes: 1 addition & 1 deletion django-stubs/template/loader.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ def get_template(template_name: str, using: str | None = ...) -> _EngineTemplate
def select_template(template_name_list: Sequence[str] | str, using: str | None = ...) -> Any: ...
def render_to_string(
template_name: Sequence[str] | str,
context: dict[str, Any] | None = ...,
context: Mapping[str, Any] | None = ...,
request: HttpRequest | None = ...,
using: str | None = ...,
) -> SafeString: ...
14 changes: 7 additions & 7 deletions django-stubs/template/response.pyi
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import functools
from collections.abc import Callable, Iterator, Mapping, Sequence
from collections.abc import Callable, Iterator, Sequence
from http.cookies import SimpleCookie
from typing import Any, Union # noqa: Y037 # https://github.com/python/mypy/issues/12211

from django.core.handlers.wsgi import WSGIRequest
from django.http import HttpResponse
from django.http.request import HttpRequest
from django.template.base import Template
from django.template.context import RequestContext, _ContextKeys
from django.template.context import RequestContext
from django.test.client import Client
from django.utils.datastructures import _ListOrTuple
from typing_extensions import TypeAlias
Expand All @@ -24,20 +24,20 @@ class SimpleTemplateResponse(HttpResponse):
status_code: int
rendering_attrs: Any
template_name: _TemplateForResponseT
context_data: Mapping[_ContextKeys, Any] | None
context_data: dict[str, Any] | None
using: str | None
def __init__(
self,
template: _TemplateForResponseT,
context: Mapping[_ContextKeys, Any] | None = ...,
context: dict[str, Any] | None = ...,
content_type: str | None = ...,
status: int | None = ...,
charset: str | None = ...,
using: str | None = ...,
headers: dict[str, Any] | None = ...,
) -> None: ...
def resolve_template(self, template: Sequence[str] | Template | str) -> Template: ...
def resolve_context(self, context: Mapping[_ContextKeys, Any] | None) -> Mapping[_ContextKeys, Any] | None: ...
def resolve_context(self, context: dict[str, Any] | None) -> dict[str, Any] | None: ...
@property
def rendered_content(self) -> str: ...
def add_post_render_callback(self, callback: Callable) -> None: ...
Expand All @@ -50,7 +50,7 @@ class TemplateResponse(SimpleTemplateResponse):
client: Client
closed: bool
context: RequestContext
context_data: Mapping[_ContextKeys, Any] | None
context_data: dict[str, Any] | None
cookies: SimpleCookie[str]
csrf_cookie_set: bool
json: functools.partial
Expand All @@ -65,7 +65,7 @@ class TemplateResponse(SimpleTemplateResponse):
self,
request: HttpRequest,
template: _TemplateForResponseT,
context: Mapping[_ContextKeys, Any] | None = ...,
context: dict[str, Any] | None = ...,
content_type: str | None = ...,
status: int | None = ...,
charset: str | None = ...,
Expand Down
12 changes: 12 additions & 0 deletions tests/typecheck/test_shortcuts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,18 @@
class MyUser(models.Model):
pass

- case: check_render_function_arguments_annotations
main: |
from typing import Any
from typing_extensions import TypedDict
from django.shortcuts import render
from django.http.request import HttpRequest

TestContext = TypedDict("TestContext", {"user": Any})
test_context: TestContext = {"user": "test"}
reveal_type(test_context) # N: Revealed type is "TypedDict('main.TestContext', {'user': Any})"
reveal_type(render(HttpRequest(), '', test_context)) # N: Revealed type is "django.http.response.HttpResponse"

- case: check_redirect_return_annotation
main: |
from django.shortcuts import redirect
Expand Down