aiogram/pyproject.toml

313 lines
7.4 KiB
TOML
Raw Permalink Normal View History

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
2019-11-15 12:18:21 +02:00
name = "aiogram"
description = 'Modern and fully asynchronous framework for Telegram Bot API'
readme = "README.rst"
requires-python = ">=3.10,<3.15"
license = "MIT"
2021-10-11 01:26:41 +03:00
authors = [
{ name = "Alex Root Junior", email = "jroot.junior@gmail.com" },
2021-10-11 01:26:41 +03:00
]
maintainers = [
{ name = "Alex Root Junior", email = "jroot.junior@gmail.com" },
2021-10-11 01:26:41 +03:00
]
2020-01-22 00:38:36 +02:00
keywords = [
"telegram",
"bot",
"api",
"framework",
"wrapper",
"asyncio",
2020-01-22 00:38:36 +02:00
]
2019-11-18 18:05:47 +02:00
classifiers = [
2021-12-12 19:06:29 +02:00
"License :: OSI Approved :: MIT License",
2023-08-02 21:32:15 +03:00
"Development Status :: 5 - Production/Stable",
"Environment :: Console",
"Framework :: AsyncIO",
2021-12-12 19:06:29 +02:00
"Typing :: Typed",
"Intended Audience :: Developers",
"Intended Audience :: System Administrators",
2021-10-06 22:59:23 +03:00
"Programming Language :: Python :: 3.10",
2022-10-26 22:22:44 +03:00
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: Implementation :: PyPy",
"Topic :: Software Development :: Libraries :: Application Frameworks",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Communications :: Chat",
2019-11-18 18:05:47 +02:00
]
dependencies = [
"magic-filter>=1.0.12,<1.1",
"aiohttp>=3.9.0,<3.14",
"pydantic>=2.4.1,<2.13",
2025-12-02 20:01:10 +02:00
"aiofiles>=23.2.1,<26.0",
2023-07-28 21:54:09 +03:00
"certifi>=2023.7.22",
"typing-extensions>=4.7.0,<=5.0",
]
dynamic = ["version"]
[tool.hatch.version]
path = "aiogram/__meta__.py"
[project.optional-dependencies]
fast = [
"uvloop>=0.17.0; (sys_platform == 'darwin' or sys_platform == 'linux') and platform_python_implementation != 'PyPy' and python_version < '3.13'",
"uvloop>=0.21.0; (sys_platform == 'darwin' or sys_platform == 'linux') and platform_python_implementation != 'PyPy' and python_version >= '3.13'",
"aiodns>=3.0.0",
]
redis = [
2025-12-02 20:01:10 +02:00
"redis[hiredis]>=6.2.0,<8",
]
mongo = [
"motor>=3.3.2,<3.8",
"pymongo>4.5,<4.16",
]
proxy = [
"aiohttp-socks~=0.10.1",
]
i18n = [
"Babel>=2.13.0,<3",
]
2023-08-16 22:00:11 +03:00
cli = [
2024-08-17 17:00:10 +03:00
"aiogram-cli>=1.1.0,<2.0.0",
2023-08-16 22:00:11 +03:00
]
signature = [
EOL of Py3.9 (#1726) * Drop py3.9 and pypy3.9 Add pypy3.11 (testing) into `tests.yml` Remove py3.9 from matrix in `tests.yml` Refactor not auto-gen code to be compatible with py3.10+, droping ugly 3.9 annotation. Replace some `from typing` imports to `from collections.abc`, due to deprecation Add `from __future__ import annotations` and `if TYPE_CHECKING:` where possible Add some `noqa` to calm down Ruff in some places, if Ruff will be used as default linting+formatting tool in future Replace some relative imports to absolute Sort `__all__` tuples in `__init__.py` and some other `.py` files Sort `__slots__` tuples in classes Split raises into `msg` and `raise` (`EM101`, `EM102`) to not duplicate error message in the traceback Add `Self` from `typing_extenstion` where possible Resolve typing problem in `aiogram/filters/command.py:18` Concatenate nested `if` statements Convert `HandlerContainer` into a dataclass in `aiogram/fsm/scene.py` Bump tests docker-compose.yml `redis:6-alpine` -> `redis:8-alpine` Bump tests docker-compose.yml `mongo:7.0.6` -> `mongo:8.0.14` Bump pre-commit-config `black==24.4.2` -> `black==25.9.0` Bump pre-commit-config `ruff==0.5.1` -> `ruff==0.13.3` Update Makefile lint for ruff to show fixes Add `make outdated` into Makefile Use `pathlib` instead of `os.path` Bump `redis[hiredis]>=5.0.1,<5.3.0` -> `redis[hiredis]>=6.2.0,<7` Bump `cryptography>=43.0.0` -> `cryptography>=46.0.0` due to security reasons Bump `pytz~=2023.3` -> `pytz~=2025.2` Bump `pycryptodomex~=3.19.0` -> `pycryptodomex~=3.23.0` due to security reasons Bump linting and formatting tools * Add `1726.removal.rst` * Update aiogram/utils/dataclass.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update aiogram/filters/callback_data.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update 1726.removal.rst * Remove `outdated` from Makefile * Add `__slots__` to `HandlerContainer` * Remove unused imports * Add `@dataclass` with `slots=True` to `HandlerContainer` --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-06 19:19:23 +03:00
"cryptography>=46.0.0",
]
docs = [
2024-09-08 15:53:44 +03:00
"Sphinx~=8.0.2",
"sphinx-intl~=2.2.0",
"sphinx-autobuild~=2024.9.3",
2023-07-28 21:54:09 +03:00
"sphinx-copybutton~=0.5.2",
2024-09-08 15:53:44 +03:00
"furo~=2024.8.6",
"Sphinx-Substitution-Extensions~=2024.8.6",
"towncrier~=24.8.0",
"pygments~=2.18.0",
"pymdown-extensions~=10.3",
2023-07-28 21:54:09 +03:00
"markdown-include~=0.8.1",
"sphinxcontrib-towncrier~=0.4.0a0",
]
[dependency-groups]
dev = [
"ruff~=0.14",
"mypy==1.10.1",
"toml~=0.10.2",
"pre-commit~=4.3",
"packaging~=25.0",
"motor-types==1.0.0b4",
]
test = [
"pytest==9.0.1",
"pytest-html==4.1.1",
"pytest-mock==3.15.1",
"pytest-mypy==1.0.1",
"pytest-cov==7.0.0",
"pytest-aiohttp==1.1.0",
"aresponses==3.0.0",
"pytz==2025.2",
"pycryptodomex==3.23.0",
]
[project.urls]
Homepage = "https://aiogram.dev/"
Documentation = "https://docs.aiogram.dev/"
Repository = "https://github.com/aiogram/aiogram/"
[tool.ruff]
line-length = 99
src = ["aiogram", "tests"]
exclude = [
".git",
"build",
"dist",
"venv",
".venv",
"docs",
"tests",
"dev",
"scripts",
"*.egg-info",
]
[tool.ruff.lint]
select = [
# "C", # TODO: mccabe - code complecity
"A", # flake8-annotations
"B", # flake8-bugbear
"C4", # flake8-comprehensions
"DTZ", # flake8-datetimez
"E", # pycodestyle errors
"F", # pyflakes
"I", # isort
"PERF", # perflint
"PL", # pylint
"Q", # flake8-quotes
"RET", # flake8-return
"SIM", # flake8-simplify
"T10", # flake8-debugger
"T20", # flake8-print
"UP", # pyupgrade
]
ignore = [
"F401", # unused-import (handled by other tools)
"A002", # builtin-argument-shadowing (common in API: type, id, format, etc.)
"A005", # stdlib-module-shadowing (Module `types` shadows a Python standard-library module)
"B008", # function-call-in-default-argument (Pydantic Field() defaults)
"PLC0415", # import-outside-top-level (needed for circular imports)
"PLC1901", # compare-to-empty-string (sometimes more explicit is better)
"PLR0904", # too-many-public-methods (Bot class has many API methods)
"PLR0911", # too-many-return-statements
"PLR0912", # too-many-branches
"PLR0913", # too-many-arguments (Telegram API methods have many params)
"PLR0915", # too-many-statements
"PLR0917", # too-many-positional-arguments (Telegram API design)
"PLR6301", # no-self-use (sometimes methods are intentionally not static)
"PLW2901", # redefined-loop-name (intentional pattern in this codebase)
"PLW3201", # bad-dunder-method-name (custom dunders for framework design)
]
[tool.ruff.lint.isort]
known-first-party = [
"aiogram",
"finite_state_machine",
"handlers",
"routes",
]
[tool.ruff.lint.per-file-ignores]
"aiogram/client/bot.py" = ["E501"]
"aiogram/types/*" = ["E501"]
"aiogram/methods/*" = ["E501"]
"aiogram/enums/*" = ["E501"]
"tests/**" = [
"PLR0124",
"PLR2004",
"DTZ005",
"DTZ006",
"A001",
"A004",
"B018",
"B020",
"B904",
"E501",
"F821",
"UP",
]
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = [
"tests",
]
2023-11-16 12:37:15 +02:00
filterwarnings = [
"error",
"ignore::pytest.PytestUnraisableExceptionWarning",
# Remove when uvloop fixes the issue
# https://github.com/MagicStack/uvloop/issues/703
# https://github.com/MagicStack/uvloop/pull/705
"ignore:.*asyncio.iscoroutinefunction.*:DeprecationWarning"
2023-11-16 12:37:15 +02:00
]
[tool.coverage.run]
branch = false
parallel = true
omit = [
"aiogram/__meta__.py",
"aiogram/dispatcher/middlewares/data.py"
]
[tool.coverage.report]
exclude_lines = [
"if __name__ == .__main__.:",
"pragma: no cover",
"if TYPE_CHECKING:",
"@abstractmethod",
"@overload",
"if sys.version_info",
"except ImportError:"
]
[tool.mypy]
plugins = "pydantic.mypy"
EOL of Py3.9 (#1726) * Drop py3.9 and pypy3.9 Add pypy3.11 (testing) into `tests.yml` Remove py3.9 from matrix in `tests.yml` Refactor not auto-gen code to be compatible with py3.10+, droping ugly 3.9 annotation. Replace some `from typing` imports to `from collections.abc`, due to deprecation Add `from __future__ import annotations` and `if TYPE_CHECKING:` where possible Add some `noqa` to calm down Ruff in some places, if Ruff will be used as default linting+formatting tool in future Replace some relative imports to absolute Sort `__all__` tuples in `__init__.py` and some other `.py` files Sort `__slots__` tuples in classes Split raises into `msg` and `raise` (`EM101`, `EM102`) to not duplicate error message in the traceback Add `Self` from `typing_extenstion` where possible Resolve typing problem in `aiogram/filters/command.py:18` Concatenate nested `if` statements Convert `HandlerContainer` into a dataclass in `aiogram/fsm/scene.py` Bump tests docker-compose.yml `redis:6-alpine` -> `redis:8-alpine` Bump tests docker-compose.yml `mongo:7.0.6` -> `mongo:8.0.14` Bump pre-commit-config `black==24.4.2` -> `black==25.9.0` Bump pre-commit-config `ruff==0.5.1` -> `ruff==0.13.3` Update Makefile lint for ruff to show fixes Add `make outdated` into Makefile Use `pathlib` instead of `os.path` Bump `redis[hiredis]>=5.0.1,<5.3.0` -> `redis[hiredis]>=6.2.0,<7` Bump `cryptography>=43.0.0` -> `cryptography>=46.0.0` due to security reasons Bump `pytz~=2023.3` -> `pytz~=2025.2` Bump `pycryptodomex~=3.19.0` -> `pycryptodomex~=3.23.0` due to security reasons Bump linting and formatting tools * Add `1726.removal.rst` * Update aiogram/utils/dataclass.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update aiogram/filters/callback_data.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update 1726.removal.rst * Remove `outdated` from Makefile * Add `__slots__` to `HandlerContainer` * Remove unused imports * Add `@dataclass` with `slots=True` to `HandlerContainer` --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-06 19:19:23 +03:00
python_version = "3.10"
show_error_codes = true
show_error_context = true
pretty = true
ignore_missing_imports = false
warn_unused_configs = true
disallow_subclassing_any = true
disallow_any_generics = true
disallow_untyped_calls = true
disallow_untyped_defs = true
disallow_incomplete_defs = true
check_untyped_defs = true
disallow_untyped_decorators = true
no_implicit_optional = true
warn_redundant_casts = true
warn_unused_ignores = true
warn_return_any = true
follow_imports_for_stubs = true
namespace_packages = true
show_absolute_path = true
[[tool.mypy.overrides]]
module = [
"aiofiles",
"async_lru",
"uvloop",
"redis.*",
"babel.*",
"aiohttp_socks.*",
]
ignore_missing_imports = true
disallow_untyped_defs = true
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
line-ending = "auto"
2019-11-15 12:18:21 +02:00
[tool.towncrier]
package = "aiogram"
filename = "CHANGES.rst"
directory = "CHANGES/"
template = "CHANGES/.template.rst.jinja2"
2021-08-03 23:50:10 +03:00
issue_format = "`#{issue} <https://github.com/aiogram/aiogram/issues/{issue}>`_"
ignore = [
".template.rst.jinja2",
]
2021-08-03 23:50:10 +03:00
[[tool.towncrier.section]]
path = ""
[[tool.towncrier.type]]
directory = "feature"
name = "Features"
showcontent = true
[[tool.towncrier.type]]
directory = "bugfix"
name = "Bugfixes"
showcontent = true
[[tool.towncrier.type]]
directory = "doc"
name = "Improved Documentation"
showcontent = true
[[tool.towncrier.type]]
directory = "removal"
name = "Deprecations and Removals"
showcontent = true
[[tool.towncrier.type]]
directory = "misc"
name = "Misc"
showcontent = true