mirror of
https://github.com/davidhalter/django-stubs.git
synced 2025-12-16 08:47:49 +08:00
* Make module declaration precise. * Make settings match real file. * Replace `include` with import. * Make types more specific. * Replace `WSGIRequest` with `HttpRequest` where possible. * Replace all `OrderedDict` occurrences with plain `Dict` (it is not used in Django 3.2 and later) * Add fake datastructures for convenience: _PropertyDescriptor and _ListOrTuple now can live here. Added _IndexableCollection (often useful as alias for 'sequence or queryset') * Actualize other datastructures. * Rework MultiValueDict to reflect the fact that some methods can return empty list instead of value. * Deprecate SafeText in favor of SafeString. * Minor improvements to utils * Disallow using str in TimeFormat and DateFormat, drop removed fmt `B` * Do not let classproperty expect classmethod, make return value covariant. * Sync with real file. * Improve types for timezone. * Sync deprecated, new and removed features in translation utils. * Drop removed files, sync huge deprecations. * Fix incompatible decorators (properties, contextmanagers) * Rework pagination. * Sync validators with real code. Add _ValidatorCallable for any external use (field validation etc.) * Add shared type definitions (for fields of both forms and models). Actualize model fields. Mark keyword-only args explicitly in stubs (where code uses **kwargs). Disallow bytes for verbose_name. * Make all checks return Sequence[CheckMessage] or subclass to be covariant. * Add bidirectional references between backend.base and other files. Replace some Any's with specific types. * Actualize db.migrations: remove removed methods, replace "None" annotations in wrong places, improve some wrong annotations. * Actualize db.utils to match real file. * Replace FileResponse and TemplateResponse with HttpResponse(Base) where needed: at least HttpResponseNotModified/HttpResponseRedirect can be returned instead of it, so annotation was wrong. * Replace Any in forms where possible. Actualize class bases and method arguments. * Improve typing of serializers. * Actualize views, rename variable bound to Model to _M for consistency. * Make types of file-related code consistent. Disallow using bytes as path, because many methods expect str-only paths. Make File inherit from IO[AnyStr] instead of IO[Any]: it makes impossible to instantiate file of union type, but allows precise types for some methods. * Minor improvements: stop using None as annotation in wrong places, replace obvious Any's with precise types, actualize methods (missing/renamed/signature changed). * Allow less specific containers, replace Any's with specific types. * Improve types for requests and responses. * Use AbstractBaseUser instead of User in auth. * Use broader type for permission_required * Use wider container types. Add 'type: ignore' to avoid issues with mypy.stubtest. * Disallow using backend class as argument (it is passed to import_string). * Add required methods to PasseordValidator. * Allow using Path instance as argument. * Actualize methods. * Add 'type: ignore' to avoid issues with mypy.stubtest. * Replace Any's with specific types and BaseForm with ModelForm. * Actualize contrib.postgres * Remove render_to_response, add 'get_absolute_url' to corresponding protocol. * Actualize signers. * Use precise types for handlers. Disallow str as stream type for LimitedStream. * Exact types for ValidationError * Replace wrong used Union with Sequence. * Actualize static handlers. * More specific types for admin. Fixes #874. * Improve types and replace 'Tags' with str (it isn't Enum, so annotation was wrong). * Replace Any with specific types, actualize signatures. * Add async variants of handlers and clients. Use fake class to distinguish between request types in RequestFactory and AsyncRequestFactory. * Fix signature, minor improvements. * Actualize signatures and class names, replace Any with more specific types. * Fix signature. * Add some missing methods to Collector * Combinable rarely returns Self type: almost always it's CombinedExpression. * No Random in source anymore. * Drop removed SimpleCol. * Replace _OutputField with Field: nothing in docs about strings. * Introduce reusable types, add missing methods. Remove strange types (probably created by stubgen). Remove RawQuery from Compiler: it obviously doesn't work with RawQuery. * Use literal constants. * Actualize base classes. * Callable is not accepted by get_field. * Add precise types. * Use property and broader containers where possible. Add missing methods. * Actualize indexes. * More specific types for signals. * Fix signatures, drop missing methods. * Actualize window functions to match source. * Actualize text functions, add missing methods, use type aliases for consistency. * Add missing property decorators, methods and attributes. Use type aliases. Remove absent YearComparisonLookup and any SafeText references (they aren't related to lookups at all). * Use bound TypeVar, mark all BuiltinLookup descendants as generic explicitly. Remove strange Union from Lookup.__init__ * Apply type alias, fix base class and argument name. * Actualize BaseExpression methods. * Fix imports. * Add missing class and fix incompatible bases. * Use same types in __init__ and attribute. * OrderBy accepts F or Expression. * Non-expressions are converted to Values. * Add missing attributes. * Add missing methods, fix 'None' argument type. * Define properties where possible, remove 'None' argument annotations, remove inadequate type in make_immutable_fields_list. * Remove absent QueryWrapper. Replace some Any with precise types. * Fix wrong types and actualize signatures. Deny ManagerDescriptor.__get__ on model instances. * Use more specific types. * Arity can be None in subclasses. * Reformat with black * Make DeletionMixin generic. * Fix wrong type variable in _RequestFactory. * Fix variable name in signature. * Disallow returning None from Form.clean() * Allow again returning None from Form.clean * Drop some unused imports. * Add tests for MultiValueDict. * Add tests for utils.timezone. * Fix #834. * Add more files to import_all test * Allow None for `context_object_name` * Fix CI * Fix test to work on python 3.8
131 lines
4.6 KiB
Python
131 lines
4.6 KiB
Python
from io import BytesIO
|
|
from typing import (
|
|
Any,
|
|
BinaryIO,
|
|
Dict,
|
|
Iterable,
|
|
List,
|
|
Mapping,
|
|
Optional,
|
|
Pattern,
|
|
Set,
|
|
Tuple,
|
|
Type,
|
|
TypeVar,
|
|
Union,
|
|
overload,
|
|
)
|
|
|
|
from django.contrib.auth.base_user import AbstractBaseUser
|
|
from django.contrib.auth.models import AnonymousUser
|
|
from django.contrib.sessions.backends.base import SessionBase
|
|
from django.contrib.sites.models import Site
|
|
from django.core.files import uploadedfile, uploadhandler
|
|
from django.urls import ResolverMatch
|
|
from django.utils.datastructures import CaseInsensitiveMapping, ImmutableList, MultiValueDict
|
|
|
|
RAISE_ERROR: object = ...
|
|
host_validation_re: Pattern[str] = ...
|
|
|
|
class UnreadablePostError(OSError): ...
|
|
class RawPostDataException(Exception): ...
|
|
|
|
UploadHandlerList = Union[List[uploadhandler.FileUploadHandler], ImmutableList[uploadhandler.FileUploadHandler]]
|
|
|
|
class HttpHeaders(CaseInsensitiveMapping[str]):
|
|
HTTP_PREFIX: str = ...
|
|
UNPREFIXED_HEADERS: Set[str] = ...
|
|
def __init__(self, environ: Mapping[str, Any]) -> None: ...
|
|
@classmethod
|
|
def parse_header_name(cls, header: str) -> Optional[str]: ...
|
|
|
|
class HttpRequest(BytesIO):
|
|
GET: QueryDict = ...
|
|
POST: QueryDict = ...
|
|
COOKIES: Dict[str, str] = ...
|
|
META: Dict[str, Any] = ...
|
|
FILES: MultiValueDict[str, uploadedfile.UploadedFile] = ...
|
|
path: str = ...
|
|
path_info: str = ...
|
|
method: Optional[str] = ...
|
|
resolver_match: Optional[ResolverMatch] = ...
|
|
content_type: Optional[str] = ...
|
|
content_params: Optional[Dict[str, str]] = ...
|
|
user: Union[AbstractBaseUser, AnonymousUser]
|
|
site: Site
|
|
session: SessionBase
|
|
_stream: BinaryIO
|
|
def __init__(self) -> None: ...
|
|
def get_host(self) -> str: ...
|
|
def get_port(self) -> str: ...
|
|
def get_full_path(self, force_append_slash: bool = ...) -> str: ...
|
|
def get_full_path_info(self, force_append_slash: bool = ...) -> str: ...
|
|
def get_signed_cookie(
|
|
self, key: str, default: Any = ..., salt: str = ..., max_age: Optional[int] = ...
|
|
) -> Optional[str]: ...
|
|
def get_raw_uri(self) -> str: ...
|
|
def build_absolute_uri(self, location: Optional[str] = ...) -> str: ...
|
|
@property
|
|
def scheme(self) -> Optional[str]: ...
|
|
def is_secure(self) -> bool: ...
|
|
def is_ajax(self) -> bool: ...
|
|
@property
|
|
def encoding(self) -> Optional[str]: ...
|
|
@encoding.setter
|
|
def encoding(self, val: str) -> None: ...
|
|
@property
|
|
def upload_handlers(self) -> UploadHandlerList: ...
|
|
@upload_handlers.setter
|
|
def upload_handlers(self, upload_handlers: UploadHandlerList) -> None: ...
|
|
@property
|
|
def accepted_types(self) -> List[MediaType]: ...
|
|
def __repr__(self) -> str: ...
|
|
def parse_file_upload(
|
|
self, META: Mapping[str, Any], post_data: BinaryIO
|
|
) -> Tuple[QueryDict, MultiValueDict[str, uploadedfile.UploadedFile]]: ...
|
|
@property
|
|
def headers(self) -> HttpHeaders: ...
|
|
@property
|
|
def body(self) -> bytes: ...
|
|
def _load_post_and_files(self) -> None: ...
|
|
def accepts(self, media_type: str) -> bool: ...
|
|
|
|
_Q = TypeVar("_Q", bound="QueryDict")
|
|
|
|
class QueryDict(MultiValueDict[str, str]):
|
|
_mutable: bool = ...
|
|
def __init__(
|
|
self, query_string: Optional[Union[str, bytes]] = ..., mutable: bool = ..., encoding: Optional[str] = ...
|
|
) -> None: ...
|
|
def setlist(self, key: Union[str, bytes], list_: Iterable[Union[str, bytes]]) -> None: ...
|
|
def setlistdefault(self, key: Union[str, bytes], default_list: Optional[List[str]] = ...) -> List[str]: ...
|
|
def appendlist(self, key: Union[str, bytes], value: Union[str, bytes]) -> None: ...
|
|
def urlencode(self, safe: Optional[str] = ...) -> str: ...
|
|
@classmethod
|
|
def fromkeys( # type: ignore
|
|
cls: Type[_Q],
|
|
iterable: Iterable[Union[bytes, str]],
|
|
value: Union[str, bytes] = ...,
|
|
mutable: bool = ...,
|
|
encoding: Optional[str] = ...,
|
|
) -> _Q: ...
|
|
@property
|
|
def encoding(self) -> str: ...
|
|
@encoding.setter
|
|
def encoding(self, value: str) -> None: ...
|
|
def __setitem__(self, key: Union[str, bytes], value: Union[str, bytes]) -> None: ...
|
|
def setdefault(self, key: Union[str, bytes], default: Union[str, bytes, None] = ...) -> str: ...
|
|
|
|
class MediaType:
|
|
def __init__(self, media_type_raw_line: str) -> None: ...
|
|
@property
|
|
def is_all_types(self) -> bool: ...
|
|
def match(self, other: str) -> bool: ...
|
|
|
|
@overload
|
|
def bytes_to_text(s: None, encoding: str) -> None: ...
|
|
@overload
|
|
def bytes_to_text(s: Union[bytes, str], encoding: str) -> str: ...
|
|
def split_domain_port(host: str) -> Tuple[str, str]: ...
|
|
def validate_host(host: str, allowed_hosts: Iterable[str]) -> bool: ...
|