content: [project]
  name = "aerich"
  dynamic = ["version"]
  description = "A database migrations tool for Tortoise ORM."
  authors = [{name="long2ice", email="long2ice@gmail.com>"}]
  license = "Apache-2.0"
  readme = "README.md"
  keywords = ["migrate", "Tortoise-ORM", "mysql"]
  requires-python = ">=3.9"
  dependencies = [
    "tortoise-orm (>=0.21.0,<1.0.0)",
    "dictdiffer (>=0.9.0,<1.0.0)",
    "asyncclick (>=8.1.7,<9.0.0)",
    "anyio (>=3.6.2,<5.0.0)",
  ]
  
  [project.optional-dependencies]
  toml = [
      "tomli-w (>=1.1.0,<2.0.0); python_version >= '3.11'",
      "tomlkit (>=0.11.4,<1.0.0); python_version < '3.11'",
  ]
  # Need asyncpg or psyncopg for PostgreSQL
  asyncpg = ["asyncpg"]
  psycopg = ["psycopg[pool,binary] (>=3.0.12,<4.0.0)"]
  # Need asyncmy or aiomysql for MySQL
  asyncmy = ["asyncmy>=0.2.9"]
  mysql = ["aiomysql>=0.2.0"]
  
  [project.urls]
  homepage = "https://github.com/tortoise/aerich"
  repository = "https://github.com/tortoise/aerich.git"
  documentation = "https://github.com/tortoise/aerich"
  
  [project.scripts]
  aerich = "aerich.cli:main"
  
  [tool.poetry]
  requires-poetry = ">=2.0"
  packages = [{ include = "aerich" }]
  version = "0.0.0"
  
  [dependency-groups]
  dev = [
      "ruff >=0.9.0",
      "bandit >=1.7.0",
      "mypy >=1.10.0",
      "twine >=6.1.0",
  ]
  test = [
      "pytest >=8.3.0",
      "pytest-mock >=3.14.0",
      "pytest-cov>=7.0.0",
      "tortoise-vector >=0.1.4; python_version >='3.11'",
      "async-timeout >=5.0.1; python_version <'3.11'",
      "pydantic-settings >=2.10.1",
      # required for sha256_password by asyncmy
      "cryptography; python_version >='3.9.0,!=3.9.1'",
  ]
  
  [tool.aerich]
  tortoise_orm = "conftest.tortoise_orm"
  location = "./migrations"
  src_folder = "./."
  
  [build-system]
  requires = ["pdm-backend"]
  build-backend = "pdm.backend"
  
  [tool.pdm]
  version = {source="file", path="aerich/version.py"}
  
  [tool.pdm.build]
  excludes = ["./**/.git", "./**/.*_cache"]
  include = ["CHANGELOG.md", "LICENSE", "README.md"]
  
  [tool.pytest.ini_options]
  anyio_mode = "auto"
  
  [tool.coverage.run]
  branch = true
  source = ["aerich"]
  
  [tool.coverage.report]
  exclude_also = [
      "if TYPE_CHECKING:"
  ]
  
  [tool.mypy]
  pretty = true
  python_version = "3.9"
  check_untyped_defs = true
  warn_unused_ignores = true
  disallow_incomplete_defs = false
  exclude = ["tests/assets", "migrations"]
  
  [[tool.mypy.overrides]]
  module = [
      'dictdiffer.*',
      'orjson',
      'tomlkit',
      'tomli_w',
      'tomli',
  ]
  ignore_missing_imports = true
  
  [tool.ruff]
  line-length = 100
  
  [tool.ruff.lint]
  extend-select = [
      "I",      # https://docs.astral.sh/ruff/rules/#isort-i
      "SIM",    # https://docs.astral.sh/ruff/rules/#flake8-simplify-sim
      "FA",     # https://docs.astral.sh/ruff/rules/#flake8-future-annotations-fa
      "UP",     # https://docs.astral.sh/ruff/rules/#pyupgrade-up
      "RUF100", # https://docs.astral.sh/ruff/rules/#ruff-specific-rules-ruf
  ]
  ignore = ["UP031"] # https://docs.astral.sh/ruff/rules/printf-string-formatting/
  
  [tool.bandit]
  exclude_dirs = ["tests", "conftest.py"]
  