content: [build-system]
  build-backend = "hatchling.build"
  
  requires = [ "hatchling" ]
  
  [project]
  name = "telegram-wallet-pay"
  description = "Async client for Telegram Wallet Pay API"
  readme = "README.md"
  keywords = [
    "API",
    "async",
    "Pay",
    "Telegram",
    "Wallet",
  ]
  license = "MIT"
  maintainers = [
    { name = "Oleg Abramov", email = "oleg@trueweb.app" },
  ]
  authors = [
    { name = "Oleg Abramov", email = "oleg@trueweb.app" },
  ]
  requires-python = ">=3.9"
  classifiers = [
    "Development Status :: 4 - Beta",
    "Framework :: AsyncIO",
    "Framework :: Pydantic",
    "Intended Audience :: Customer Service",
    "Intended Audience :: Financial and Insurance Industry",
    "License :: OSI Approved :: MIT License",
    "Operating System :: MacOS",
    "Operating System :: Microsoft :: Windows",
    "Operating System :: POSIX :: Linux",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3 :: Only",
    "Programming Language :: Python :: 3.9",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: Implementation :: CPython",
    "Programming Language :: Python :: Implementation :: PyPy",
    "Topic :: Software Development :: Libraries :: Application Frameworks",
    "Typing :: Typed",
  ]
  
  dynamic = [ "version" ]
  dependencies = [
    "aiohttp>=3.8,<4",
    "certifi>=2023",
    "pydantic>=2.4,<3",
  ]
  
  optional-dependencies.dev = [
    "aiogram>=3.6,<4",
    "fastapi-slim>=0.111,<1",
    "httpx>=0.27,<1",
    "mypy>=1,<2",
    "pre-commit>=3,<5",
    "ruff>=0,<1",
    "uvicorn>=0.29,<1",
  ]
  optional-dependencies.test = [
    "aresponses>=3,<4",
    "coverage>=7,<8",
    "fastapi-slim>=0.111,<1",
    "httpx>=0.27,<1",
    "pytest>=8,<9",
    "pytest-aiohttp>=1,<2",
    "pytest-asyncio>=0,<2",
    "pytest-cov>=5,<8",
  ]
  urls.Documentation = "https://docs.wallet.tg/pay/"
  urls.Repository = "https://github.com/Olegt0rr/TelegramWalletPay"
  
  [tool.hatch.version]
  path = "telegram_wallet_pay/__init__.py"
  
  [tool.hatch.build.targets.sdist]
  exclude = [
    "/.github",
  ]
  
  [tool.hatch.envs.default]
  features = [
    "dev",
    "test",
  ]
  post-install-commands = [
    "pre-commit install",
  ]
  
  [tool.hatch.envs.default.scripts]
  lint = [
    "ruff check telegram_wallet_pay --fix",
  ]
  
  [tool.hatch.envs.dev]
  python = "3.9"
  features = [
    "dev",
    "test",
  ]
  
  [[tool.hatch.envs.test.matrix]]
  python = [ "3.9", "310", "311", "312", "313" ]
  
  [tool.ruff]
  # Assume minimal Python version
  target-version = "py39"
  
  # Same as Black.
  line-length = 88
  
  src = [ "app", "tests", "tools" ]
  
  # Exclude a variety of commonly ignored directories.
  exclude = [
    ".bzr",
    ".direnv",
    ".eggs",
    ".git",
    ".hg",
    ".mypy_cache",
    ".nox",
    ".pants.d",
    ".ruff_cache",
    ".svn",
    ".tox",
    ".venv",
    "__pypackages__",
    "_build",
    "buck-out",
    "build",
    "dist",
    "node_modules",
    "venv",
  ]
  
  lint.select = [ "ALL" ]
  lint.ignore = [
    "A003",
    "ANN002",
    "ANN003",
    "B011",
    "D100",
    "D101",
    "D104",
    "D106",
    "D107",
    "D203",
    "D213",
    "DTZ005",
    "FA100",
    "PT015",
    "PT017",
    "RUF001",
    "RUF002",
    "RUF003",
    "S101",
    "TC001",
    "TC002",
  ]
  lint.per-file-ignores."examples/*" = [ "INP001", "T201" ]
  lint.per-file-ignores."tests/*" = [ "ANN401", "D", "FBT001", "INP001", "S101", "SLF001" ]
  lint.fixable = [ "ALL" ]
  lint.unfixable = [  ]
  # Allow unused variables when underscore-prefixed.
  lint.dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
  lint.flake8-type-checking.runtime-evaluated-base-classes = [
    "pydantic.BaseModel",
    "telegram_wallet_pay.schemas._default.DefaultModel",
  ]
  lint.mccabe.max-complexity = 10
  
  [tool.pytest.ini_options]
  asyncio_mode = "auto"
  testpaths = [
    "tests",
  ]
  filterwarnings = [
    "error",
    "ignore::pytest.PytestUnraisableExceptionWarning",
  ]
  
  [tool.coverage.report]
  exclude_lines = [
    "if __name__ == .__main__.:",
    "pragma: no cover",
    "if TYPE_CHECKING:",
    "@abstractmethod",
    "@overload",
  ]
  
  [tool.mypy]
  warn_redundant_casts = true
  warn_unused_ignores = false
  warn_no_return = true
  warn_unreachable = true
  pretty = true
  
  [[tool.mypy.overrides]]
  module = "*.*"
  ignore_missing_imports = true
  
  [[tool.mypy.overrides]]
  module = "tests.*"
  ignore_errors = true
  
  [[tool.mypy.overrides]]
  module = "examples.*"
  ignore_errors = true
  