content: [build-system]
  requires = ["setuptools >= 61.0"]
  build-backend = "setuptools.build_meta"
  
  [project]
  name = "matrix-nio"
  version = "0.25.2"
  description = "A Python Matrix client library, designed according to sans I/O principles."
  authors = [
      { name = "Damir Jelić", email = "poljar@termina.org.uk" },
      { name = "Paarth Shah", email = "mail@shahpaarth.com" }
  ]
  license = { file = "LICENSE.md" }
  readme = "README.md"
  requires-python = ">=3.8.0"
  dependencies = [
      "aiohttp~=3.10",
      "aiofiles~=24.1",
      "h11~=0.14",
      "h2~=4.0",
      "jsonschema~=4.14",
      "unpaddedbase64~=2.1",
      "pycryptodome~=3.10",
      "aiohttp-socks~=0.8"
  ]
  
  [project.optional-dependencies]
  e2e = [
      "atomicwrites~=1.4",
      "cachetools~=5.3",
      "peewee~=3.14",
      "python-olm~=3.2",
  ]
  
  dev = [
      "matrix-nio[e2e]",
      "aioresponses~=0.7",
      "hpack~=4.0",
      "hyperframe~=6.0",
      "hypothesis~=6.8",
      "faker~=8.0",
      "mypy~=1.11",
      "mypy_extensions~=1.0",
      "pre-commit",
      "pytest~=8.2",
      "pytest-asyncio~=0.24",
      "pytest-aiohttp~=0.3",
      "pytest-benchmark~=4.0",
      "pytest-cov~=2.11",
      "pytest-flake8~=1.2",
  ]
  
  # Read the docs specific requirements.
  docs = [
      "matrix-nio[dev]",
      "setuptools>=61.0",
      "sphinx~=7.4",
      "sphinx-autodoc-typehints~=2.1",
      "sphinx_mdinclude>=0.5",
      "sphinx_rtd_theme~=2.0",
  ]
  
  [project.urls]
  Source = "https://github.com/matrix-nio/matrix-nio"
  Documentation = "https://matrix-nio.readthedocs.io/en/latest/"
  
  [tool.ruff]
  # Assume Python 3.8.
  target-version = "py38"
  
  fix = true
  show-fixes = true
  preview = true
  
  [tool.ruff.lint]
  select = [
      "E",     # pycodestyle
      "F",     # Pyflakes
      "I001",  # isort
      "UP",    # pyupgrade
      "ASYNC", # flake8-async
      "C4",    # flake8-comprehensions
      "T10",   # flake8-debugger
      "FA",    # flake8-future-annotations
      "PT",    # flake8-pytest-style
      "RSE",   # flake8-raise
      "PERF",  # Perflint
      "FURB",  # refurb
  ]
  ignore = [
      "E501",  # https://www.flake8rules.com/rules/E501.html - Let `black` handle this.
  ]
  
  # Allow autofix for all enabled rules (when `--fix`) is provided.
  fixable = ["ALL"]
  unfixable = []
  
  # Exclude a variety of commonly ignored directories.
  exclude = [
      ".bzr",
      ".direnv",
      ".eggs",
      ".git",
      ".git-rewrite",
      ".hg",
      ".mypy_cache",
      ".nox",
      ".pants.d",
      ".pytype",
      ".ruff_cache",
      ".svn",
      ".tox",
      ".venv",
      "__pypackages__",
      "_build",
      "buck-out",
      "build",
      "dist",
      "node_modules",
      "venv",
      "venv*",
      "tests"
  ]
  
  [tool.ruff.lint.pyupgrade]
  # Preserve types, even if a file imports `from __future__ import annotations`.
  # Needed for python < 3.10, should be removed afterward.
  keep-runtime-typing = true
  
  [tool.ruff.lint.per-file-ignores]
  "__init__.py" = [
      "F401",
      "F403",
      "I001",
  ]
  [tool.ruff.lint.flake8-pytest-style]
  fixture-parentheses = false
  
  [tool.pytest.ini_options]
  asyncio_default_fixture_loop_scope = "function"
  