[tool.poetry]
name = "nonebot2"
version = "2.2.1"
description = "An asynchronous python bot framework."
authors = ["yanyongyu <yyy@nonebot.dev>"]
license = "MIT"
readme = "README.md"
homepage = "https://nonebot.dev/"
repository = "https://github.com/nonebot/nonebot2"
documentation = "https://nonebot.dev/"
keywords = ["bot", "qq", "qqbot", "mirai", "coolq"]
classifiers = [
  "Development Status :: 5 - Production/Stable",
  "Framework :: Robot Framework",
  "Framework :: Robot Framework :: Library",
  "Operating System :: OS Independent",
  "Programming Language :: Python :: 3",
]
packages = [{ include = "nonebot" }]
include = ["nonebot/py.typed"]

[tool.poetry.urls]
"Bug Tracker" = "https://github.com/nonebot/nonebot2/issues"
"Changelog" = "https://nonebot.dev/changelog"
"Funding" = "https://afdian.net/@nonebot"

[tool.poetry.dependencies]
python = "^3.9"
yarl = "^1.7.2"
pygtrie = "^2.4.1"
loguru = ">=0.6.0,<1.0.0"
python-dotenv = ">=0.21.0,<2.0.0"
typing-extensions = ">=4.4.0,<5.0.0"
pydantic = ">=1.10.0,<3.0.0,!=2.5.0,!=2.5.1"
tomli = { version = "^2.0.1", python = "<3.11" }

websockets = { version = ">=10.0", optional = true }
Quart = { version = ">=0.18.0,<1.0.0", optional = true }
fastapi = { version = ">=0.93.0,<1.0.0", optional = true }
aiohttp = { version = "^3.9.0b0", extras = ["speedups"], optional = true }
httpx = { version = ">=0.20.0,<1.0.0", extras = ["http2"], optional = true }
uvicorn = { version = ">=0.20.0,<1.0.0", extras = [
  "standard",
], optional = true }

[tool.poetry.group.dev.dependencies]
ruff = "^0.3.0"
isort = "^5.10.1"
black = "^24.0.0"
nonemoji = "^0.1.2"
pre-commit = "^3.0.0"

[tool.poetry.group.test.dependencies]
nonebot-test = { path = "./envs/test/", develop = false }

[tool.poetry.group.docs.dependencies]
nb-autodoc = "^1.0.0a5"

[tool.poetry.extras]
httpx = ["httpx"]
aiohttp = ["aiohttp"]
websockets = ["websockets"]
quart = ["quart", "uvicorn"]
fastapi = ["fastapi", "uvicorn"]
all = ["fastapi", "quart", "aiohttp", "httpx", "websockets", "uvicorn"]

[tool.pytest.ini_options]
asyncio_mode = "strict"
addopts = "--cov=nonebot --cov-report=term-missing"
filterwarnings = ["error", "ignore::DeprecationWarning"]

[tool.black]
line-length = 88
target-version = ["py39", "py310", "py311", "py312"]
include = '\.pyi?$'
extend-exclude = '''
'''

[tool.isort]
profile = "black"
line_length = 88
length_sort = true
skip_gitignore = true
force_sort_within_sections = true
src_paths = ["nonebot", "tests"]
extra_standard_library = ["typing_extensions"]

[tool.ruff]
line-length = 88
target-version = "py39"

[tool.ruff.lint]
select = [
  "F",     # Pyflakes
  "W",     # pycodestyle warnings
  "E",     # pycodestyle errors
  "UP",    # pyupgrade
  "ASYNC", # flake8-async
  "C4",    # flake8-comprehensions
  "T10",   # flake8-debugger
  "T20",   # flake8-print
  "PYI",   # flake8-pyi
  "PT",    # flake8-pytest-style
  "Q",     # flake8-quotes
  "RUF",   # Ruff-specific rules
]
ignore = [
  "E402",   # module-import-not-at-top-of-file
  "UP037",  # quoted-annotation
  "RUF001", # ambiguous-unicode-character-string
  "RUF002", # ambiguous-unicode-character-docstring
  "RUF003", # ambiguous-unicode-character-comment
]

[tool.ruff.lint.flake8-pytest-style]
fixture-parentheses = false
mark-parentheses = false

[tool.pyright]
pythonVersion = "3.9"
pythonPlatform = "All"
defineConstant = { PYDANTIC_V2 = true }
executionEnvironments = [
  { root = "./tests", extraPaths = [
    "./",
  ] },
  { root = "./" },
]

typeCheckingMode = "standard"
reportShadowedImports = false
disableBytesTypePromotions = true

[build-system]
requires = ["poetry_core>=1.0.0"]
build-backend = "poetry.core.masonry.api"