PY-91656 Update django stubs version to 6.1.0

Closes PY-91656


(cherry picked from commit bb51976047be9005fb0552a877451775bd5dda65)

IJ-MR-218807

GitOrigin-RevId: c4e487e899b9d3fac55b4cac417ff1ebd530d640
This commit is contained in:
PyCharm Automation Bot
2026-08-19 09:48:11 +00:00
committed by intellij-monorepo-bot
parent fa31834462
commit d8751d2e1c
147 changed files with 888 additions and 336 deletions
@@ -1,7 +1,7 @@
from typing import Any, Literal, type_check_only
from typing import Any, Literal, Self, type_check_only
from django.utils.functional import LazyObject
from typing_extensions import Self, override
from typing_extensions import override
# explicit dependency on standard settings to make it loaded
from . import global_settings # noqa: F401
@@ -10,6 +10,12 @@ ENVIRONMENT_VARIABLE: Literal["DJANGO_SETTINGS_MODULE"]
DEFAULT_STORAGE_ALIAS: Literal["default"]
STATICFILES_STORAGE_ALIAS: Literal["staticfiles"]
# RemovedInDjango70Warning.
SIGNED_COOKIE_LEGACY_SALT_DEPRECATED_MSG: str
USE_BLANK_CHOICE_DASH_DEPRECATED_MSG: str
DEPRECATED_EMAIL_SETTINGS: set[str]
EMAIL_SETTING_DEPRECATED_MSG: str
# required for plugin to be able to distinguish this specific instance of LazySettings from others
@type_check_only
class _DjangoConfLazyObject(LazyObject[Any]):
@@ -1,9 +1,8 @@
from collections.abc import Collection, Mapping, Sequence
from re import Pattern
from typing import Any, Literal, Protocol, TypeAlias, TypedDict, type_check_only
from typing import Any, Literal, NotRequired, Protocol, TypeAlias, TypedDict, type_check_only
from django.utils.functional import _StrOrPromise
from typing_extensions import NotRequired
from django_stubs_ext.settings import TemplatesSetting
@@ -97,6 +96,11 @@ class Router(Protocol):
DATABASE_ROUTERS: list[str | Router]
# Mailer configurations. No mailers are defined by default.
# RemovedInDjango70Warning: uncomment the next line.
# MAILERS: Mapping[str, Mapping[str, Any]]
# RemovedInDjango70Warning.
# The email backend to use. For possible shortcuts see django.core.mail.
# The default is to use the SMTP backend.
# Third-party backends can be specified by providing a Python path
@@ -107,15 +111,18 @@ EMAIL_BACKEND: str
# Because Django doesn't define it, we can't provide its type here. Use `getattr` for type-safe access
# e.g. `getattr(settings, "EMAIL_FILE_PATH")`
# RemovedInDjango70Warning.
# Host for sending email.
EMAIL_HOST: str
# RemovedInDjango70Warning.
# Port for sending email.
EMAIL_PORT: int
# Whether to send SMTP 'Date' header in the local time zone or in UTC.
EMAIL_USE_LOCALTIME: bool
# RemovedInDjango70Warning.
# Optional SMTP authentication information for EMAIL_HOST.
EMAIL_HOST_USER: str
EMAIL_HOST_PASSWORD: str
@@ -132,6 +139,9 @@ TEMPLATES: list[TemplatesSetting]
# Default form rendering class.
FORM_RENDERER: str
# RemovedInDjango70Warning: This setting allows to revert back to the old
# blank choice label in Django 6.1.
USE_BLANK_CHOICE_DASH: bool
# Default email address to use for various automated correspondence from
# the site managers.
@@ -14,6 +14,8 @@ from .filters import RelatedOnlyFieldListFilter as RelatedOnlyFieldListFilter
from .filters import SimpleListFilter as SimpleListFilter
from .options import HORIZONTAL as HORIZONTAL
from .options import VERTICAL as VERTICAL
from .options import Action as Action
from .options import ActionLocation as ActionLocation
from .options import ModelAdmin as ModelAdmin
from .options import ShowFacets as ShowFacets
from .options import StackedInline as StackedInline
@@ -26,6 +28,8 @@ def autodiscover() -> None: ...
__all__ = [
"HORIZONTAL",
"VERTICAL",
"Action",
"ActionLocation",
"AdminSite",
"AllValuesFieldListFilter",
"BooleanFieldListFilter",
@@ -1,7 +1,7 @@
from collections.abc import Callable, Sequence
from typing import Any, overload
from django.contrib.admin import ModelAdmin
from django.contrib.admin import ActionLocation, ModelAdmin
from django.contrib.admin.sites import AdminSite
from django.db.models.base import Model
from django.db.models.expressions import BaseExpression, Combinable
@@ -17,6 +17,8 @@ def action(
*,
permissions: Sequence[str] | None = ...,
description: _StrOrPromise | None = ...,
description_plural: _StrOrPromise | None = ...,
location: ActionLocation = ...,
) -> _F: ...
@overload
def action(
@@ -24,6 +26,8 @@ def action(
*,
permissions: Sequence[str] | None = ...,
description: _StrOrPromise | None = ...,
description_plural: _StrOrPromise | None = ...,
location: ActionLocation = ...,
) -> Callable[[_F], _F]: ...
@overload
def display(
@@ -1,6 +1,8 @@
import enum
import sys
from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence
from typing import Any, ClassVar, Generic, Literal, TypeAlias, cast, type_check_only
from dataclasses import dataclass
from typing import Any, ClassVar, Generic, Literal, Self, TypeAlias, cast, type_check_only
from django import forms
from django.contrib.admin.filters import FieldListFilter, ListFilter
@@ -33,21 +35,42 @@ from django.urls.resolvers import URLPattern
from django.utils.datastructures import _ListOrTuple
from django.utils.functional import _StrOrPromise
from django.utils.safestring import SafeString
from typing_extensions import Self, TypedDict, TypeVar, override
from typing_extensions import TypedDict, TypeVar, deprecated, override
IS_POPUP_VAR: str
TO_FIELD_VAR: str
IS_FACETS_VAR: str
HORIZONTAL: Literal[1]
VERTICAL: Literal[2]
_Direction: TypeAlias = Literal[1, 2]
IS_POPUP_VAR: Literal["_popup"]
SOURCE_MODEL_VAR: Literal["_source_model"]
TO_FIELD_VAR: Literal["_to_field"]
IS_FACETS_VAR: Literal["_facets"]
EMPTY_VALUE_STRING: Literal["-"]
class ShowFacets(enum.Enum):
NEVER = cast(str, ...)
ALLOW = cast(str, ...)
ALWAYS = cast(str, ...)
class ActionLocation(enum.Enum):
CHANGE_FORM = cast(str, ...)
CHANGE_LIST = cast(str, ...)
HORIZONTAL: Literal[1]
VERTICAL: Literal[2]
_Direction: TypeAlias = Literal[1, 2]
@dataclass
class Action:
func: _ActionCallable[ModelAdmin[Any], Any]
name: str
description: str
plural_description: str
locations: list[ActionLocation]
# RemovedInDjango70Warning.
@deprecated("Unpacking an action tuple is deprecated. Use Action attributes instead.")
def __iter__(self) -> Iterator[_ActionCallable[ModelAdmin[Any], Any] | str]: ...
# RemovedInDjango70Warning.
@deprecated("Using indexes on an action tuple is deprecated. Use Action attributes instead.")
def __getitem__(self, index: int) -> _ActionCallable[ModelAdmin[Any], Any] | str: ...
def get_content_type_for_model(obj: type[Model] | Model) -> ContentType: ...
def get_ul_class(radio_style: int) -> str: ...
@@ -101,6 +124,7 @@ class BaseModelAdmin(Generic[_ModelT], metaclass=MediaDefiningClass):
sortable_by: ClassVar[_ListOrTuple[str] | None]
show_full_result_count: ClassVar[bool]
checks_class: ClassVar[Any]
delete_confirmation_max_display: ClassVar[int | None]
model: type[_ModelT]
opts: Options[_ModelT]
admin_site: AdminSite
@@ -217,11 +241,29 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
def log_change(self, request: HttpRequest, obj: _ModelT, message: Any) -> LogEntry: ...
def log_deletions(self, request: HttpRequest, queryset: QuerySet[_ModelT]) -> list[LogEntry]: ...
def action_checkbox(self, obj: _ModelT) -> SafeString: ...
def get_actions(self, request: HttpRequest) -> dict[str, tuple[Callable[..., str], str, str] | None]: ...
def get_action_choices(
self, request: HttpRequest, default_choices: list[tuple[str, str]] = ...
) -> list[tuple[str, str]]: ...
def get_action(self, action: Callable[..., Any] | str) -> tuple[Callable[..., str], str, str] | None: ...
# Django 6.0 requires Python 3.12, so the `else` branch can only ever meet
# Django 5.x: it keeps the Django 5.x action signatures.
if sys.version_info >= (3, 12):
def get_actions(
self, request: HttpRequest, action_location: ActionLocation = ...
) -> dict[str, Action | None]: ...
def get_action_choices(
self,
request: HttpRequest,
default_choices: list[tuple[str, str]] | None = ...,
action_location: ActionLocation = ...,
) -> list[tuple[str, str]]: ...
def get_action(
self,
action: _ActionCallable[Self, _ModelT] | str,
action_location: ActionLocation = ...,
) -> Action | None: ...
else:
def get_actions(self, request: HttpRequest) -> dict[str, tuple[Callable[..., str], str, str] | None]: ...
def get_action_choices(
self, request: HttpRequest, default_choices: list[tuple[str, str]] = ...
) -> list[tuple[str, str]]: ...
def get_action(self, action: Callable[..., Any] | str) -> tuple[Callable[..., str], str, str] | None: ...
def get_list_display(self, request: HttpRequest) -> _ListDisplayT[_ModelT]: ...
def get_list_display_links(
self, request: HttpRequest, list_display: _ListDisplayT[_ModelT]
@@ -266,7 +308,9 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
def response_post_save_add(self, request: HttpRequest, obj: _ModelT) -> HttpResponseRedirect: ...
def response_post_save_change(self, request: HttpRequest, obj: _ModelT) -> HttpResponseRedirect: ...
# Probably FileResponse cannot come from ModelAdmin views
def response_action(self, request: HttpRequest, queryset: QuerySet[Any]) -> HttpResponse | None: ...
def response_action(
self, request: HttpRequest, queryset: QuerySet[Any], action_location: ActionLocation = ...
) -> HttpResponse | None: ...
def response_delete(self, request: HttpRequest, obj_display: str, obj_id: int) -> HttpResponse: ...
def render_delete_form(self, request: HttpRequest, context: dict[str, Any]) -> HttpResponse: ...
def get_inline_formsets(
@@ -1,10 +1,10 @@
from collections.abc import Callable, Iterable, Sequence
from typing import Any, TypeAlias
from typing import Any
from weakref import WeakSet
from django.apps.config import AppConfig
from django.contrib.admin.models import LogEntry
from django.contrib.admin.options import ModelAdmin
from django.contrib.admin.options import ModelAdmin, _ActionCallable
from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm
from django.core.checks import CheckMessage
from django.db.models.base import Model
@@ -20,7 +20,6 @@ all_sites: WeakSet[AdminSite]
_ViewType = TypeVar("_ViewType", bound=Callable[..., HttpResponseBase])
_ModelT = TypeVar("_ModelT", bound=Model)
_ActionCallback: TypeAlias = Callable[[ModelAdmin[Any], HttpRequest, QuerySet[Any]], TemplateResponse | None]
class AdminSite:
site_title: _StrOrPromise
@@ -41,8 +40,8 @@ class AdminSite:
final_catch_all_view: bool
_empty_value_display: str
_registry: dict[type[Model], ModelAdmin[Any]]
_global_actions: dict[str, _ActionCallback]
_actions: dict[str, _ActionCallback]
_global_actions: dict[str, _ActionCallable[ModelAdmin[Any], Any]]
_actions: dict[str, _ActionCallable[ModelAdmin[Any], Any]]
def __init__(self, name: str = ...) -> None: ...
def check(self, app_configs: Sequence[AppConfig] | None) -> list[CheckMessage]: ...
def register(
@@ -54,11 +53,11 @@ class AdminSite:
def unregister(self, model_or_iterable: type[Model] | Iterable[type[Model]]) -> None: ...
def is_registered(self, model: type[Model]) -> bool: ...
def get_model_admin(self, model: type[_ModelT]) -> ModelAdmin[_ModelT]: ...
def add_action(self, action: _ActionCallback, name: str | None = ...) -> None: ...
def add_action(self, action: _ActionCallable[ModelAdmin[_ModelT], _ModelT], name: str | None = ...) -> None: ...
def disable_action(self, name: str) -> None: ...
def get_action(self, name: str) -> _ActionCallback: ...
def get_action(self, name: str) -> _ActionCallable[ModelAdmin[_ModelT], _ModelT]: ...
@property
def actions(self) -> Iterable[tuple[str, _ActionCallback]]: ...
def actions(self) -> Iterable[tuple[str, _ActionCallable[ModelAdmin[_ModelT], _ModelT]]]: ...
def has_permission(self, request: HttpRequest) -> bool: ...
def admin_view(self, view: _ViewType, cacheable: bool = ...) -> _ViewType: ...
def get_urls(self) -> list[URLResolver | URLPattern]: ...
@@ -0,0 +1,8 @@
from typing import Any
from django.utils.safestring import SafeString
register: Any
def to_object_display_value(value: Any) -> str: ...
def truncated_unordered_list(value: Any, max_items: int, autoescape: bool = ...) -> SafeString: ...
@@ -14,3 +14,4 @@ def submit_row(context: RequestContext) -> Context: ...
def submit_row_tag(parser: Parser, token: Token) -> InclusionAdminNode: ...
def change_form_object_tools_tag(parser: Parser, token: Token) -> InclusionAdminNode: ...
def cell_count(inline_admin_form: InlineAdminForm) -> int: ...
def admin_actions_tag(parser: Parser, token: Token) -> InclusionAdminNode: ...
@@ -14,7 +14,13 @@ class InclusionAdminNode(InclusionNode):
takes_context: bool
template_name: str
def __init__(
self, parser: Parser, token: Token, func: Callable[..., Any], template_name: str, takes_context: bool = ...
self,
name: str,
parser: Parser,
token: Token,
func: Callable[..., Any],
template_name: str,
takes_context: bool = ...,
) -> None: ...
@override
def render(self, context: Context) -> SafeString: ...
@@ -4,7 +4,6 @@ from re import Pattern
from typing import Any, Literal, overload, type_check_only
from uuid import UUID
from _typeshed import Unused
from django.contrib.admin.options import BaseModelAdmin, _DisplayT, _FieldGroups, _FieldsetSpec, _ListDisplayT, _ModelT
from django.contrib.admin.sites import AdminSite
from django.db.models.base import Model
@@ -51,6 +50,8 @@ class NestedObjects(Collector):
edges: dict[Model, list[Model]]
protected: set[Model]
model_objs: defaultdict[str, set[Model]]
@override
def __init__(self, *args: object, force_collection: bool = ..., **kwargs: object) -> None: ...
def add_edge(self, source: Model | None, target: Model) -> None: ...
@override
def collect( # type: ignore[override]
@@ -73,8 +74,6 @@ class NestedObjects(Collector):
def nested(self, format_callback: None = None) -> list[Any]: ...
@overload
def nested(self, format_callback: Callable[[Model], _T]) -> list[Any]: ...
@override
def can_fast_delete(self, *args: Unused, **kwargs: Unused) -> Literal[False]: ...
@type_check_only
class _ModelFormatDict(TypedDict):
@@ -93,5 +93,5 @@ class ChangeList:
has_active_filters: bool
clear_all_filters_qs: str
def apply_select_related(self, qs: QuerySet[Any]) -> QuerySet[Any]: ...
def has_related_field_in_list_display(self) -> bool: ...
def get_select_related_fields(self) -> list[str]: ...
def url_for_result(self, result: Model) -> str: ...
@@ -29,3 +29,5 @@ async def aget_user(request: HttpRequest | Client) -> _AnyUser: ...
def get_permission_codename(action: str, opts: Options[Any]) -> str: ...
def update_session_auth_hash(request: HttpRequest, user: _User) -> None: ...
async def aupdate_session_auth_hash(request: HttpRequest, user: _User) -> None: ...
def check_password_with_timing_attack_mitigation(user: _User | None, password: str | None) -> bool: ...
async def acheck_password_with_timing_attack_mitigation(user: _User | None, password: str | None) -> bool: ...
@@ -1,7 +1,9 @@
from typing import Any
from collections.abc import Sequence
from typing import Any, TextIO
from django.apps.config import AppConfig
from django.apps.registry import Apps
from django.db.migrations.migration import Migration
def create_permissions(
app_config: AppConfig,
@@ -11,5 +13,14 @@ def create_permissions(
apps: Apps = ...,
**kwargs: Any,
) -> None: ...
def rename_permissions_after_model_rename(
app_config: AppConfig,
verbosity: int = ...,
plan: Sequence[tuple[Migration, bool]] | None = ...,
using: str = ...,
apps: Apps = ...,
stdout: TextIO = ...,
**kwargs: Any,
) -> None: ...
def get_system_username() -> str: ...
def get_default_username(check_db: bool = ..., database: str = ...) -> str: ...
@@ -17,3 +17,5 @@ class Command(BaseCommand):
def get_input_data(self, field: Field[Any, Any], message: str, default: str | None = ...) -> str | None: ...
@cached_property
def username_is_unique(self) -> bool: ...
@cached_property
def natural_key_defined(self) -> bool: ...
@@ -38,6 +38,8 @@ class RemoteUserMiddleware:
def __call__(self, request: HttpRequest) -> HttpResponseBase | Awaitable[HttpResponseBase]: ...
async def __acall__(self, request: HttpRequest) -> HttpResponseBase: ...
def clean_username(self, username: str, request: HttpRequest) -> str: ...
async def aclean_username(self, username: str, request: HttpRequest) -> str: ...
def get_username(self, request: HttpRequest) -> str: ...
def process_request(self, request: HttpRequest) -> None: ...
async def aprocess_request(self, request: HttpRequest) -> None: ...
@@ -1,6 +1,6 @@
import datetime as dt
from collections.abc import Iterable
from typing import Any, ClassVar, Literal, TypeAlias
from typing import Any, ClassVar, Literal, Never, Self, TypeAlias
from django.contrib.auth.base_user import AbstractBaseUser as AbstractBaseUser
from django.contrib.auth.base_user import BaseUserManager as BaseUserManager
@@ -12,7 +12,7 @@ from django.db.models.base import Model
from django.db.models.expressions import Combinable
from django.db.models.manager import EmptyManager
from django.utils.functional import _StrOrPromise
from typing_extensions import Never, Self, TypeVar
from typing_extensions import TypeVar
# This is our "placeholder" type the mypy plugin refines to configured 'AUTH_USER_MODEL'
# wherever it is used as a type. The most recognised example of this is (probably)
@@ -41,6 +41,8 @@ class Permission(models.Model):
name: models.CharField[str | int | Combinable, str]
content_type: models.ForeignKey[ContentType | Combinable, ContentType]
codename: models.CharField[str | int | Combinable, str]
@property
def user_perm_str(self) -> str: ...
def natural_key(self) -> tuple[str, str, str]: ...
class GroupManager(models.Manager[Group]):
@@ -18,8 +18,8 @@ class RedirectURLMixin:
redirect_field_name: str
success_url_allowed_hosts: set[str]
def get_success_url(self) -> str: ...
def get_redirect_url(self) -> str: ...
def get_success_url_allowed_hosts(self) -> set[str]: ...
def get_redirect_url(self, request: HttpRequest | None = None) -> str: ...
def get_success_url_allowed_hosts(self, request: HttpRequest | None = None) -> set[str]: ...
def get_default_redirect_url(self) -> str: ...
class LoginView(RedirectURLMixin, FormView[_AuthForm]):
@@ -1,5 +1,5 @@
from collections.abc import Callable
from typing import Any
from collections.abc import Callable, Sequence
from typing import Any, Self, overload
from django.contrib.contenttypes.models import ContentType
from django.core.checks.messages import CheckMessage
@@ -35,6 +35,18 @@ class GenericForeignKey(FieldCacheMixin, Field[Any, Any]):
def __init__(
self, ct_field: str = "content_type", fk_field: str = "object_id", for_concrete_model: bool = True
) -> None: ...
# class access
@overload
@override
def __get__(self, instance: None, owner: Any) -> GenericForeignKeyDescriptor: ...
# Model instance access
@overload
@override
def __get__(self, instance: Model, owner: Any) -> Any | None: ...
# non-Model instances
@overload
@override
def __get__(self, instance: Any, owner: Any) -> Self: ...
name: Any
model: Any
@override
@@ -55,12 +67,17 @@ class GenericForeignKey(FieldCacheMixin, Field[Any, Any]):
using: str | None = None,
model: type[Model] | None = None,
) -> ContentType: ...
class GenericForeignKeyDescriptor:
field: GenericForeignKey
def __init__(self, field: GenericForeignKey) -> None: ...
def is_cached(self, instance: Model) -> bool: ...
def get_prefetch_querysets(
self, instances: list[Model] | QuerySet[Any], querysets: list[QuerySet[Any]] | None = None
self, instances: Sequence[Model] | QuerySet[Any], querysets: Sequence[QuerySet[Any]] | None = None
) -> tuple[list[Model], Callable[..., Any], Callable[..., Any], bool, str, bool]: ...
@override
def __get__(self, instance: Model | None, cls: type[Model] | None = ...) -> Any | None: ... # type: ignore[override]
@override
def __get__(self, instance: Model | None, cls: type[Model] | None = ...) -> Any | None: ...
def fetch_one(self, instance: Model) -> None: ...
def fetch_many(self, instances: Sequence[Model] | QuerySet[Any]) -> None: ...
def __set__(self, instance: Model, value: Any | None) -> None: ...
class GenericRel(ForeignObjectRel):
@@ -1,14 +1,8 @@
from typing import Any, Literal
from typing import Any
from _typeshed import Unused
from django.core.management import BaseCommand
from django.db.models.deletion import Collector
from typing_extensions import override
class Command(BaseCommand):
@override
def handle(self, **options: Any) -> None: ...
class NoFastDeleteCollector(Collector):
@override
def can_fast_delete(self, *args: Unused, **kwargs: Unused) -> Literal[False]: ...
@@ -24,16 +24,10 @@ class BaseSpatialFeatures:
unsupported_geojson_options: set[str]
empty_intersection_returns_none: bool
@property
def supports_bbcontains_lookup(self) -> bool: ...
@property
def supports_contained_lookup(self) -> bool: ...
@property
def supports_crosses_lookup(self) -> bool: ...
@property
def supports_distances_lookups(self) -> bool: ...
@property
def supports_dwithin_lookup(self) -> bool: ...
@property
def supports_relate_lookup(self) -> bool: ...
@property
def supports_isvalid_lookup(self) -> bool: ...
@@ -1,5 +1,6 @@
from typing import Any
from django.db.models.sql.compiler import _AsSqlType
from django.utils.functional import cached_property
class BaseSpatialOperations:
@@ -22,7 +23,7 @@ class BaseSpatialOperations:
def geo_quote_name(self, name: Any) -> Any: ...
def geo_db_type(self, f: Any) -> Any: ...
def get_distance(self, f: Any, value: Any, lookup_type: Any) -> Any: ...
def get_geom_placeholder(self, f: Any, value: Any, compiler: Any) -> Any: ...
def get_geom_placeholder_sql(self, f: Any, value: Any, compiler: Any) -> _AsSqlType: ...
def check_expression_support(self, expression: Any) -> None: ...
def spatial_aggregate_name(self, agg_name: Any) -> Any: ...
def spatial_function_name(self, func_name: Any) -> Any: ...
@@ -1,9 +1,8 @@
from typing import Any, ClassVar
from typing import Any, ClassVar, Self
from django.contrib.gis.db import models
from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin
from django.db.models.manager import Manager
from typing_extensions import Self
class OracleGeometryColumns(models.Model):
table_name: Any
@@ -3,6 +3,7 @@ from typing import Any
from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations
from django.contrib.gis.db.backends.utils import SpatialOperator
from django.db.backends.oracle.operations import DatabaseOperations
from django.db.models.sql.compiler import _AsSqlType
from typing_extensions import override
DEFAULT_TOLERANCE: str
@@ -41,7 +42,7 @@ class OracleOperations(BaseSpatialOperations, DatabaseOperations):
@override
def get_distance(self, f: Any, value: Any, lookup_type: Any) -> Any: ...
@override
def get_geom_placeholder(self, f: Any, value: Any, compiler: Any) -> Any: ...
def get_geom_placeholder_sql(self, f: Any, value: Any, compiler: Any) -> _AsSqlType: ...
@override
def spatial_aggregate_name(self, agg_name: Any) -> Any: ...
@override
@@ -1,8 +1,7 @@
from typing import Any, ClassVar
from typing import Any, ClassVar, Self
from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin
from django.db import models
from typing_extensions import Self
class PostGISGeometryColumns(models.Model):
f_table_catalog: Any
@@ -7,6 +7,7 @@ from django.contrib.gis.db.models.fields import GeometryField
from django.contrib.gis.db.models.lookups import GISLookup
from django.db.backends.postgresql.operations import DatabaseOperations
from django.db.models import Func
from django.db.models.sql.compiler import _AsSqlType
from django.utils.functional import cached_property
from typing_extensions import override
@@ -61,7 +62,7 @@ class PostGISOperations(BaseSpatialOperations, DatabaseOperations):
@override
def get_distance(self, f: Any, dist_val: Any, lookup_type: Any) -> Any: ...
@override
def get_geom_placeholder(self, f: Any, value: Any, compiler: Any) -> Any: ...
def get_geom_placeholder_sql(self, f: Any, value: Any, compiler: Any) -> _AsSqlType: ...
def postgis_geos_version(self) -> Any: ...
def postgis_lib_version(self) -> Any: ...
def postgis_proj_version(self) -> Any: ...
@@ -1,8 +1,7 @@
from typing import Any, ClassVar
from typing import Any, ClassVar, Self
from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin
from django.db import models
from typing_extensions import Self
class SpatialiteGeometryColumns(models.Model):
f_table_name: Any
@@ -16,9 +16,16 @@ from django.db.models import *
__all__ = [
"BLANK_CHOICE_DASH",
"BLANK_CHOICE_LABEL",
"CASCADE",
"DB_CASCADE",
"DB_SET_DEFAULT",
"DB_SET_NULL",
"DEFERRED",
"DO_NOTHING",
"FETCH_ONE",
"FETCH_PEERS",
"FETCH_RAISE",
"NOT_PROVIDED",
"PROTECT",
"RESTRICT",
@@ -33,6 +40,9 @@ __all__ = [
"BigAutoField",
"BigIntegerField",
"BinaryField",
"BitAnd",
"BitOr",
"BitXor",
"BooleanField",
"Case",
"CharField",
@@ -75,6 +85,7 @@ __all__ = [
"IntegerChoices",
"IntegerField",
"JSONField",
"JSONNull",
"LineStringField",
"Lookup",
"MakeLine",
@@ -16,6 +16,7 @@ from django.core.validators import _ValidatorCallable
from django.db.models import Model
from django.db.models.expressions import Combinable, Expression
from django.db.models.fields import NOT_PROVIDED, Field, _ErrorMessagesMapping
from django.db.models.sql.compiler import _AsSqlType
from django.forms.widgets import Widget
from django.utils.choices import _Choices
from django.utils.functional import _StrOrPromise
@@ -76,7 +77,7 @@ class BaseSpatialField(Field[_ST, _GT]):
def units(self, connection: Any) -> Any: ...
def units_name(self, connection: Any) -> Any: ...
def geodetic(self, connection: Any) -> Any: ...
def get_placeholder(self, value: Any, compiler: Any, connection: Any) -> Any: ...
def get_placeholder_sql(self, value: Any, compiler: Any, connection: Any) -> _AsSqlType: ...
def get_srid(self, obj: Any) -> Any: ...
@override
def get_db_prep_value(self, value: Any, connection: Any, *args: Any, **kwargs: Any) -> Any: ...
@@ -94,6 +95,7 @@ class GeometryField(BaseSpatialField[_ST, _GT]):
*,
extent: tuple[float, float, float, float] = ...,
tolerance: float = 0.05,
max_geom_collections: int | None = ...,
srid: int = 4326,
spatial_index: bool = True,
name: str | None = ...,
@@ -193,6 +193,11 @@ class MemSize(GeoFunc):
output_field: ClassVar[IntegerField[Any, Any]]
arity: int
class NumDimensions(GeoFuncMixin, StandardTransform): # type: ignore[misc]
lookup_name: str
output_field: ClassVar[IntegerField[Any, Any]]
arity: int
class NumGeometries(GeoFunc):
output_field: ClassVar[IntegerField[Any, Any]]
arity: int
@@ -6,8 +6,16 @@ from typing_extensions import override
class GeometryField(forms.Field):
widget: Any
geom_type: str
max_geom_collections: int
srid: Any
def __init__(self, *, srid: Any | None = ..., geom_type: Any | None = ..., **kwargs: Any) -> None: ...
def __init__(
self,
*,
srid: Any | None = ...,
geom_type: Any | None = ...,
max_geom_collections: int | None = None,
**kwargs: Any,
) -> None: ...
@override
def to_python(self, value: Any) -> Any: ...
@override
@@ -11,6 +11,7 @@ class BaseGeometryWidget(Widget):
geom_type: str
map_srid: int
display_raw: bool
max_geom_collections: int
supports_3d: bool
template_name: str
attrs: Any
@@ -7,9 +7,12 @@ from django.contrib.gis.gdal.driver import Driver
from django.contrib.gis.gdal.raster.band import BandList
from django.contrib.gis.gdal.raster.base import GDALRasterBase
from django.contrib.gis.gdal.srs import SpatialReference
from django.core.exceptions import SuspiciousOperation
from django.utils.functional import cached_property
from typing_extensions import override
class DisallowedRasterLookup(SuspiciousOperation): ...
class TransformPoint(list[Sequence[float]]):
indices: dict[str, tuple[int, int]]
def __init__(self, raster: GDALRaster, prop: str) -> None: ...
@@ -27,6 +30,8 @@ class GDALRaster(GDALRasterBase):
def __init__(self, ds_input: str | Path | bytes | dict[str, Any] | c_void_p, write: bool = ...) -> None: ...
@override
def __del__(self) -> None: ...
@classmethod
def check_raster_lookup_value(cls, ds_input: Any) -> None: ...
@property
def vsi_buffer(self) -> bytes | None: ...
@cached_property
@@ -1,8 +1,7 @@
from enum import IntEnum
from typing import Any, AnyStr, cast
from typing import Any, AnyStr, Self, cast
from django.contrib.gis.gdal.base import GDALBase
from typing_extensions import Self
class AxisOrder(IntEnum):
TRADITIONAL = cast(int, ...)
@@ -1,8 +1,7 @@
from collections.abc import Iterator
from typing import Any
from typing import Any, Self
from django.contrib.gis.geos.base import GEOSBase
from typing_extensions import Self
class GEOSCoordSeq(GEOSBase):
ptr_type: Any
@@ -19,12 +18,16 @@ class GEOSCoordSeq(GEOSBase):
def setY(self, index: int, value: float) -> None: ...
def getZ(self, index: int) -> float: ...
def setZ(self, index: int, value: float) -> None: ...
def getM(self, index: int) -> float: ...
def setM(self, index: int, value: float) -> None: ...
@property
def size(self) -> int: ...
@property
def dims(self) -> int: ...
@property
def hasz(self) -> bool: ...
@property
def hasm(self) -> bool: ...
def clone(self) -> Self: ...
@property
def kml(self) -> str: ...
@@ -1,4 +1,4 @@
from typing import Any, Literal, overload
from typing import Any, Literal, Self, overload
from django.contrib.gis.gdal import CoordTransform, SpatialReference
from django.contrib.gis.gdal.geometries import OGRGeometry
@@ -8,7 +8,7 @@ from django.contrib.gis.geos.mutable_list import ListMixin
from django.contrib.gis.geos.point import Point
from django.contrib.gis.geos.prepared import PreparedGeometry
from django.utils.deconstruct import _Deconstructible
from typing_extensions import Self, override
from typing_extensions import override
class GEOSGeometryBase(GEOSBase):
ptr_type: Any
@@ -153,4 +153,10 @@ class LinearGeometryMixin:
def closed(self) -> bool: ...
class GEOSGeometry(_Deconstructible, GEOSGeometryBase, ListMixin):
def __init__(self, geo_input: Any, srid: int | None = ...) -> None: ...
def __init__(
self,
geo_input: Any,
srid: int | None = ...,
*,
max_geom_collections: int | None = ...,
) -> None: ...
@@ -6,10 +6,10 @@ from typing_extensions import override
class WKBReader(_WKBReader):
@override
def read(self, wkb: bytes | str) -> GEOSGeometry: ...
def read(self, wkb: bytes | str) -> GEOSGeometry: ... # type: ignore[override]
class WKTReader(_WKTReader):
@override
def read(self, wkt: bytes | str) -> GEOSGeometry: ...
def read(self, wkt: bytes | str) -> GEOSGeometry: ... # type: ignore[override]
__all__ = ["WKBReader", "WKBWriter", "WKTReader", "WKTWriter"]
@@ -1,6 +1,6 @@
from typing import Any
from typing import Any, Self
from typing_extensions import Self, override
from typing_extensions import override
class ListMixin:
def __init__(self, *args: Any, **kwargs: Any) -> None: ...
@@ -21,6 +21,11 @@ class CsOutput(GEOSFuncFactory):
@override
def errcheck(result: Any, func: Any, cargs: Any) -> Any: ...
class CsUnaryPredicate(GEOSFuncFactory):
argtypes: Any
restype: Any
errcheck: Any
cs_clone: Any
create_cs: Any
get_cs: Any
@@ -29,9 +34,12 @@ cs_setordinate: Any
cs_getx: Any
cs_gety: Any
cs_getz: Any
cs_getm: Any
cs_setx: Any
cs_sety: Any
cs_setz: Any
cs_setm: Any
cs_getsize: Any
cs_getdims: Any
cs_hasm: Any
cs_is_ccw: Any
@@ -63,15 +63,20 @@ class IOBase(GEOSBase):
ptr: Any
def __init__(self) -> None: ...
MAX_GEOM_COLLECTIONS: int
class _WKTReader(IOBase):
ptr_type: Any
destructor: Any
def read(self, wkt: Any) -> Any: ...
def limit(self, wkt: Any, max_geom_collections: int | None) -> None: ...
def read(self, wkt: Any, max_geom_collections: int | None = ...) -> Any: ...
class _WKBReader(IOBase):
ptr_type: Any
destructor: Any
def read(self, wkb: Any) -> Any: ...
def limit_wkb(self, wkb: Any, max_geom_collections: int | None) -> None: ...
def limit_hex(self, wkb: Any, max_geom_collections: int | None) -> None: ...
def read(self, wkb: Any, max_geom_collections: int | None = ...) -> Any: ...
def default_trim_value() -> bool: ...
@@ -1,7 +1,7 @@
from decimal import Decimal
from typing import Any, TypeAlias
from typing import Any, Self, TypeAlias
from typing_extensions import Self, override
from typing_extensions import override
_NUMERIC_TYPES: TypeAlias = int | float | Decimal
@@ -1,5 +1,5 @@
from collections.abc import Sequence
from typing import Any, ClassVar
from typing import Any, ClassVar, Self
from django.contrib.postgres.fields import ArrayField
from django.db.backends.base.base import BaseDatabaseWrapper
@@ -8,7 +8,7 @@ from django.db.models.expressions import BaseExpression, Combinable
from django.db.models.query import _OrderByFieldName
from django.db.models.query_utils import Q
from django.db.models.sql.compiler import SQLCompiler, _AsSqlType
from typing_extensions import Self, override
from typing_extensions import deprecated, override
from .mixins import OrderableAggMixin
@@ -28,9 +28,24 @@ class ArrayAgg(OrderableAggMixin, Aggregate):
@override
def as_sql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ... # type: ignore[override]
class BitAnd(Aggregate): ...
class BitOr(Aggregate): ...
class BitXor(Aggregate): ...
class BitAnd(Aggregate):
@override
@deprecated(
"The PostgreSQL-specific BitAnd function is deprecated. Use django.db.models.aggregates.BitAnd instead."
)
def __init__(self, expression: Any, **extra: Any) -> None: ...
class BitOr(Aggregate):
@override
@deprecated("The PostgreSQL-specific BitOr function is deprecated. Use django.db.models.aggregates.BitOr instead.")
def __init__(self, expression: Any, **extra: Any) -> None: ...
class BitXor(Aggregate):
@override
@deprecated(
"The PostgreSQL-specific BitXor function is deprecated. Use django.db.models.aggregates.BitXor instead."
)
def __init__(self, expression: Any, **extra: Any) -> None: ...
class BoolAnd(Aggregate):
output_field: ClassVar[BooleanField[Any, Any]]
@@ -54,6 +69,9 @@ class JSONBAgg(OrderableAggMixin, Aggregate):
class StringAgg(OrderableAggMixin, Aggregate):
output_field: ClassVar[TextField[Any, Any]]
@deprecated(
"The PostgreSQL specific StringAgg function is deprecated. Use django.db.models.aggregates.StringAgg instead."
)
def __init__(
self,
expression: BaseExpression | Combinable | str,
@@ -1,22 +1,8 @@
from collections.abc import Sequence
from typing import Any, ClassVar
from django.db.models.expressions import BaseExpression, Combinable
from django.db.models.query import _OrderByFieldName
from django.db.models.query_utils import Q
from typing_extensions import override
class OrderableAggMixin:
allow_order_by: ClassVar[bool]
def __init__(
self,
*expressions: BaseExpression | Combinable | str,
distinct: bool = False,
filter: Q | BaseExpression | None = None,
default: Any | None = None,
ordering: _OrderByFieldName | Sequence[_OrderByFieldName] = ...,
order_by: _OrderByFieldName | Sequence[_OrderByFieldName] = ...,
**extra: Any,
) -> None: ...
@override
def __init_subclass__(cls, *args: Any, **kwargs: Any) -> None: ...
def __init_subclass__(cls, /, *args: Any, **kwargs: Any) -> None: ...
@@ -11,6 +11,7 @@ from django.db.models.expressions import Combinable, Expression
from django.db.models.fields import NOT_PROVIDED, _ErrorMessagesDict, _ErrorMessagesMapping
from django.db.models.fields.mixins import CheckFieldDefaultMixin
from django.db.models.lookups import Transform
from django.db.models.sql.compiler import _AsSqlType
from django.utils.choices import _Choices
from django.utils.functional import _StrOrPromise
from typing_extensions import TypeVar, override
@@ -66,7 +67,7 @@ class ArrayField(CheckPostgresInstalledMixin, CheckFieldDefaultMixin, Field[_ST,
def description(self) -> str: ... # type: ignore[override]
@override
def cast_db_type(self, connection: BaseDatabaseWrapper) -> str: ...
def get_placeholder(self, value: Unused, compiler: Unused, connection: BaseDatabaseWrapper) -> str: ...
def get_placeholder_sql(self, value: Unused, compiler: Unused, connection: BaseDatabaseWrapper) -> _AsSqlType: ...
@override
def get_transform(self, name: str) -> type[Transform] | None: ...
@@ -33,7 +33,7 @@ class RangeField(CheckPostgresInstalledMixin, models.Field[Any, _RangeT]):
empty_strings_allowed: bool
base_field: type[models.Field[Any, Any]]
range_type: type[_RangeT]
def get_placeholder(self, value: Unused, compiler: Unused, connection: BaseDatabaseWrapper) -> str: ...
def get_placeholder_sql(self, value: Unused, compiler: Unused, connection: BaseDatabaseWrapper) -> _AsSqlType: ...
@override
def get_prep_value(self, value: Any) -> Any | None: ...
@override
@@ -1,5 +1,5 @@
import re
from typing import Any, ClassVar, TypeAlias
from typing import Any, ClassVar, Self, TypeAlias
from django.db.backends.base.base import BaseDatabaseWrapper
from django.db.models import Expression, Field, FloatField, TextField
@@ -7,7 +7,7 @@ from django.db.models.expressions import Combinable, CombinedExpression, Func, V
from django.db.models.lookups import Lookup
from django.db.models.sql.compiler import SQLCompiler, _AsSqlType
from psycopg.adapt import Dumper
from typing_extensions import Self, TypeVar, override
from typing_extensions import TypeVar, override
from .utils import CheckPostgresInstalledMixin
@@ -19,6 +19,7 @@ class SessionBase(dict[str, Any]):
serializer: Any
def __init__(self, session_key: str | None = None) -> None: ...
async def aset(self, key: str, value: Any) -> None: ...
def __bool__(self) -> bool: ...
@property
def key_salt(self) -> str: ...
@overload # type: ignore[override]
@@ -1,10 +1,10 @@
import datetime as dt
from typing import Any, ClassVar
from typing import Any, ClassVar, Self
from django.contrib.sessions.backends.base import SessionBase
from django.db import models
from django.db.models.expressions import Combinable
from typing_extensions import Self, TypeVar
from typing_extensions import TypeVar
_T = TypeVar("_T", bound=AbstractBaseSession)
@@ -3,7 +3,7 @@ from typing import Any, Literal, overload
from django.core.checks.messages import CheckMessage
from django.core.files.storage import FileSystemStorage, Storage
from typing_extensions import deprecated, override
from typing_extensions import override
searched_locations: Any
@@ -13,12 +13,6 @@ class BaseFinder:
def find(self, path: str, find_all: Literal[False] = False) -> str | None: ...
@overload
def find(self, path: str, find_all: Literal[True]) -> list[str]: ...
@overload
@deprecated("The `all` keyword argument is deprecated; use `find_all` instead.")
def find(self, path: str, *, all: Literal[False]) -> str | None: ...
@overload
@deprecated("The `all` keyword argument is deprecated; use `find_all` instead.")
def find(self, path: str, *, all: Literal[True]) -> list[str]: ...
def list(self, ignore_patterns: Iterable[str] | None) -> Iterable[Any]: ...
class FileSystemFinder(BaseFinder):
@@ -53,11 +47,5 @@ class DefaultStorageFinder(BaseStorageFinder):
def find(path: str, find_all: Literal[False] = False) -> str | None: ...
@overload
def find(path: str, find_all: Literal[True]) -> list[str]: ...
@overload
@deprecated("The `all` keyword argument is deprecated; use `find_all` instead.")
def find(path: str, *, all: Literal[False]) -> str | None: ...
@overload
@deprecated("The `all` keyword argument is deprecated; use `find_all` instead.")
def find(path: str, *, all: Literal[True]) -> list[str]: ...
def get_finders() -> Iterator[BaseFinder]: ...
def get_finder(import_path: str) -> BaseFinder: ...
@@ -1,7 +1,7 @@
import sys
from collections.abc import Awaitable, Callable, Mapping
from typing import Any
from urllib.parse import ParseResult
from wsgiref.types import StartResponse, WSGIEnvironment
from django.core.handlers.asgi import ASGIHandler
from django.core.handlers.base import BaseHandler
@@ -10,11 +10,6 @@ from django.http import HttpRequest
from django.http.response import FileResponse, HttpResponse, HttpResponseBase
from typing_extensions import override
if sys.version_info >= (3, 11):
from wsgiref.types import StartResponse, WSGIEnvironment
else:
from _typeshed.wsgi import StartResponse, WSGIEnvironment
class StaticFilesHandlerMixin:
handles_files: bool
application: BaseHandler
@@ -1,5 +1,5 @@
from collections.abc import Callable, Iterator
from re import Match
from re import Match, Pattern
from typing import Any, TypeAlias
from _typeshed import StrPath
@@ -28,8 +28,14 @@ class HashedFilesMixin:
def file_hash(self, name: str, content: File[Any] | None = None) -> str | None: ...
def hashed_name(self, name: str, content: File[Any] | None = None, filename: str | None = None) -> str: ...
def url(self, name: str, force: bool = False) -> str: ...
def get_ignored_blocks(self, content: str, pattern: Pattern[str]) -> list[tuple[int, int]]: ...
def is_in_ignored_block(self, pos: int, ignored_blocks: list[tuple[int, int]]) -> bool: ...
def url_converter(
self, name: str, hashed_files: dict[str, Any], template: str | None = None
self,
name: str,
hashed_files: dict[str, Any],
template: str | None = None,
ignored_blocks: list[tuple[int, int]] | None = None,
) -> Callable[[Match[str]], str]: ...
def post_process(self, paths: dict[str, Any], dry_run: bool = False, **options: Any) -> _PostProcessT: ...
def clean_name(self, name: str) -> str: ...
@@ -0,0 +1,12 @@
from collections.abc import Sequence
from django.apps.config import AppConfig
from django.core.checks import CheckMessage
def check_mailers_default_alias(app_configs: Sequence[AppConfig] | None, **kwargs: object) -> list[CheckMessage]: ...
NON_PRODUCTION_EMAIL_BACKENDS: set[str]
def check_mailers_production_backend(
app_configs: Sequence[AppConfig] | None, **kwargs: object
) -> list[CheckMessage]: ...
@@ -13,6 +13,7 @@ class Tags:
compatibility: str
database: str
files: str
mail: str
models: str
security: str
signals: str
@@ -25,6 +25,7 @@ E023: Error
E024: Error
W025: Warning
E026: Error
W027: Warning
def check_security_middleware(app_configs: Sequence[AppConfig] | None, **kwargs: object) -> list[CheckMessage]: ...
def check_xframe_options_middleware(
@@ -45,3 +46,6 @@ def check_cross_origin_opener_policy(
app_configs: Sequence[AppConfig] | None, **kwargs: object
) -> list[CheckMessage]: ...
def check_csp_settings(app_configs: Sequence[AppConfig] | None, **kwargs: object) -> list[CheckMessage]: ...
def check_csp_nonce_context_processor(
app_configs: Sequence[AppConfig] | None, **kwargs: object
) -> list[CheckMessage]: ...
@@ -26,6 +26,7 @@ class ViewDoesNotExist(Exception): ...
class MiddlewareNotUsed(Exception): ...
class ImproperlyConfigured(Exception): ...
class FieldError(Exception): ...
class FieldFetchBlocked(Exception): ...
NON_FIELD_ERRORS: Literal["__all__"]
@@ -1,10 +1,10 @@
from collections.abc import Callable, Iterator
from types import TracebackType
from typing import IO, AnyStr, type_check_only
from typing import IO, AnyStr, Self, type_check_only
from django.core.files.utils import FileProxyMixin
from django.utils.functional import cached_property
from typing_extensions import Self, override
from typing_extensions import override
class File(FileProxyMixin[AnyStr], IO[AnyStr]):
DEFAULT_CHUNK_SIZE: int
@@ -1,8 +1,8 @@
from typing import IO, Any
from typing import IO, Any, Self
from django.core.files.base import File
from django.utils.functional import cached_property
from typing_extensions import Self, TypeVar, override
from typing_extensions import TypeVar, override
# `typing.AnyStr` is deprecated from 3.16+, so we define our own equivalent constrained TypeVar.
_AnyStr = TypeVar("_AnyStr", str, bytes)
@@ -1,6 +1,6 @@
import sys
from io import BytesIO, IOBase
from typing import Any
from wsgiref.types import StartResponse, WSGIEnvironment
from django.core.files import uploadedfile
from django.core.handlers import base
@@ -11,11 +11,6 @@ from django.utils.datastructures import MultiValueDict
from django.utils.functional import cached_property
from typing_extensions import override
if sys.version_info >= (3, 11):
from wsgiref.types import StartResponse, WSGIEnvironment
else:
from _typeshed.wsgi import StartResponse, WSGIEnvironment
class LimitedStream(IOBase):
limit: int
def __init__(self, stream: BytesIO, limit: int) -> None: ...
@@ -3,6 +3,10 @@ from typing import Any
from django.utils.functional import _StrOrPromise
from .backends.base import BaseEmailBackend
from .exceptions import InvalidMailer as InvalidMailer
from .exceptions import MailerDoesNotExist as MailerDoesNotExist
from .handler import MailersHandler
from .message import DEFAULT_ATTACHMENT_MIME_TYPE as DEFAULT_ATTACHMENT_MIME_TYPE
from .message import BadHeaderError as BadHeaderError
from .message import EmailAlternative as EmailAlternative
@@ -16,7 +20,9 @@ from .message import make_msgid as make_msgid
from .utils import DNS_NAME as DNS_NAME
from .utils import CachedDnsName as CachedDnsName
def get_connection(backend: str | None = None, *, fail_silently: bool = False, **kwds: Any) -> Any: ...
mailers: MailersHandler
def get_connection(backend: str | None = None, *, fail_silently: bool = False, **kwds: Any) -> BaseEmailBackend: ...
def send_mail(
subject: _StrOrPromise,
message: _StrOrPromise,
@@ -26,8 +32,9 @@ def send_mail(
fail_silently: bool = False,
auth_user: str | None = None,
auth_password: str | None = None,
connection: Any | None = None,
connection: BaseEmailBackend | None = None,
html_message: str | None = None,
using: str | None = None,
) -> int: ...
def send_mass_mail(
datatuple: Iterable[tuple[str, str, str | None, list[str]]],
@@ -35,23 +42,26 @@ def send_mass_mail(
fail_silently: bool = False,
auth_user: str | None = None,
auth_password: str | None = None,
connection: Any | None = None,
connection: BaseEmailBackend | None = None,
using: str | None = None,
) -> int: ...
def mail_admins(
subject: _StrOrPromise,
message: _StrOrPromise,
*,
fail_silently: bool = False,
connection: Any | None = None,
connection: BaseEmailBackend | None = None,
html_message: str | None = None,
using: str | None = None,
) -> None: ...
def mail_managers(
subject: _StrOrPromise,
message: _StrOrPromise,
*,
fail_silently: bool = False,
connection: Any | None = None,
connection: BaseEmailBackend | None = None,
html_message: str | None = None,
using: str | None = None,
) -> None: ...
outbox: list[EmailMessage | EmailMultiAlternatives]
@@ -65,12 +75,15 @@ __all__ = [
"EmailAttachment",
"EmailMessage",
"EmailMultiAlternatives",
"InvalidMailer",
"MailerDoesNotExist",
"SafeMIMEMultipart",
"SafeMIMEText",
"forbid_multi_line_headers",
"get_connection",
"mail_admins",
"mail_managers",
"mailers",
"make_msgid",
"send_mail",
"send_mass_mail",
@@ -1,13 +1,19 @@
from collections.abc import Sequence
from types import TracebackType
from typing import Any
from typing import Any, Self
from django.core.mail.message import EmailMessage
from typing_extensions import Self
class BaseEmailBackend:
fail_silently: bool
def __init__(self, fail_silently: bool = False, **kwargs: Any) -> None: ...
def __init__(
self,
fail_silently: bool | object = ...,
*,
alias: str | None = None,
_ignore_unknown_kwargs: set[str] | None = None,
**kwargs: Any,
) -> None: ...
def open(self) -> bool | None: ...
def close(self) -> None: ...
def __enter__(self) -> Self: ...
@@ -4,4 +4,4 @@ from django.core.mail.backends.console import EmailBackend as ConsoleEmailBacken
class EmailBackend(ConsoleEmailBackend):
file_path: str
def __init__(self, *args: Any, file_path: str | None = None, **kwargs: Any) -> None: ...
def __init__(self, fail_silently: bool = False, file_path: str | None = None, **kwargs: Any) -> None: ...
@@ -0,0 +1,16 @@
# RemovedInDjango70Warning: this entire file.
from django.core.mail.backends.base import BaseEmailBackend
FAIL_SILENTLY_ARG_WARNING: str
AUTH_ARGS_WARNING: str
CONNECTION_ARG_WARNING: str
NO_DEFAULT_MAILER_WARNING: str
def report_using_incompatibility(
connection: BaseEmailBackend | None = None,
fail_silently: bool = False,
auth_user: str | None = None,
auth_password: str | None = None,
) -> None: ...
def warn_about_default_mailers_if_needed() -> None: ...
@@ -0,0 +1,7 @@
from django.core.exceptions import ImproperlyConfigured
class InvalidMailer(ImproperlyConfigured):
def __init__(self, msg: str, *, alias: str | None = None) -> None: ...
class MailerDoesNotExist(InvalidMailer, KeyError):
def __init__(self, *, alias: str) -> None: ...
@@ -0,0 +1,22 @@
from collections.abc import Iterator, Mapping
from typing import Any, Literal, TypeAlias
from django.core.mail.backends.base import BaseEmailBackend
DEFAULT_MAILER_ALIAS: Literal["default"]
DEFAULT_MAILER_BACKEND: Literal["django.core.mail.backends.smtp.EmailBackend"]
_MailerSetting: TypeAlias = Mapping[str, Any]
class MailersHandler:
def __getitem__(self, /, alias: str) -> BaseEmailBackend: ...
def __contains__(self, /, alias: str) -> bool: ...
def __iter__(self) -> Iterator[_MailerSetting]: ...
def get(self, alias: str, /, default: Any | None = None) -> BaseEmailBackend: ...
@property
def default(self) -> BaseEmailBackend: ...
@property
def settings(self) -> _MailerSetting: ...
def create_connection(
self, alias: str, /, *, _deprecated_kwargs: Mapping[str, Any] | None = None
) -> BaseEmailBackend: ...
@@ -9,6 +9,7 @@ from email.policy import Policy
from email.utils import make_msgid as make_msgid
from typing import Any, NamedTuple, TypeAlias, overload
from django.core.mail.backends.base import BaseEmailBackend
from django.utils.functional import _StrOrPromise
utf8_charset: Any
@@ -70,7 +71,7 @@ class EmailMessage:
body: _StrOrPromise
attachments: list[Any]
extra_headers: dict[Any, Any]
connection: Any
connection: BaseEmailBackend | None
def __init__(
self,
subject: _StrOrPromise = "",
@@ -79,16 +80,15 @@ class EmailMessage:
to: Sequence[str] | None = None,
*,
bcc: Sequence[str] | None = None,
connection: Any | None = None,
connection: BaseEmailBackend | None = None,
attachments: Sequence[MIMEBase | _AttachmentTuple] | None = None,
headers: dict[str, str] | None = None,
cc: Sequence[str] | None = None,
reply_to: Sequence[str] | None = None,
) -> None: ...
def get_connection(self, fail_silently: bool = False) -> Any: ...
def message(self, *, policy: Policy | None = ...) -> _StdlibEmailMessage: ...
def recipients(self) -> list[str]: ...
def send(self, fail_silently: bool = False) -> int: ...
def send(self, fail_silently: bool = False, *, using: str | None = None) -> int: ...
@overload
def attach(self, filename: MIMEBase | None = None, content: None = None, mimetype: None = None) -> None: ...
@overload
@@ -1,4 +1,9 @@
from typing import Any
from django.core.management.base import BaseCommand
from typing_extensions import override
class Command(BaseCommand):
missing_args_message: str
@override
def handle(self, *args: Any, using: str | None = None, **kwargs: Any) -> None: ...
@@ -5,11 +5,11 @@ from django.core.serializers.python import Serializer as PythonSerializer
from django.db.models.fields import Field
from typing_extensions import override
from yaml import CSafeDumper as SafeDumper
from yaml import MappingNode, ScalarNode
from yaml import ScalarNode
class DjangoSafeDumper(SafeDumper):
def represent_decimal(self, data: Any) -> ScalarNode: ...
def represent_ordered_dict(self, data: Any) -> MappingNode: ...
def represent_time(self, data: Any) -> ScalarNode: ...
class Serializer(PythonSerializer):
internal_use_only: bool
@@ -1,12 +1,9 @@
from contextlib import AbstractContextManager
from typing import IO, Any
from xml.sax.expatreader import ExpatParser
from django.core.serializers import base
from typing_extensions import override
def fast_cache_clearing() -> AbstractContextManager[None]: ...
class Serializer(base.Serializer):
def indent(self, level: int) -> None: ...
xml: Any
@@ -41,8 +38,9 @@ class Deserializer(base.Deserializer):
@override
def __next__(self) -> base.DeserializedObject: ...
def check_element_type(element: Any) -> bool: ...
def getChildrenByTagName(node: Any, tag_name: str) -> list[Any]: ...
def getInnerText(node: Any) -> str: ...
def getInnerTextList(node: Any) -> list[str]: ...
class DefusedExpatParser(ExpatParser):
def __init__(self, *args: Any, **kwargs: Any) -> None: ...
@@ -12,7 +12,7 @@ def b62_encode(s: int) -> str: ...
def b62_decode(s: str) -> int: ...
def b64_encode(s: bytes) -> bytes: ...
def b64_decode(s: bytes) -> bytes: ...
def base64_hmac(salt: bytes | str, value: bytes | str, key: bytes | str, algorithm: str = "sha1") -> str: ...
def base64_hmac(salt: bytes | str, value: bytes | str, key: bytes | str, algorithm: str | None = None) -> str: ...
def get_cookie_signer(salt: str = "django.core.signing.get_cookie_signer") -> TimestampSigner: ...
@type_check_only
@@ -3,7 +3,7 @@ from collections.abc import Callable, Iterable
from contextlib import AbstractContextManager
from datetime import tzinfo
from logging import Logger
from typing import Any, TypeAlias
from typing import Any, Self, TypeAlias
from django.db.backends.base.client import BaseDatabaseClient
from django.db.backends.base.creation import BaseDatabaseCreation
@@ -16,7 +16,6 @@ from django.db.backends.utils import CursorDebugWrapper, CursorWrapper
from django.db.transaction import Atomic
from django.db.utils import DatabaseErrorWrapper
from django.utils.functional import cached_property
from typing_extensions import Self
NO_DB_ALIAS: str
RAN_DB_VERSION_CHECK: set[str]
@@ -1,16 +1,27 @@
from typing import Any
from typing import Any, ClassVar, overload
from django.db.backends.base.base import BaseDatabaseWrapper
from typing_extensions import deprecated
TEST_DATABASE_PREFIX: str
class BaseDatabaseCreation:
destroy_test_db_connection_close_method: ClassVar[str | None]
connection: BaseDatabaseWrapper
def __init__(self, connection: BaseDatabaseWrapper) -> None: ...
def __del__(self) -> None: ...
def log(self, msg: str) -> None: ...
@overload
@deprecated(
"DatabaseCreation.create_test_db(serialize) is deprecated. Call DatabaseCreation.serialize_test_db() once all "
"test databases are set up instead if you need fixtures persistence between tests."
)
def create_test_db(
self, verbosity: int = 1, autoclobber: bool = False, serialize: bool | None = None, keepdb: bool = False
self, verbosity: int = 1, autoclobber: bool = False, serialize: bool = ..., keepdb: bool = False
) -> str: ...
@overload
def create_test_db(
self, verbosity: int = 1, autoclobber: bool = False, serialize: None = None, keepdb: bool = False
) -> str: ...
def set_as_test_mirror(self, primary_settings_dict: dict[str, dict[str, None] | int | str | None]) -> None: ...
def serialize_db_to_string(self) -> str: ...
@@ -41,6 +41,7 @@ class BaseDatabaseFeatures:
has_real_datatype: bool
supports_subqueries_in_group_by: bool
ignores_unnecessary_order_by_in_subqueries: bool
has_native_boolean_field: bool
has_native_uuid_field: bool
has_native_duration_field: bool
supports_temporal_subtraction: bool
@@ -100,6 +101,8 @@ class BaseDatabaseFeatures:
supports_aggregate_order_by_clause: bool
supports_aggregate_distinct_multiple_argument: bool
supports_any_value: bool
supports_bit_aggregations: bool
supports_default_in_bit_aggregations: bool
supports_index_on_text_field: bool
supports_over_clause: bool
supports_frame_range_fixed_distance: bool
@@ -139,17 +142,29 @@ class BaseDatabaseFeatures:
supports_comments_inline: bool
supports_stored_generated_columns: bool
supports_virtual_generated_columns: bool
supports_alter_generated_column_data_type: bool
supports_logical_xor: bool
prohibits_null_characters_in_text_exception: tuple[ValueError | DataError] | None
supports_unlimited_charfield: bool
supports_tuple_comparison_against_subquery: bool
rounds_to_even: bool
pattern_lookup_needs_param_pattern: bool
supports_no_precision_decimalfield: bool
supports_tuple_lookups: bool
supports_on_delete_db_cascade: bool
supports_on_delete_db_default: bool
supports_on_delete_db_null: bool
supports_inspectdb: bool
test_collations: dict[str, str | None]
test_now_utc_template: str | None
insert_test_table_with_defaults: str | None
django_test_expected_failures: set[str]
django_test_skips: dict[str, set[str]]
disallowed_simple_test_case_connection_methods: list[tuple[str, str]]
supports_uuid4_function: bool
supports_uuid4_function_in_default: bool
supports_uuid7_function: bool
supports_uuid7_function_shift: bool
connection: BaseDatabaseWrapper
def __init__(self, connection: BaseDatabaseWrapper) -> None: ...
def __del__(self) -> None: ...
@@ -1,11 +1,12 @@
from collections.abc import Iterable
from typing import Any, Literal, NamedTuple, type_check_only
from typing import Any, Literal, NamedTuple, NotRequired, type_check_only
from django.db.backends.base.base import BaseDatabaseWrapper
from django.db.backends.utils import CursorWrapper
from django.db.models.base import Model
from django.db.models.deletion import DatabaseOnDelete, _Collector
from django.db.models.fields import Field
from typing_extensions import NotRequired, TypedDict
from typing_extensions import TypedDict
class TableInfo(NamedTuple):
name: str
@@ -43,6 +44,7 @@ class _SequenceDict(TypedDict):
class BaseDatabaseIntrospection:
data_types_reverse: Any
on_delete_types: dict[str, _Collector | DatabaseOnDelete]
connection: BaseDatabaseWrapper
def __init__(self, connection: BaseDatabaseWrapper) -> None: ...
def __del__(self) -> None: ...
@@ -51,6 +51,7 @@ class BaseDatabaseOperations:
self, nowait: bool = False, skip_locked: bool = False, of: Any = (), no_key: bool = False
) -> str: ...
def limit_offset_sql(self, low_mark: int, high_mark: int | None) -> str: ...
def fk_on_delete_sql(self, operation: str) -> str: ...
def bulk_insert_sql(self, fields: Iterable[Field[Any, Any]], placeholder_rows: Iterable[str]) -> str: ...
def last_executed_query(self, cursor: Any, sql: Any, params: Any) -> str: ...
def last_insert_id(self, cursor: CursorWrapper, table_name: str, pk_name: str) -> int: ...
@@ -86,6 +87,7 @@ class BaseDatabaseOperations:
def adapt_integerfield_value(self, value: Any, internal_type: Any) -> Any: ...
def adapt_datefield_value(self, value: date | None) -> str | None: ...
def adapt_datetimefield_value(self, value: real_datetime | None) -> str | None: ...
def adapt_durationfield_value(self, value: timedelta | None) -> int | None: ...
def adapt_timefield_value(self, value: real_datetime | time | None) -> str | None: ...
def adapt_decimalfield_value(
self, value: Decimal | None, max_digits: int | None = None, decimal_places: int | None = None
@@ -98,11 +100,14 @@ class BaseDatabaseOperations:
def convert_durationfield_value(
self, value: float | None, expression: Expression, connection: BaseDatabaseWrapper
) -> timedelta | None: ...
def convert_trunc_expression(
self, value: real_datetime | None, expression: Expression
) -> real_datetime | date | time | None: ...
def check_expression_support(self, expression: Any) -> None: ...
def conditional_expression_supported_in_where_clause(self, expression: Any) -> bool: ...
def combine_expression(self, connector: str, sub_expressions: list[str]) -> str: ...
def combine_duration_expression(self, connector: Any, sub_expressions: Any) -> str: ...
def binary_placeholder_sql(self, value: Case | None) -> str: ...
def binary_placeholder_sql(self, value: Case | None, compiler: SQLCompiler) -> str: ...
def modify_insert_params(self, placeholder: str, params: Any) -> Any: ...
def integer_field_range(self, internal_type: Any) -> tuple[int, int]: ...
def subtract_temporals(self, internal_type: Any, lhs: Any, rhs: Any) -> tuple[str, tuple[Any, ...]]: ...
@@ -2,7 +2,7 @@ from collections.abc import Sequence
from contextlib import AbstractContextManager
from logging import Logger
from types import TracebackType
from typing import Any
from typing import Any, Self
from django.db.backends.base.base import BaseDatabaseWrapper
from django.db.backends.ddl_references import Statement
@@ -11,7 +11,7 @@ from django.db.models.constraints import BaseConstraint
from django.db.models.fields import Field
from django.db.models.indexes import Index
from django.db.models.sql.compiler import _AsSqlType
from typing_extensions import Self, override
from typing_extensions import override
logger: Logger
@@ -78,8 +78,6 @@ class DatabaseFeatures(BaseDatabaseFeatures):
@override
def has_select_for_update_of(self) -> bool: ... # type: ignore[override]
@cached_property
def supports_explain_analyze(self) -> bool: ...
@cached_property
@override
def supported_explain_formats(self) -> set[str]: ... # type: ignore[override]
@cached_property
@@ -121,3 +119,12 @@ class DatabaseFeatures(BaseDatabaseFeatures):
@cached_property
@override
def supports_any_value(self) -> bool: ... # type: ignore[override]
@cached_property
@override
def supports_uuid4_function(self) -> bool: ... # type: ignore[override]
@property
@override
def supports_uuid4_function_in_default(self) -> bool: ... # type: ignore[override]
@cached_property
@override
def supports_uuid7_function(self) -> bool: ... # type: ignore[override]
@@ -4,6 +4,7 @@ from django.core.management.color import Style
from django.db.backends.base.operations import BaseDatabaseOperations
from django.db.backends.mysql.base import DatabaseWrapper
from django.db.models.constants import OnConflict
from django.db.models.sql.compiler import SQLCompiler
from typing_extensions import override
class DatabaseOperations(BaseDatabaseOperations):
@@ -55,7 +56,7 @@ class DatabaseOperations(BaseDatabaseOperations):
def convert_datetimefield_value(self, value: Any, expression: Any, connection: Any) -> Any: ...
def convert_uuidfield_value(self, value: Any, expression: Any, connection: Any) -> Any: ...
@override
def binary_placeholder_sql(self, value: Any) -> Any: ...
def binary_placeholder_sql(self, value: Any, compiler: SQLCompiler) -> Any: ...
@override
def subtract_temporals(self, internal_type: Any, lhs: Any, rhs: Any) -> Any: ...
@override
@@ -1,4 +1,4 @@
from typing import Any
from typing import Any, ClassVar
from django.db.backends.base.creation import BaseDatabaseCreation
from django.db.backends.oracle.base import DatabaseWrapper
@@ -7,6 +7,7 @@ from typing_extensions import override
TEST_DATABASE_PREFIX: str
class DatabaseCreation(BaseDatabaseCreation):
destroy_test_db_connection_close_method: ClassVar[str | None]
connection: DatabaseWrapper
@override
def set_as_test_mirror(self, primary_settings_dict: Any) -> None: ...
@@ -48,8 +48,10 @@ class DatabaseFeatures(BaseDatabaseFeatures):
supports_aggregate_order_by_clause: bool
supports_any_value: bool
supports_tuple_comparison_against_subquery: bool
supports_json_negative_indexing: bool
@cached_property
@override
def supports_json_negative_indexing(self) -> bool: ... # type: ignore[override]
@cached_property
@override
def django_test_skips(self) -> dict[str, set[str]]: ... # type: ignore[override]
@@ -79,3 +81,15 @@ class DatabaseFeatures(BaseDatabaseFeatures):
@cached_property
@override
def supports_tuple_lookups(self) -> bool: ... # type: ignore[override]
@cached_property
@override
def supports_uuid4_function(self) -> bool: ... # type: ignore[override]
@cached_property
@override
def supports_uuid4_function_in_default(self) -> bool: ... # type: ignore[override]
@cached_property
@override
def supports_stored_generated_columns(self) -> bool: ... # type: ignore[override]
@cached_property
@override
def supports_bit_aggregations(self) -> bool: ... # type: ignore[override]
@@ -79,6 +79,8 @@ class DatabaseOperations(BaseDatabaseOperations):
@override
def adapt_datetimefield_value(self, value: Any) -> Any: ...
@override
def adapt_durationfield_value(self, value: Any) -> Any: ...
@override
def adapt_timefield_value(self, value: Any) -> Any: ...
@override
def combine_expression(self, connector: Any, sub_expressions: Any) -> Any: ...
@@ -1,7 +1,7 @@
from typing import Any
from django.db.models.sql.compiler import SQLAggregateCompiler as SQLAggregateCompiler
from django.db.models.sql.compiler import SQLCompiler as BaseSQLCompiler
from django.db.models.sql.compiler import SQLCompiler as SQLCompiler
from django.db.models.sql.compiler import SQLDeleteCompiler as SQLDeleteCompiler
from django.db.models.sql.compiler import SQLInsertCompiler as BaseSQLInsertCompiler
from django.db.models.sql.compiler import SQLUpdateCompiler as SQLUpdateCompiler
@@ -17,10 +17,6 @@ __all__ = [
class InsertUnnest(list[str]): ...
class SQLCompiler(BaseSQLCompiler):
@override
def quote_name_unless_alias(self, name: str) -> str: ...
class SQLInsertCompiler(BaseSQLInsertCompiler):
@override
def assemble_as_sql(self, fields: Any, value_rows: Any) -> tuple[Any, Any]: ...
@@ -11,6 +11,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
can_return_columns_from_insert: bool
can_return_rows_from_bulk_insert: bool
has_real_datatype: bool
has_native_boolean_field: bool
has_native_uuid_field: bool
has_native_duration_field: bool
has_native_json_field: bool
@@ -44,6 +45,13 @@ class DatabaseFeatures(BaseDatabaseFeatures):
supports_deferrable_unique_constraints: bool
has_json_operators: bool
json_key_contains_list_matching_requires_list: bool
supports_uuid4_function: bool
@cached_property
@override
def supports_uuid7_function(self) -> bool: ... # type: ignore[override]
@cached_property
@override
def supports_uuid7_function_shift(self) -> bool: ... # type: ignore[override]
@cached_property
@override
def django_test_skips(self) -> dict[str, set[str]]: ... # type: ignore[override]
@@ -54,16 +62,19 @@ class DatabaseFeatures(BaseDatabaseFeatures):
def uses_server_side_binding(self) -> bool: ...
@cached_property
@override
def max_query_params(self) -> int | None: ... # type: ignore[override]
@cached_property
@override
def prohibits_null_characters_in_text_exception(self) -> tuple[type[Exception], str]: ... # type: ignore[override]
@cached_property
@override
def introspected_field_types(self) -> dict[str, str]: ... # type: ignore[override]
@cached_property
def is_postgresql_15(self) -> bool: ...
@cached_property
def is_postgresql_16(self) -> bool: ...
@cached_property
def is_postgresql_17(self) -> bool: ...
@cached_property
def is_postgresql_18(self) -> bool: ...
supports_covering_indexes: bool
supports_non_deterministic_collations: bool
can_return_rows_from_update: bool
@@ -74,3 +85,9 @@ class DatabaseFeatures(BaseDatabaseFeatures):
@property
@override
def supports_any_value(self) -> bool: ... # type: ignore[override]
@property
@override
def supports_virtual_generated_columns(self) -> bool: ... # type: ignore[override]
@property
@override
def supports_uuid4_function_in_default(self) -> bool: ... # type: ignore[override]
@@ -3,6 +3,7 @@ from typing import NamedTuple
from django.db.backends.base.introspection import BaseDatabaseIntrospection
from django.db.backends.postgresql.base import DatabaseWrapper
from django.db.backends.utils import CursorWrapper
from django.db.models.deletion import DatabaseOnDelete, _Collector
from typing_extensions import override
class FieldInfo(NamedTuple):
@@ -28,6 +29,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
data_types_reverse: dict[int, str]
index_default_access_method: str
ignored_tables: list[str]
on_delete_types: dict[str, _Collector | DatabaseOnDelete]
@override
def get_table_description(self, cursor: CursorWrapper, table_name: str) -> list[FieldInfo]: ...
@@ -32,11 +32,12 @@ RANGE_TYPES: tuple[Any, ...]
Jsonb: Any
ClientCursor: Any
TextLoader: Any
TimestamptzLoader: Any
BaseTzLoader: Any
RangeDumper: Any
DjangoRangeDumper: Any
orig_tz_loader_cls: Any
def Inet(address: str) -> Any: ...
def mogrify(sql: str, params: Any, connection: BaseDatabaseWrapper) -> str: ...
def register_tzloader(tz: Any, context: Any) -> None: ...
@@ -11,6 +11,9 @@ class DatabaseFeatures(BaseDatabaseFeatures):
supports_any_value: bool
@cached_property
@override
def supports_uuid7_function(self) -> bool: ... # type: ignore[override]
@cached_property
@override
def django_test_skips(self) -> dict[str, set[str]]: ... # type: ignore[override]
@cached_property
@override
@@ -36,3 +39,6 @@ class DatabaseFeatures(BaseDatabaseFeatures):
@property
@override
def can_return_rows_from_update(self) -> bool: ... # type: ignore[override]
@property
@override
def supports_uuid4_function_in_default(self) -> bool: ... # type: ignore[override]
@@ -5,9 +5,14 @@ from uuid import UUID
from django.db.backends.base.base import BaseDatabaseWrapper
from django.db.backends.base.operations import BaseDatabaseOperations
from django.db.models.aggregates import Aggregate
from django.db.models.expressions import Expression
from django.db.models.fields import DateField, DateTimeField, TimeField
from typing_extensions import override
UNSUPPORTED_DATETIME_AGGREGATES: tuple[type[Aggregate], ...]
DATETIME_FIELDS: tuple[type[DateField[Any, Any] | DateTimeField[Any, Any] | TimeField[Any, Any]], ...]
class DatabaseOperations(BaseDatabaseOperations):
jsonfield_datatype_values: frozenset[str]
def convert_datetimefield_value(self, value: Any, expression: Any, connection: Any) -> Any | None: ...
@@ -4,11 +4,9 @@ from contextlib import AbstractContextManager
from decimal import Decimal
from logging import Logger
from types import TracebackType
from typing import Any, Literal, Protocol, TypeAlias, overload, type_check_only
from typing import Any, Literal, Protocol, Self, TypeAlias, overload, type_check_only
from uuid import UUID
from typing_extensions import Self
logger: Logger
# Protocol matching psycopg2.sql.Composable, to avoid depending psycopg2
@@ -1,6 +1,6 @@
from collections.abc import Callable, Iterable
from enum import Enum
from typing import Any
from typing import Any, Self
from django.db.migrations.graph import MigrationGraph
from django.db.migrations.migration import Migration
@@ -9,7 +9,6 @@ from django.db.migrations.questioner import MigrationQuestioner
from django.db.migrations.state import ProjectState
from django.db.models.fields import Field
from django.utils.functional import cached_property
from typing_extensions import Self
class OperationDependency(tuple[str, str, str | None, OperationDependency.Type]):
class Type(Enum):
@@ -1,10 +1,9 @@
from collections.abc import Sequence
from typing import ClassVar
from typing import ClassVar, Self
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
from django.db.migrations.operations.base import Operation
from django.db.migrations.state import ProjectState
from typing_extensions import Self
class Migration:
operations: ClassVar[Sequence[Operation]]
@@ -1,14 +1,13 @@
from collections.abc import Sequence
from enum import Enum
from typing import Any, ClassVar
from enum import StrEnum
from typing import Any, ClassVar, Self
from django.db.backends.base.base import BaseDatabaseWrapper
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
from django.db.migrations.state import ProjectState
from django.db.models import Model
from typing_extensions import Self
class OperationCategory(str, Enum):
class OperationCategory(StrEnum):
ADDITION = "+"
REMOVAL = "-"
ALTERATION = "~"
@@ -1,10 +1,9 @@
from typing import Any, ClassVar
from typing import Any, ClassVar, Self
from django.db.backends.base.base import BaseDatabaseWrapper
from django.db.models.base import Model
from django.db.models.manager import Manager
from django.db.models.query import QuerySet
from typing_extensions import Self
class MigrationRecorder:
class Migration(Model):
@@ -15,6 +15,7 @@ class DateTimeSerializer(BaseSerializer): ...
class DatetimeDatetimeSerializer(BaseSerializer): ...
class DecimalSerializer(BaseSerializer): ...
class ChoicesSerializer(BaseSerializer): ...
class DatabaseOnDeleteSerializer(BaseSerializer): ...
class DeconstructibleSerializer(BaseSerializer):
@staticmethod
@@ -28,6 +29,7 @@ class FloatSerializer(BaseSimpleSerializer): ...
class FrozensetSerializer(BaseUnorderedSequenceSerializer): ...
class FunctionTypeSerializer(BaseSerializer): ...
class FunctoolsPartialSerializer(BaseSerializer): ...
class GenericAliasSerializer(BaseSerializer): ...
class IterableSerializer(BaseSerializer): ...
class ModelFieldSerializer(DeconstructibleSerializer): ...
class ModelManagerSerializer(DeconstructibleSerializer): ...
@@ -5,6 +5,9 @@ from . import signals as signals
from .aggregates import Aggregate as Aggregate
from .aggregates import AnyValue as AnyValue
from .aggregates import Avg as Avg
from .aggregates import BitAnd as BitAnd
from .aggregates import BitOr as BitOr
from .aggregates import BitXor as BitXor
from .aggregates import Count as Count
from .aggregates import Max as Max
from .aggregates import Min as Min
@@ -19,6 +22,9 @@ from .constraints import CheckConstraint as CheckConstraint
from .constraints import Deferrable as Deferrable
from .constraints import UniqueConstraint as UniqueConstraint
from .deletion import CASCADE as CASCADE
from .deletion import DB_CASCADE as DB_CASCADE
from .deletion import DB_SET_DEFAULT as DB_SET_DEFAULT
from .deletion import DB_SET_NULL as DB_SET_NULL
from .deletion import DO_NOTHING as DO_NOTHING
from .deletion import PROTECT as PROTECT
from .deletion import RESTRICT as RESTRICT
@@ -37,6 +43,7 @@ from .expressions import ExpressionList as ExpressionList
from .expressions import ExpressionWrapper as ExpressionWrapper
from .expressions import F as F
from .expressions import Func as Func
from .expressions import JSONNull as JSONNull
from .expressions import OrderBy as OrderBy
from .expressions import OuterRef as OuterRef
from .expressions import RowRange as RowRange
@@ -47,7 +54,11 @@ from .expressions import When as When
from .expressions import Window as Window
from .expressions import WindowFrame as WindowFrame
from .expressions import WindowFrameExclusion as WindowFrameExclusion
from .fetch_modes import FETCH_ONE as FETCH_ONE
from .fetch_modes import FETCH_PEERS as FETCH_PEERS
from .fetch_modes import FETCH_RAISE as FETCH_RAISE
from .fields import BLANK_CHOICE_DASH as BLANK_CHOICE_DASH
from .fields import BLANK_CHOICE_LABEL as BLANK_CHOICE_LABEL
from .fields import NOT_PROVIDED as NOT_PROVIDED
from .fields import AutoField as AutoField
from .fields import BigAutoField as BigAutoField
@@ -106,9 +117,16 @@ from .query_utils import Q as Q
__all__ = [
"BLANK_CHOICE_DASH",
"BLANK_CHOICE_LABEL",
"CASCADE",
"DB_CASCADE",
"DB_SET_DEFAULT",
"DB_SET_NULL",
"DEFERRED",
"DO_NOTHING",
"FETCH_ONE",
"FETCH_PEERS",
"FETCH_RAISE",
"NOT_PROVIDED",
"PROTECT",
"RESTRICT",
@@ -123,6 +141,9 @@ __all__ = [
"BigAutoField",
"BigIntegerField",
"BinaryField",
"BitAnd",
"BitOr",
"BitXor",
"BooleanField",
"Case",
"CharField",
@@ -160,6 +181,7 @@ __all__ = [
"IntegerChoices",
"IntegerField",
"JSONField",
"JSONNull",
"Lookup",
"Manager",
"ManyToManyField",
@@ -40,6 +40,14 @@ class AnyValue(Aggregate):
class Avg(FixDurationInputMixin, NumericOutputFieldMixin, Aggregate): ...
class BitAggregate(Aggregate):
def __init__(self, expression: Combinable | str, **extra: Any) -> None: ...
def as_oracle(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ...
class BitAnd(BitAggregate): ...
class BitOr(BitAggregate): ...
class BitXor(BitAggregate): ...
class Count(Aggregate):
output_field: ClassVar[IntegerField[Any, Any]]
def __init__(
@@ -95,4 +103,18 @@ class Variance(NumericOutputFieldMixin, Aggregate):
**extra: Any,
) -> None: ...
__all__ = ["Aggregate", "AnyValue", "Avg", "Count", "Max", "Min", "StdDev", "StringAgg", "Sum", "Variance"]
__all__ = [
"Aggregate",
"AnyValue",
"Avg",
"BitAnd",
"BitOr",
"BitXor",
"Count",
"Max",
"Min",
"StdDev",
"StringAgg",
"Sum",
"Variance",
]
@@ -1,15 +1,17 @@
import sys
from collections.abc import Collection, Iterable, Sequence
from typing import Any, ClassVar, Final, overload
from typing import Any, ClassVar, Final, Self, overload
from weakref import ReferenceType
from django.core.checks.messages import CheckMessage
from django.core.exceptions import MultipleObjectsReturned as BaseMultipleObjectsReturned
from django.core.exceptions import ObjectDoesNotExist, ObjectNotUpdated, ValidationError
from django.db.models import BaseConstraint, Field, QuerySet
from django.db.models.fetch_modes import FetchMode
from django.db.models.manager import Manager
from django.db.models.options import Options
from django.db.models.utils import AltersData
from typing_extensions import Self, TypeVar, override
from django.utils.datastructures import _ListOrTuple
from typing_extensions import TypeVar, override
_Self = TypeVar("_Self", bound=Model)
@@ -23,10 +25,21 @@ class ModelStateFieldsCacheDescriptor:
@overload
def __get__(self, instance: ModelState, cls: type[ModelState] | None = None) -> dict[Any, Any]: ...
class ModelStateFetchModeDescriptor:
@overload
def __get__(self, instance: None, cls: type[ModelState] | None = None) -> Self: ...
@overload
def __get__(self, instance: ModelState, cls: type[ModelState] | None = None) -> FetchMode: ...
class ModelState:
db: str | None
adding: bool
fields_cache: ModelStateFieldsCacheDescriptor
fetch_mode: ModelStateFetchModeDescriptor
peers: _ListOrTuple[ReferenceType[Model]]
@override
def __getstate__(self) -> dict[str, Any]: ...
def __del__(self) -> None: ...
class ModelBase(type):
def __new__(cls, name: str, bases: tuple[type, ...], attrs: dict[str, Any], **kwargs: Any) -> ModelBase: ...
@@ -53,12 +66,16 @@ class Model(AltersData, metaclass=ModelBase):
_state: ModelState
def __init__(self, *args: Any, **kwargs: Any) -> None: ...
@classmethod
def from_db(cls, db: str | None, field_names: Collection[str], values: Collection[Any]) -> Self: ...
if sys.version_info >= (3, 11):
@override
def __getstate__(self) -> dict[str, Any]: ...
else:
def __getstate__(self) -> dict[str, Any]: ...
def from_db(
cls,
db: str | None,
field_names: Collection[str],
values: Collection[Any],
*,
fetch_mode: FetchMode | None = None,
) -> Self: ...
@override
def __getstate__(self) -> dict[str, Any]: ...
def _get_pk_val(self, meta: Options[Model] | None = None) -> str: ...
def get_deferred_fields(self) -> set[str]: ...
def refresh_from_db(
@@ -1,6 +1,6 @@
from collections.abc import Sequence
from enum import Enum
from typing import Any, cast, overload
from typing import Any, Self, cast, overload
from django.core.checks import CheckMessage
from django.db.backends.base.base import BaseDatabaseWrapper
@@ -9,7 +9,7 @@ from django.db.models.base import Model
from django.db.models.expressions import BaseExpression, Combinable
from django.db.models.query_utils import Q
from django.utils.functional import _StrOrPromise
from typing_extensions import Self, override
from typing_extensions import override
class Deferrable(Enum):
DEFERRED = cast(str, ...)
@@ -71,7 +71,7 @@ class UniqueConstraint(BaseConstraint):
self,
*expressions: str | BaseExpression | Combinable,
fields: None = None,
name: str | None = None,
name: str,
condition: Q | None = None,
deferrable: Deferrable | None = None,
include: Sequence[str] | None = None,
@@ -85,7 +85,7 @@ class UniqueConstraint(BaseConstraint):
self,
*,
fields: Sequence[str],
name: str | None = None,
name: str,
condition: Q | None = None,
deferrable: Deferrable | None = None,
include: Sequence[str] | None = None,
@@ -1,8 +1,9 @@
from collections import defaultdict
from collections.abc import Callable, Iterable, Iterator, Sequence
from typing import Any
from typing import Any, TypeAlias
from django.db import IntegrityError
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
from django.db.models.base import Model
from django.db.models.fields import Field
from django.db.models.options import Options
@@ -46,6 +47,25 @@ def RESTRICT(
using: str,
) -> None: ...
def SET(value: Any) -> Callable[..., Any]: ...
_Collector: TypeAlias = Callable[[Collector, Field[Any, Any], QuerySet[Model], str], None]
class DatabaseOnDelete:
operation: str
forced_collector: _Collector | None
def __init__(self, operation: str, name: str, forced_collector: _Collector | None = ...) -> None: ...
__call__: _Collector
def on_delete_sql(self, schema_editor: BaseDatabaseSchemaEditor) -> str: ...
DB_CASCADE: DatabaseOnDelete
DB_SET_DEFAULT: DatabaseOnDelete
DB_SET_NULL: DatabaseOnDelete
SKIP_COLLECTION: frozenset[_Collector | DatabaseOnDelete]
def get_candidate_relations_to_delete(opts: Options[Model]) -> Iterable[Field[Any, Any]]: ...
class ProtectedError(IntegrityError):
@@ -64,7 +84,9 @@ class Collector:
restricted_objects: defaultdict[Model, defaultdict[Field[Any, Any], set[Model]]]
fast_deletes: list[QuerySet[Model]]
dependencies: defaultdict[Model, set[Model]]
def __init__(self, using: str, origin: Model | QuerySet[Model] | None = None) -> None: ...
def __init__(
self, using: str, origin: Model | QuerySet[Model] | None = None, force_collection: bool = ...
) -> None: ...
def add(
self,
objs: _IndexableCollection[Model],
@@ -1,5 +1,7 @@
import enum
import sys
from enum import EnumType, IntEnum, StrEnum
from enum import property as enum_property
from typing import Any, Literal, overload, type_check_only
from _typeshed import ConvertibleToInt
@@ -7,17 +9,6 @@ from _typeshed import Self as MetaclassSelf # noqa: TID251
from django.utils.functional import _StrOrPromise
from typing_extensions import override
if sys.version_info >= (3, 11):
from enum import EnumType, IntEnum, StrEnum
from enum import property as enum_property
else:
from enum import EnumMeta as EnumType
from types import DynamicClassAttribute as enum_property
class ReprEnum(enum.Enum): ... # type: ignore[misc]
class IntEnum(int, ReprEnum): ... # type: ignore[misc]
class StrEnum(str, ReprEnum): ... # type: ignore[misc]
class ChoicesType(EnumType):
__empty__: _StrOrPromise
def __new__(
@@ -2,7 +2,7 @@ import datetime
from collections.abc import Callable, Iterator, Mapping, Sequence
from decimal import Decimal
from enum import Enum
from typing import Any, ClassVar, Generic, Literal, TypeAlias
from typing import Any, ClassVar, Generic, Literal, Never, Self, TypeAlias
from django.core.exceptions import FieldError
from django.db.backends.base.base import BaseDatabaseWrapper
@@ -14,7 +14,7 @@ from django.db.models.sql.compiler import SQLCompiler, _AsSqlType, _ParamsT
from django.db.models.sql.query import Query
from django.utils.deconstruct import _Deconstructible
from django.utils.functional import cached_property
from typing_extensions import Never, Self, TypeVar, override
from typing_extensions import TypeVar, override
_OutputField = TypeVar("_OutputField", bound=Field[Any, Any], default=Field[Any, Any])
_Numeric: TypeAlias = float | Decimal
@@ -220,6 +220,11 @@ class Value(Expression):
@property
@override
def empty_result_set_value(self) -> Any: ...
def as_sqlite(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper, **extra_context: Any) -> _AsSqlType: ...
class JSONNull(Value):
def __init__(self) -> None: ...
def as_mysql(self, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ...
class RawSQL(Expression):
params: list[Any]
@@ -0,0 +1,35 @@
from typing import Any, NoReturn
from django.db.models import Model
from typing_extensions import override
class FetchMode:
track_peers: bool
def fetch(self, fetcher: Any, instance: Model) -> None: ...
class FetchOne(FetchMode):
@override
def fetch(self, fetcher: Any, instance: Model) -> None: ...
@override
def __reduce__(self) -> str: ...
FETCH_ONE: FetchOne
class FetchPeers(FetchMode):
track_peers: bool
@override
def fetch(self, fetcher: Any, instance: Model) -> None: ...
@override
def __reduce__(self) -> str: ...
FETCH_PEERS: FetchPeers
class FetchRaise(FetchMode):
@override
def fetch(self, fetcher: Any, instance: Model) -> NoReturn: ...
@override
def __reduce__(self) -> str: ...
FETCH_RAISE: FetchRaise
@@ -3,7 +3,7 @@ import uuid
from collections.abc import Callable, Iterable, Mapping, Sequence
from datetime import date, time, timedelta
from datetime import datetime as real_datetime
from typing import Any, ClassVar, Generic, Protocol, TypeAlias, overload, type_check_only
from typing import Any, ClassVar, Generic, Protocol, Self, TypeAlias, overload, type_check_only
from django import forms
from django.core.checks import CheckMessage
@@ -19,13 +19,16 @@ from django.forms.widgets import Widget
from django.utils.choices import BlankChoiceIterator, _Choice, _ChoiceNamedGroup, _ChoicesCallable, _ChoicesInput
from django.utils.datastructures import DictWrapper
from django.utils.functional import _Getter, _StrOrPromise, cached_property
from typing_extensions import Self, TypeVar, override
from typing_extensions import TypeVar, override
class Empty: ...
class NOT_PROVIDED: ...
# RemovedInDjango70Warning
BLANK_CHOICE_DASH: list[tuple[str, str]]
BLANK_CHOICE_LABEL: _StrOrPromise
_ChoicesList: TypeAlias = Sequence[_Choice] | Sequence[_ChoiceNamedGroup]
_LimitChoicesTo: TypeAlias = Q | dict[str, Any]
_LimitChoicesToCallable: TypeAlias = Callable[[], _LimitChoicesTo]
@@ -241,7 +244,7 @@ class Field(RegisterLookupMixin, Generic[_ST, _GT]):
def get_choices(
self,
include_blank: bool = True,
blank_choice: _ChoicesList = ...,
blank_choice: _ChoicesList | None = None,
limit_choices_to: _LimitChoicesTo | None = None,
ordering: Sequence[_OrderByFieldName] = (),
) -> BlankChoiceIterator | _ChoicesList: ...
@@ -657,7 +660,7 @@ class FilePathField(Field[_ST, _GT]):
class BinaryField(Field[_ST, _GT]):
_pyi_private_get_type: bytes | memoryview
def get_placeholder(self, value: Any, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> str: ...
def get_placeholder_sql(self, value: Any, compiler: SQLCompiler, connection: BaseDatabaseWrapper) -> _AsSqlType: ...
class DurationField(Field[_ST, _GT]):
_pyi_private_get_type: timedelta
@@ -669,6 +672,7 @@ class AutoFieldMixin:
def deconstruct(self) -> tuple[str, str, Sequence[Any], dict[str, Any]]: ...
def validate(self, value: Any, model_instance: Model | None) -> None: ...
def get_db_prep_value(self, value: Any, connection: BaseDatabaseWrapper, prepared: bool = False) -> Any: ...
def get_db_prep_save(self, value: Any, connection: BaseDatabaseWrapper) -> Any: ...
def contribute_to_class(self, cls: type[Model], name: str, **kwargs: Any) -> None: ...
def formfield(self, **kwargs: Any) -> None: ...
@@ -684,6 +688,7 @@ class SmallAutoField(AutoFieldMixin, SmallIntegerField[_ST, _GT]): ... # type:
__all__ = [
"BLANK_CHOICE_DASH",
"BLANK_CHOICE_LABEL",
"NOT_PROVIDED",
"AutoField",
"BigAutoField",

Some files were not shown because too many files have changed in this diff Show More