content: [build-system]
  requires = ["hatchling"]
  build-backend = "hatchling.build"
  
  [project]
  name = "smyth"
  dynamic = ["version"]
  description = "Smyth is a versatile tool designed to enhance your AWS Lambda development experience. It is a pure Python tool that allows for easy customization and state persistence, making your Lambda development more efficient and developer-friendly."
  readme = "README.md"
  requires-python = ">=3.10"
  license = "BSD-3-Clause"
  license-files = ["LICENSE.txt"]
  keywords = []
  authors = [{ name = "Mirumee", email = "hello@mirumee.com" }]
  classifiers = [
      "Environment :: Console",
      "Intended Audience :: Developers",
      "Development Status :: 4 - Beta",
      "Programming Language :: Python",
      "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",
      "Topic :: Software Development :: Build Tools",
      "Topic :: Software Development :: Libraries :: Python Modules",
      "Topic :: Internet :: WWW/HTTP :: HTTP Servers",
      "Topic :: Software Development",
  ]
  dependencies = [
      "starlette",
      "uvicorn",
      "aws-lambda-powertools",
      "toml",
      "pydantic",
      "rich",
      "click",
      "asgiref",
      "typer",
      "setproctitle",
  ]
  
  [project.urls]
  Documentation = "https://mirumee.github.io/smyth/"
  Issues = "https://github.com/mirumee/smyth/issues"
  Source = "https://github.com/mirumee/smyth"
  
  [project.optional-dependencies]
  dev = ["ipdb"]
  types = ["mypy>=1.0.0", "pytest", "types-toml", "pytest-asyncio"]
  docs = ["mkdocs-material~=9.0", "termynal"]
  
  [tool.hatch.version]
  path = "src/smyth/__about__.py"
  
  [tool.hatch.build.targets.wheel]
  packages = ["src/smyth"]
  
  # Environment configuration
  
  ## Default environment
  
  [tool.hatch.envs.default]
  features = ["dev", "types", "docs"]
  
  [tool.hatch.envs.default.scripts]
  check = [
      "hatch fmt",
      "hatch test -a -p",
      "hatch test --cover",
      "hatch run types:check",
      "hatch run docs:build",
  ]
  
  ## Types environment
  
  [tool.hatch.envs.types.scripts]
  check = "mypy --install-types --non-interactive {args:src/smyth}"
  
  ## Test environment
  
  [tool.hatch.envs.hatch-test]
  extra-dependencies = [
      "ipdb",
      "anyio",
      "pytest-freezer",
      "pytest-print",
      "pytest-cov",
      "httpx",
      "uvloop>=0.21",
  ]
  extra-args = []
  
  [[tool.hatch.envs.hatch-test.matrix]]
  python = ["3.10", "3.11", "3.12", "3.13"]
  
  ## Docs environment
  
  [tool.hatch.envs.docs.scripts]
  build = "mkdocs build --clean --strict"
  serve = "mkdocs serve --dev-addr localhost:8000"
  deploy = "mkdocs gh-deploy --force"
  
  # Tool configuration
  
  ## Pytest configuration
  
  [tool.pytest.ini_options]
  
  ## Types configuration
  
  [tool.mypy]
  python_version = "3.10"
  files = ["src/**/*.py"]
  exclude = "tests/.*"
  warn_redundant_casts = true
  warn_unused_ignores = true
  disallow_any_generics = true
  check_untyped_defs = true
  no_implicit_reexport = true
  disallow_untyped_defs = true
  strict = true
  disable_error_code = ["import-untyped"]
  
  [[tool.mypy.overrides]]
  module = "setproctitle.*"
  ignore_missing_imports = true
  
  ## Coverage configuration
  
  [tool.coverage.run]
  source_pkgs = ["smyth"]
  branch = true
  parallel = true
  
  [tool.coverage.paths]
  smyth = ["src/smyth"]
  
  [tool.coverage.report]
  exclude_also = [
      "def __repr__",
      "if self.debug:",
      "if settings.DEBUG",
      "raise AssertionError",
      "raise NotImplementedError",
      "if 0:",
      "if __name__ == .__main__.:",
      "if TYPE_CHECKING:",
      "class .*\\bProtocol\\):",
      "@(abc\\.)?abstractmethod",
  ]
  omit = ["*/__about__.py", "*/__main__.py", "*/cli/__init__.py"]
  fail_under = 80
  
  ## Ruff configuration
  
  [tool.ruff]
  line-length = 88
  target-version = "py310"
  
  [tool.ruff.format]
  docstring-code-format = true
  docstring-code-line-length = 80
  
  [tool.ruff.lint]
  select = ["E", "F", "G", "I", "N", "Q", "UP", "C90", "T20", "TID"]
  unfixable = ["UP007"] # typer does not handle PEP604 annotations
  
  [tool.ruff.lint.flake8-tidy-imports]
  ban-relative-imports = "all"
  
  [tool.ruff.lint.mccabe]
  max-complexity = 10
  
  [tool.ruff.lint.isort]
  known-first-party = ["smyth"]
  
  [tool.ruff.lint.flake8-pytest-style]
  fixture-parentheses = false
  mark-parentheses = false
  