diff --git a/django-stubs/conf/global_settings.pyi b/django-stubs/conf/global_settings.pyi index ef74e0682..2f96001f5 100644 --- a/django-stubs/conf/global_settings.pyi +++ b/django-stubs/conf/global_settings.pyi @@ -40,7 +40,6 @@ TIME_ZONE: str # If you set this to True, Django will use timezone-aware datetimes. USE_TZ: bool -USE_DEPRECATED_PYTZ: bool # Language code for this installation. All choices can be found here: # http://www.i18nguy.com/unicode/language-identifiers.html diff --git a/django-stubs/db/backends/base/base.pyi b/django-stubs/db/backends/base/base.pyi index be5ee2064..af23b1a90 100644 --- a/django-stubs/db/backends/base/base.pyi +++ b/django-stubs/db/backends/base/base.pyi @@ -24,8 +24,6 @@ _ExecuteWrapper: TypeAlias = Callable[ [Callable[[str, Any, bool, dict[str, Any]], Any], str, Any, bool, dict[str, Any]], Any ] -def timezone_constructor(tzname: str) -> tzinfo: ... - class BaseDatabaseWrapper: data_types: dict[str, str] data_types_suffix: dict[str, str] diff --git a/django-stubs/templatetags/tz.pyi b/django-stubs/templatetags/tz.pyi index a959c5866..2a1a5209d 100644 --- a/django-stubs/templatetags/tz.pyi +++ b/django-stubs/templatetags/tz.pyi @@ -1,9 +1,8 @@ -from datetime import datetime +from datetime import datetime, tzinfo from typing import Any from django.template import Node from django.template.base import FilterExpression, NodeList, Parser, Token -from django.utils.timezone import _TzInfoT register: Any @@ -11,7 +10,7 @@ class datetimeobject(datetime): ... def localtime(value: datetime | str | None) -> Any: ... def utc(value: datetime | str | None) -> Any: ... -def do_timezone(value: datetime | str | None, arg: _TzInfoT | str | None) -> Any: ... +def do_timezone(value: datetime | str | None, arg: tzinfo | str | None) -> Any: ... class LocalTimeNode(Node): nodelist: NodeList diff --git a/django-stubs/utils/dateformat.pyi b/django-stubs/utils/dateformat.pyi index 7846a104e..6e39d8134 100644 --- a/django-stubs/utils/dateformat.pyi +++ b/django-stubs/utils/dateformat.pyi @@ -1,11 +1,9 @@ -from datetime import date +from datetime import date, tzinfo from datetime import datetime as builtin_datetime from datetime import time as builtin_time from re import Pattern from typing import Any, Literal -from django.utils.timezone import _TzInfoT - re_formatchars: Pattern[str] re_escaped: Pattern[str] @@ -14,7 +12,7 @@ class Formatter: class TimeFormat(Formatter): data: builtin_datetime | builtin_time - timezone: _TzInfoT | None + timezone: tzinfo | None def __init__(self, obj: builtin_datetime | builtin_time) -> None: ... def a(self) -> str: ... def A(self) -> str: ... @@ -34,7 +32,7 @@ class TimeFormat(Formatter): class DateFormat(TimeFormat): data: builtin_datetime | date | builtin_time # type: ignore[assignment] - timezone: _TzInfoT | None + timezone: tzinfo | None year_days: Any def __init__(self, obj: builtin_datetime | builtin_time | date) -> None: ... def b(self) -> str: ... diff --git a/django-stubs/utils/timezone.pyi b/django-stubs/utils/timezone.pyi index 650997529..4b86a38bb 100644 --- a/django-stubs/utils/timezone.pyi +++ b/django-stubs/utils/timezone.pyi @@ -3,32 +3,22 @@ from datetime import date, datetime, time, timedelta, timezone, tzinfo from types import TracebackType from typing import Any, Literal, overload -import pytz -from pytz import BaseTzInfo -from typing_extensions import TypeAlias, TypeGuard - -_PytzTzInfoT: TypeAlias = pytz.tzinfo.BaseTzInfo | pytz._FixedOffset - -_TzInfoT: TypeAlias = _PytzTzInfoT | tzinfo +import zoneinfo utc: Any def get_fixed_timezone(offset: timedelta | int) -> timezone: ... -def get_default_timezone() -> BaseTzInfo: ... +def get_default_timezone() -> zoneinfo.ZoneInfo: ... def get_default_timezone_name() -> str: ... - -# Strictly speaking, it is possible to activate() a non-pytz timezone, -# in which case BaseTzInfo is incorrect. However, this is unlikely, -# so we use it anyway, to keep things ergonomic for most users. -def get_current_timezone() -> BaseTzInfo: ... +def get_current_timezone() -> zoneinfo.ZoneInfo: ... def get_current_timezone_name() -> str: ... -def activate(timezone: _TzInfoT | str) -> None: ... +def activate(timezone: tzinfo | str) -> None: ... def deactivate() -> None: ... class override(ContextDecorator): - timezone: str | _TzInfoT | None - old_timezone: _TzInfoT | None - def __init__(self, timezone: str | _TzInfoT | None) -> None: ... + timezone: str | tzinfo | None + old_timezone: tzinfo | None + def __init__(self, timezone: str | tzinfo | None) -> None: ... def __enter__(self) -> None: ... def __exit__( self, @@ -37,8 +27,8 @@ class override(ContextDecorator): exc_tb: TracebackType | None, ) -> None: ... -def localtime(value: datetime | None = ..., timezone: _TzInfoT | None = ...) -> datetime: ... -def localdate(value: datetime | None = ..., timezone: _TzInfoT | None = ...) -> date: ... +def localtime(value: datetime | None = ..., timezone: tzinfo | None = ...) -> datetime: ... +def localdate(value: datetime | None = ..., timezone: tzinfo | None = ...) -> date: ... def now() -> datetime: ... @overload def is_aware(value: time) -> Literal[False]: ... @@ -48,6 +38,5 @@ def is_aware(value: datetime) -> bool: ... def is_naive(value: time) -> Literal[True]: ... @overload def is_naive(value: datetime) -> bool: ... -def make_aware(value: datetime, timezone: _TzInfoT | None = ..., is_dst: bool | None = ...) -> datetime: ... -def make_naive(value: datetime, timezone: _TzInfoT | None = ...) -> datetime: ... -def _is_pytz_zone(tz: _TzInfoT) -> TypeGuard[_PytzTzInfoT]: ... +def make_aware(value: datetime, timezone: tzinfo | None = ..., is_dst: bool | None = ...) -> datetime: ... +def make_naive(value: datetime, timezone: tzinfo | None = ...) -> datetime: ... diff --git a/scripts/stubtest/allowlist_todo_django50.txt b/scripts/stubtest/allowlist_todo_django50.txt index 3058855bc..0d3647d96 100644 --- a/scripts/stubtest/allowlist_todo_django50.txt +++ b/scripts/stubtest/allowlist_todo_django50.txt @@ -5,7 +5,6 @@ django.conf.FORMS_URLFIELD_ASSUME_HTTPS_DEPRECATED_MSG django.conf.global_settings.CSRF_COOKIE_MASKED django.conf.global_settings.FORMS_URLFIELD_ASSUME_HTTPS -django.conf.global_settings.USE_DEPRECATED_PYTZ django.conf.global_settings.USE_L10N django.contrib.admin.AdminSite.get_model_admin django.contrib.admin.AllValuesFieldListFilter.get_facet_counts @@ -109,7 +108,6 @@ django.core.handlers.asgi.get_script_prefix django.core.management.commands.inspectdb.Command.normalize_table_name django.core.management.commands.optimizemigration django.core.serializers.base.PickleSerializer -django.db.backends.base.base.timezone_constructor django.db.backends.base.features.BaseDatabaseFeatures.delete_can_self_reference_subquery django.db.backends.base.features.BaseDatabaseFeatures.insert_test_table_with_defaults django.db.backends.base.features.BaseDatabaseFeatures.supports_default_keyword_in_bulk_insert diff --git a/setup.py b/setup.py index 49f31a44e..ef37e0432 100644 --- a/setup.py +++ b/setup.py @@ -26,7 +26,6 @@ def find_stub_files(name: str) -> List[str]: "tomli; python_version < '3.11'", # Types: "typing-extensions", - "types-pytz", "types-PyYAML", ]