content: [project]
  authors = [{ name = "Toucan Toco", email = "dev@toucantoco.com" }]
  license = "BSD-3-Clause"
  requires-python = "<3.14,>=3.13"
  name = "weaverbird"
  version = "0.60.1"
  description = "A visual data pipeline builder with various backends"
  keywords = [
      "builder",
      "data",
      "dataviz",
      "mongodb",
      "pandas",
      "pipeline",
      "query",
      "sql",
  ]
  readme = "README.md"
  
  dependencies = ["pydantic<3.0.0,>=2.4.2", "python-dateutil<3.0.0,>=2.8.2"]
  
  [tool.setuptools]
  # FIXME: temporary workaround until https://github.com/pypa/setuptools/issues/4759 is fixed
  license-files = []
  
  [tool.uv]
  package = true
  
  [project.optional-dependencies]
  pandas = ["pandas<3,>=2", "geopandas<2"]
  pypika = ["pypika>=0.48.9"]
  all = ["pandas<3,>=2", "geopandas<2", "pypika>=0.48.9"]
  
  [dependency-groups]
  dev = [
      "pytest-cov<7.1,>=7",
      "pytest-mock<4.0.0,>=3.11.1",
      "pytest-asyncio<2,>=1",
      "toucan-connectors[Redshift,awsathena,google_big_query,mongo,mysql,snowflake]>=10.0.0,<10.1.0",
      "pytest-benchmark<6,>=4",
      "snowflake-sqlalchemy<2.0.0,>=1.6.1",
      "types-python-dateutil<3.0.0,>=2.8.19",
      "pytest<9.0.0,>=7.4.1",
      "pytest-xdist<4.0,>=2.5",
      "mypy<2,>=0.990",
      "docker<8.0.0,>=6.1.3",
      "sqlalchemy<3,>=2",
      "pymysql<2.0.0,>=1.1.0",
      "psycopg2<3.0.0,>=2.9.7",
      "pymongo>=4.2.0",
      "PyYAML<7.0,>=6.0",
      "redshift-connector<3.0.0,>=2.1.3",
      "ruff<0.10,>=0.5.0",
      "pre-commit<5.0,>=3.4",
      "tenacity<10.0.0,>=8.4.2",
  ]
  
  
  [tool.mypy]
  python_version = "3.13"
  files = "src/"
  exclude = "weaverbird/backends/sql_translator"
  plugins = "pydantic.mypy"
  follow_imports = "silent"
  ignore_missing_imports = true
  allow_redefinition = true
  check_untyped_defs = true
  
  [tool.pytest.ini_options]
  pythonpath = "."
  testpaths = "tests"
  markers = ["serial: marks tests as serial (deselect with '-m \"not serial\"')"]
  
  [tool.ruff]
  # a bit longer to allow for some lines which black would not wrap
  line-length = 120
  # Exclude a variety of commonly ignored directories.
  exclude = [".git", ".direnv"]
  # Assume Python 3.13.
  target-version = "py313"
  
  [tool.ruff.lint]
  select = ["E", "F", "UP", "N", "C", "B", "I001", "S"]
  ignore = [
      "S101", # allow use of assert
      "C901", # do not check complexity
      "S311", # allow use of `random` module (non-cyptographic)
      "N815", # allow mixed case (pydantic models)
      "N818", # allow exceptions that do not end with the `Error` suffix
  ]
  
  
  [tool.ruff.lint.flake8-quotes]
  docstring-quotes = "double"
  
  [tool.ruff.lint.pep8-naming]
  # Allow a few decorators to trigger class method treatment.
  classmethod-decorators = [
      "classmethod",
      "pydantic.validator",
      "pydantic.root_validator",
  ]
  # Allow a few extra names
  ignore-names = [
      "PipelineTranslationFailure",
      "REGEXP_LIKE_Translator",
      "REGEXP_CONTAINS_Translator",
  ]
  