content: [project]
  name = "that-depends"
  description = "Simple Dependency Injection framework"
  authors = [
      { name = "Artur Shiriev", email = "me@shiriev.ru" },
  ]
  readme = "README.md"
  requires-python = ">=3.10,<4"
  license = "MIT"
  keywords = ["di", "dependency injector", "ioc-container", "mocks", "python"]
  classifiers = [
      "Programming Language :: Python :: 3.10",
      "Programming Language :: Python :: 3.11",
      "Programming Language :: Python :: 3.12",
      "Programming Language :: Python :: 3.13",
      "Programming Language :: Python :: 3.14",
      "Typing :: Typed",
      "Topic :: Software Development :: Libraries",
  ]
  version = "0"
  
  [project.optional-dependencies]
  fastapi = [
      "fastapi",
  ]
  faststream = [
      "faststream"
  ]
  
  [project.urls]
  repository = "https://github.com/modern-python/that-depends"
  docs = "https://that-depends.readthedocs.io"
  
  [dependency-groups]
  dev = [
      "httpx",
      "pytest",
      "pytest-cov",
      "pytest-asyncio",
      "pytest-repeat",
      "ruff",
      "mypy",
      "typing-extensions",
      "pre-commit",
      # integrations tests
      "litestar",
      "faststream[nats]",
      "mkdocs>=1.6.1",
      "pytest-randomly",
  ]
  
  [build-system]
  requires = ["uv_build"]
  build-backend = "uv_build"
  
  [tool.uv.build-backend]
  module-name = "that_depends"
  module-root = ""
  
  [tool.mypy]
  python_version = "3.10"
  strict = true
  
  [tool.ruff]
  fix = true
  unsafe-fixes = true
  line-length = 120
  target-version = "py310"
  extend-exclude = [
      "docs",
  ]
  
  [tool.ruff.lint]
  select = ["ALL"]
  ignore = [
      "B008", # Do not perform function call `Provide` in argument defaults
      "D100", # ignore missing module docstrings.
      "D105", # ignore missing docstrings in magic methods.
      "S101", # allow asserts
      "TCH", # ignore flake8-type-checking
      "FBT", # allow boolean args
      "D203", # "one-blank-line-before-class" conflicting with D211
      "D213", # "multi-line-summary-second-line" conflicting with D212
      "S311", # Standard pseudo-random generators are not suitable for cryptographic purposes
      "COM812", # flake8-commas "Trailing comma missing"
      "ISC001", # flake8-implicit-str-concat
      "PT028", # Test function has default argument
  ]
  isort.lines-after-imports = 2
  isort.no-lines-before = ["standard-library", "local-folder"]
  per-file-ignores = { "tests/*"= ["D1", "SLF001"]}
  
  [tool.pytest.ini_options]
  addopts = "--cov=. --cov-report term-missing"
  asyncio_mode = "auto"
  asyncio_default_fixture_loop_scope = "function"
  filterwarnings = [
      "ignore::UserWarning",
  ]
  
  [tool.coverage.report]
  exclude_also = ["if typing.TYPE_CHECKING:"]
  