Skip to content

Commit cf9a5e3

Browse files
authored
Improve django.http stubs (#2201)
1 parent 586381b commit cf9a5e3

File tree

5 files changed

+11
-17
lines changed

5 files changed

+11
-17
lines changed

django-stubs/http/__init__.pyi

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from .cookie import SimpleCookie as SimpleCookie
22
from .cookie import parse_cookie as parse_cookie
3+
from .request import HttpHeaders as HttpHeaders
34
from .request import HttpRequest as HttpRequest
45
from .request import QueryDict as QueryDict
56
from .request import RawPostDataException as RawPostDataException

django-stubs/http/multipartparser.pyi

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
import re
12
from collections.abc import Iterator, Mapping
2-
from typing import IO, Any, Literal
3+
from typing import IO, Any, ClassVar, Literal
34

45
from django.http.request import QueryDict
56
from django.utils.datastructures import ImmutableList, MultiValueDict
@@ -13,6 +14,7 @@ FIELD: Literal["field"]
1314
FIELD_TYPES: frozenset[str]
1415

1516
class MultiPartParser:
17+
boundary_re: ClassVar[re.Pattern[str]]
1618
def __init__(
1719
self,
1820
META: Mapping[str, Any],
@@ -23,6 +25,7 @@ class MultiPartParser:
2325
def parse(self) -> tuple[QueryDict, MultiValueDict]: ...
2426
def handle_file_complete(self, old_field_name: str, counters: list[int]) -> None: ...
2527
def sanitize_file_name(self, file_name: str) -> str | None: ...
28+
def IE_sanitize(self, file_name: str) -> str | None: ...
2629

2730
class LazyStream:
2831
length: int | None

django-stubs/http/request.pyi

+5-5
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ host_validation_re: Pattern[str]
2020
class UnreadablePostError(OSError): ...
2121
class RawPostDataException(Exception): ...
2222

23-
UploadHandlerList: TypeAlias = list[uploadhandler.FileUploadHandler] | ImmutableList[uploadhandler.FileUploadHandler]
23+
_UploadHandlerList: TypeAlias = list[uploadhandler.FileUploadHandler] | ImmutableList[uploadhandler.FileUploadHandler]
2424

2525
class HttpHeaders(CaseInsensitiveMapping[str]):
2626
HTTP_PREFIX: str
@@ -80,20 +80,18 @@ class HttpRequest(BytesIO):
8080
def get_signed_cookie(
8181
self, key: str, default: Any = ..., salt: str = ..., max_age: int | datetime.timedelta | None = ...
8282
) -> str | None: ...
83-
def get_raw_uri(self) -> str: ...
8483
def build_absolute_uri(self, location: str | None = ...) -> str: ...
8584
@property
8685
def scheme(self) -> str | None: ...
8786
def is_secure(self) -> bool: ...
88-
def is_ajax(self) -> bool: ...
8987
@property
9088
def encoding(self) -> str | None: ...
9189
@encoding.setter
9290
def encoding(self, val: str) -> None: ...
9391
@property
94-
def upload_handlers(self) -> UploadHandlerList: ...
92+
def upload_handlers(self) -> _UploadHandlerList: ...
9593
@upload_handlers.setter
96-
def upload_handlers(self, upload_handlers: UploadHandlerList) -> None: ...
94+
def upload_handlers(self, upload_handlers: _UploadHandlerList) -> None: ...
9795
@cached_property
9896
def accepted_types(self) -> list[MediaType]: ...
9997
def parse_file_upload(
@@ -105,6 +103,7 @@ class HttpRequest(BytesIO):
105103
def body(self) -> bytes: ...
106104
def _load_post_and_files(self) -> None: ...
107105
def accepts(self, media_type: str) -> bool: ...
106+
def readlines(self) -> list[bytes]: ... # type: ignore[override]
108107

109108
@type_check_only
110109
class _MutableHttpRequest(HttpRequest):
@@ -213,3 +212,4 @@ def bytes_to_text(s: None, encoding: str) -> None: ...
213212
def bytes_to_text(s: bytes | str, encoding: str) -> str: ...
214213
def split_domain_port(host: str) -> tuple[str, str]: ...
215214
def validate_host(host: str, allowed_hosts: Iterable[str]) -> bool: ...
215+
def parse_accept_header(header: str) -> list[MediaType]: ...

scripts/stubtest/allowlist.txt

+1
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ django.utils.translation.template.constant_re
107107
django.utils.translation.template.block_re
108108
django.utils.version.version_component_re
109109
django.views.debug.SafeExceptionReporterFilter.hidden_settings
110+
django.http.multipartparser.MultiPartParser.boundary_re
110111

111112
# AlterTogetherOptionOperation.option_name is set as None,
112113
# but is required in the init, so we type it as str

scripts/stubtest/allowlist_todo.txt

-11
Original file line numberDiff line numberDiff line change
@@ -1336,20 +1336,9 @@ django.forms.widgets.SelectDateWidget.use_fieldset
13361336
django.forms.widgets.TextInput.__slotnames__
13371337
django.forms.widgets.Widget.subwidgets
13381338
django.forms.widgets.Widget.use_fieldset
1339-
django.http.HttpHeaders
13401339
django.http.HttpRequest.__init__
1341-
django.http.HttpRequest.get_raw_uri
1342-
django.http.HttpRequest.is_ajax
1343-
django.http.HttpRequest.readlines
13441340
django.http.StreamingHttpResponse.content
1345-
django.http.multipartparser.MultiPartParser.IE_sanitize
1346-
django.http.multipartparser.MultiPartParser.boundary_re
13471341
django.http.request.HttpRequest.__init__
1348-
django.http.request.HttpRequest.get_raw_uri
1349-
django.http.request.HttpRequest.is_ajax
1350-
django.http.request.HttpRequest.readlines
1351-
django.http.request.UploadHandlerList
1352-
django.http.request.parse_accept_header
13531342
django.http.response.StreamingHttpResponse.content
13541343
django.template.EngineHandler.__init__
13551344
django.template.Library.filter_function

0 commit comments

Comments
 (0)