diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index fc5b7543..b7d1b8aa 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -10,7 +10,7 @@ jobs: build: uses: bryanforbes/python-workflows/.github/workflows/reusable-unit-tests.yml@master with: - python_versions: '["3.10"]' + python_versions: '["3.11"]' coverage: true pytest_args: '--block-network --record-mode=none -p no:sugar' secrets: diff --git a/alembic/versions/ffc7403e056d_switch_to_timestamp_with_tz_for_next_.py b/alembic/versions/ffc7403e056d_switch_to_timestamp_with_tz_for_next_.py index c4612fa7..348133cb 100644 --- a/alembic/versions/ffc7403e056d_switch_to_timestamp_with_tz_for_next_.py +++ b/alembic/versions/ffc7403e056d_switch_to_timestamp_with_tz_for_next_.py @@ -48,7 +48,7 @@ def upgrade(): op.execute( daily_breads_after.update() .filter_by(guild_id=row[0]) - .values({'next_scheduled': row[1].replace(tzinfo=datetime.timezone.utc)}) + .values({'next_scheduled': row[1].replace(tzinfo=datetime.UTC)}) ) diff --git a/erasmus/cogs/admin.py b/erasmus/cogs/admin.py index 89412186..9c3482fc 100644 --- a/erasmus/cogs/admin.py +++ b/erasmus/cogs/admin.py @@ -4,8 +4,8 @@ import textwrap import traceback from contextlib import asynccontextmanager, redirect_stdout -from typing import TYPE_CHECKING, Any, Final -from typing_extensions import Self, override +from typing import TYPE_CHECKING, Any, Final, Self +from typing_extensions import override import discord from botus_receptus import GroupCog, utils diff --git a/erasmus/cogs/bible/bible_lookup.py b/erasmus/cogs/bible/bible_lookup.py index 34f2e1ed..b3b12451 100644 --- a/erasmus/cogs/bible/bible_lookup.py +++ b/erasmus/cogs/bible/bible_lookup.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Self from attrs import frozen from discord import app_commands @@ -8,8 +8,6 @@ from ...utils import AutoCompleter if TYPE_CHECKING: - from typing_extensions import Self - from ...types import Bible diff --git a/erasmus/cogs/bible/daily_bread/daily_bread_preferences_group.py b/erasmus/cogs/bible/daily_bread/daily_bread_preferences_group.py index 3f053734..f1f08f38 100644 --- a/erasmus/cogs/bible/daily_bread/daily_bread_preferences_group.py +++ b/erasmus/cogs/bible/daily_bread/daily_bread_preferences_group.py @@ -1,8 +1,8 @@ from __future__ import annotations from itertools import chain -from typing import TYPE_CHECKING, ClassVar, Final, cast -from typing_extensions import Self, Unpack, override +from typing import TYPE_CHECKING, ClassVar, Final, Self, Unpack, cast +from typing_extensions import override import discord import pendulum diff --git a/erasmus/cogs/confession.py b/erasmus/cogs/confession.py index 26c2b9df..bd7da251 100644 --- a/erasmus/cogs/confession.py +++ b/erasmus/cogs/confession.py @@ -1,8 +1,8 @@ from __future__ import annotations from itertools import pairwise -from typing import TYPE_CHECKING, Final, NamedTuple, cast -from typing_extensions import Self, override +from typing import TYPE_CHECKING, Final, NamedTuple, Self, cast +from typing_extensions import override import discord from attrs import frozen diff --git a/erasmus/config.py b/erasmus/config.py index 1284c33d..123d565b 100644 --- a/erasmus/config.py +++ b/erasmus/config.py @@ -1,12 +1,9 @@ from __future__ import annotations -from typing import TYPE_CHECKING, TypedDict +from typing import NotRequired, TypedDict from botus_receptus import Config as BaseConfig -if TYPE_CHECKING: - from typing_extensions import NotRequired - class ServiceConfig(TypedDict): api_key: NotRequired[str] diff --git a/erasmus/data.py b/erasmus/data.py index f8eb00d4..ec7c231c 100644 --- a/erasmus/data.py +++ b/erasmus/data.py @@ -2,8 +2,8 @@ from enum import Flag, auto from pathlib import Path -from typing import TYPE_CHECKING, Final, TypedDict -from typing_extensions import Self, override +from typing import TYPE_CHECKING, Final, Self, TypedDict +from typing_extensions import override import orjson from attrs import evolve, frozen diff --git a/erasmus/db/types.py b/erasmus/db/types.py index 8cf3a859..aaa68362 100644 --- a/erasmus/db/types.py +++ b/erasmus/db/types.py @@ -1,7 +1,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING -from typing_extensions import Self, override +from typing import TYPE_CHECKING, Self +from typing_extensions import override import pendulum from pendulum.tz.timezone import Timezone as _Timezone diff --git a/erasmus/l10n/__init__.py b/erasmus/l10n/__init__.py index d1219666..ae991cab 100644 --- a/erasmus/l10n/__init__.py +++ b/erasmus/l10n/__init__.py @@ -2,7 +2,7 @@ from contextlib import contextmanager from pathlib import Path -from typing import TYPE_CHECKING, Literal, TypedDict, overload +from typing import TYPE_CHECKING, Literal, NotRequired, TypedDict, Unpack, overload from attrs import define, field, frozen from discord import app_commands @@ -14,7 +14,6 @@ if TYPE_CHECKING: from _typeshed import SupportsItems from collections.abc import Iterator - from typing_extensions import NotRequired, Unpack import discord diff --git a/erasmus/l10n/fluent.py b/erasmus/l10n/fluent.py index 8830f96c..02b54877 100644 --- a/erasmus/l10n/fluent.py +++ b/erasmus/l10n/fluent.py @@ -1,8 +1,8 @@ from __future__ import annotations from datetime import timedelta -from typing import TYPE_CHECKING, ClassVar, Literal, get_args -from typing_extensions import Self, override +from typing import TYPE_CHECKING, ClassVar, Literal, Self, get_args +from typing_extensions import override from attrs import define, field, validators from babel.dates import format_timedelta diff --git a/erasmus/page_source.py b/erasmus/page_source.py index 90dd5f2b..c115be49 100644 --- a/erasmus/page_source.py +++ b/erasmus/page_source.py @@ -4,13 +4,14 @@ from abc import abstractmethod from collections.abc import AsyncIterable, Awaitable, Callable, Iterable, Sequence from typing import ( + NotRequired, ParamSpec, Protocol, TypeAlias, TypedDict, runtime_checkable, ) -from typing_extensions import NotRequired, TypeVar, override +from typing_extensions import TypeVar, override import discord diff --git a/erasmus/services/apibible.py b/erasmus/services/apibible.py index 0629dc99..e3bf7538 100644 --- a/erasmus/services/apibible.py +++ b/erasmus/services/apibible.py @@ -2,8 +2,8 @@ import asyncio import contextlib -from typing import TYPE_CHECKING, Final, Literal, TypedDict -from typing_extensions import Self, override +from typing import TYPE_CHECKING, Final, Literal, Self, TypedDict +from typing_extensions import override import orjson from attrs import field, frozen diff --git a/erasmus/services/base_service.py b/erasmus/services/base_service.py index bb53b024..f5c800e5 100644 --- a/erasmus/services/base_service.py +++ b/erasmus/services/base_service.py @@ -2,14 +2,12 @@ import logging from abc import abstractmethod -from typing import TYPE_CHECKING, Final +from typing import TYPE_CHECKING, Final, Self from attrs import frozen from botus_receptus import re if TYPE_CHECKING: - from typing_extensions import Self - import aiohttp from ..config import ServiceConfig diff --git a/erasmus/ui_pages.py b/erasmus/ui_pages.py index 42422fc0..d8caa80b 100644 --- a/erasmus/ui_pages.py +++ b/erasmus/ui_pages.py @@ -1,8 +1,8 @@ from __future__ import annotations import contextlib -from typing import TYPE_CHECKING, Final, Generic, cast -from typing_extensions import Self, TypeVar, override +from typing import TYPE_CHECKING, Final, Generic, Self, cast +from typing_extensions import TypeVar, override import discord from botus_receptus import utils diff --git a/erasmus/utils.py b/erasmus/utils.py index bb7562e8..a33d3a0e 100644 --- a/erasmus/utils.py +++ b/erasmus/utils.py @@ -1,8 +1,17 @@ from __future__ import annotations from collections import OrderedDict -from typing import TYPE_CHECKING, Final, Generic, Protocol, TypedDict, overload -from typing_extensions import NotRequired, TypeVar, Unpack, override +from typing import ( + TYPE_CHECKING, + Final, + Generic, + NotRequired, + Protocol, + TypedDict, + Unpack, + overload, +) +from typing_extensions import TypeVar, override from attrs import field, frozen from botus_receptus import utils diff --git a/poetry.lock b/poetry.lock index 6a8f1977..251cabe2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -329,7 +329,6 @@ mypy-extensions = ">=0.4.3" packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] @@ -720,9 +719,6 @@ files = [ {file = "coverage-7.3.0.tar.gz", hash = "sha256:49dbb19cdcafc130f597d9e04a29d0a032ceedf729e41b181f51cd170e6ee865"}, ] -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - [package.extras] toml = ["tomli"] @@ -760,20 +756,6 @@ files = [ {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, ] -[[package]] -name = "exceptiongroup" -version = "1.1.3" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, -] - -[package.extras] -test = ["pytest (>=6)"] - [[package]] name = "execnet" version = "2.0.2" @@ -1259,7 +1241,6 @@ files = [ [package.dependencies] mypy-extensions = ">=1.0.0" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = ">=4.1.0" [package.extras] @@ -1581,11 +1562,9 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] @@ -2250,5 +2229,5 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" -python-versions = "^3.10" -content-hash = "f675818c003a3f080133a6bdbabba74dbe4465f5109577303395665d38c4d3fa" +python-versions = "^3.11" +content-hash = "b14358f8b38b9f4c1608a4cce4b2eaf4134be0b77ba7ba87f7109440cb1bb7b9" diff --git a/pyproject.toml b/pyproject.toml index 8aa8ff5b..fd54d3cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ packages = [ ] [tool.poetry.dependencies] -python = "^3.10" +python = "^3.11" alembic = "1.11.3" attrs = "23.1.0" beautifulsoup4 = "4.12.2" @@ -46,7 +46,7 @@ erasmus = 'erasmus.run:main' [tool.black] line-length = 88 -target-version = ["py310"] +target-version = ["py311"] skip-string-normalization = true include = '\.pyi?$' exclude = ''' @@ -82,7 +82,7 @@ select = [ ignore = ["ANN101", "ANN102", "PLR0913", "PLR2004", "PT004", "TRY003"] extend-exclude = [".venv*"] line-length = 88 -target-version = "py310" +target-version = "py311" [tool.ruff.per-file-ignores] "*.pyi" = ["ANN401", "E501", "E701", "E741", "F401", "F403", "F405", "F811", "FBT001", "FBT002", "PGH003"] @@ -118,7 +118,7 @@ stubPath = "./stubs" venvPath = "." venv = ".venv" -pythonVersion = "3.10" +pythonVersion = "3.11" reportUnnecessaryTypeIgnoreComment = "warning" typeCheckingMode = "strict" reportPrivateUsage = "none" diff --git a/stubs/bs4/element.pyi b/stubs/bs4/element.pyi index d80845f0..fba21f62 100644 --- a/stubs/bs4/element.pyi +++ b/stubs/bs4/element.pyi @@ -8,11 +8,12 @@ from typing import ( Literal, NewType, Protocol, + Self, TypeAlias, overload, type_check_only, ) -from typing_extensions import Self, TypeVar +from typing_extensions import TypeVar from . import BeautifulSoup from .builder import TreeBuilder diff --git a/stubs/pendulum/date.pyi b/stubs/pendulum/date.pyi index e4eb3ca9..e887b9ef 100644 --- a/stubs/pendulum/date.pyi +++ b/stubs/pendulum/date.pyi @@ -1,6 +1,5 @@ from datetime import date, timedelta -from typing import Literal, SupportsIndex, overload -from typing_extensions import Self +from typing import Literal, Self, SupportsIndex, overload from .datetime import DateTime from .mixins.default import FormattableMixin diff --git a/stubs/pendulum/datetime.pyi b/stubs/pendulum/datetime.pyi index 1baca2a7..506b9cf1 100644 --- a/stubs/pendulum/datetime.pyi +++ b/stubs/pendulum/datetime.pyi @@ -1,6 +1,5 @@ from datetime import date, datetime, time, timedelta, tzinfo -from typing import ClassVar, Literal, SupportsIndex -from typing_extensions import Self +from typing import ClassVar, Literal, Self, SupportsIndex from .date import Date from .period import Period diff --git a/stubs/pendulum/duration.pyi b/stubs/pendulum/duration.pyi index 6eb7c916..018af7fc 100644 --- a/stubs/pendulum/duration.pyi +++ b/stubs/pendulum/duration.pyi @@ -1,6 +1,5 @@ from datetime import timedelta -from typing import overload -from typing_extensions import Self +from typing import Self, overload class Duration(timedelta): def __new__( diff --git a/stubs/pendulum/period.pyi b/stubs/pendulum/period.pyi index 973e2919..f4646215 100644 --- a/stubs/pendulum/period.pyi +++ b/stubs/pendulum/period.pyi @@ -1,7 +1,6 @@ from collections.abc import Iterator from datetime import date, timedelta -from typing import overload -from typing_extensions import Self +from typing import Self, overload from .duration import Duration diff --git a/stubs/pendulum/time.pyi b/stubs/pendulum/time.pyi index 1a0e8101..5828c45b 100644 --- a/stubs/pendulum/time.pyi +++ b/stubs/pendulum/time.pyi @@ -1,6 +1,5 @@ from datetime import time, timedelta, tzinfo -from typing import Literal, overload -from typing_extensions import Self +from typing import Literal, Self, overload from .duration import AbsoluteDuration, Duration from .mixins.default import FormattableMixin diff --git a/tests/db/test_types.py b/tests/db/test_types.py index cbfc2273..f5c3667d 100644 --- a/tests/db/test_types.py +++ b/tests/db/test_types.py @@ -1,6 +1,6 @@ from __future__ import annotations -from datetime import datetime, time, timezone +from datetime import UTC, datetime, time import pendulum import pytest @@ -67,7 +67,7 @@ def test_process_bind_param( [ ( True, - datetime(2020, 6, 26, 5, tzinfo=timezone.utc), + datetime(2020, 6, 26, 5, tzinfo=UTC), pendulum.datetime(2020, 6, 26, 5, tz=pendulum.UTC), ), ( @@ -144,7 +144,7 @@ def test_process_bind_param( 'result_value,expected', [ ( - time(5, 30, 1, 2, tzinfo=timezone.utc), + time(5, 30, 1, 2, tzinfo=UTC), pendulum.Time(5, 30, 1, 2, tzinfo=None), ), (None, None), diff --git a/tests/test_service_manager.py b/tests/test_service_manager.py index 9bcb3a7a..a2178018 100644 --- a/tests/test_service_manager.py +++ b/tests/test_service_manager.py @@ -1,7 +1,7 @@ from __future__ import annotations import asyncio -from typing import TYPE_CHECKING, Any, cast +from typing import TYPE_CHECKING, Any, Self, cast import pytest from attrs import define, field @@ -15,7 +15,6 @@ from erasmus.service_manager import ServiceManager if TYPE_CHECKING: - from typing_extensions import Self from unittest.mock import AsyncMock, MagicMock from erasmus.types import Bible, Service diff --git a/tests/types.py b/tests/types.py index f5ed9ef8..07e3a9a7 100644 --- a/tests/types.py +++ b/tests/types.py @@ -1,11 +1,18 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any, Generic, Literal, Protocol, overload +from typing import ( + TYPE_CHECKING, + Any, + Generic, + Literal, + LiteralString, + Protocol, + overload, +) from typing_extensions import TypeVar if TYPE_CHECKING: from collections.abc import Callable, Iterable, Mapping - from typing_extensions import LiteralString from unittest import mock _T = TypeVar('_T', infer_variance=True)