# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

[build-system]
requires = ["maturin>=1.8.1"]
build-backend = "maturin"

[project]
name = "datafusion"
description = "Build and run queries against data"
readme = "README.md"
license = { file = "LICENSE.txt" }
requires-python = ">=3.10"
keywords = ["datafusion", "dataframe", "rust", "query-engine"]
classifiers = [
    "Development Status :: 2 - Pre-Alpha",
    "Intended Audience :: Developers",
    "License :: OSI Approved :: Apache Software License",
    "License :: OSI Approved",
    "Operating System :: MacOS",
    "Operating System :: Microsoft :: Windows",
    "Operating System :: POSIX :: Linux",
    "Programming Language :: Python :: 3",
    "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",
    "Programming Language :: Python",
    "Programming Language :: Rust",
]
dependencies = [
    "pyarrow>=16.0.0;python_version<'3.14'",
    "pyarrow>=22.0.0;python_version>='3.14'",
    "typing-extensions;python_version<'3.13'"
]
dynamic = ["version"]

[project.urls]
homepage = "https://datafusion.apache.org/python"
documentation = "https://datafusion.apache.org/python"
repository = "https://github.com/apache/datafusion-python"

[tool.isort]
profile = "black"

[tool.maturin]
python-source = "python"
module-name = "datafusion._internal"
include = [{ path = "Cargo.lock", format = "sdist" }]
exclude = [".github/**", "ci/**", ".asf.yaml"]
# Require Cargo.lock is up to date
locked = true
features = ["substrait"]

[tool.pytest.ini_options]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"

# Enable docstring linting using the google style guide
[tool.ruff.lint]
select = ["ALL" ]
ignore = [
    "A001",    # Allow using words like min as variable names
    "A002",    # Allow using words like filter as variable names
    "ANN401",  # Allow Any for wrapper classes
    "COM812",  # Recommended to ignore these rules when using with ruff-format
    "FIX002",  # Allow TODO lines - consider removing at some point
    "FBT001",  # Allow boolean positional args
    "FBT002",  # Allow boolean positional args
    "ISC001",  # Recommended to ignore these rules when using with ruff-format
    "SLF001",  # Allow accessing private members
    "TD002",   # Do not require author names in TODO statements
    "TD003",   # Allow TODO lines
    "PLR0913", # Allow many arguments in function definition
    "PD901",   # Allow variable name df
    "N812",    # Allow importing functions as `F`
    "A005",    # Allow module named io
]

[tool.ruff.lint.pydocstyle]
convention = "google"

[tool.ruff.lint.pycodestyle]
max-doc-length = 88

[tool.ruff.lint.flake8-boolean-trap]
extend-allowed-calls = ["lit", "datafusion.lit"]

# Disable docstring checking for these directories
[tool.ruff.lint.per-file-ignores]
"python/tests/*" = [
    "ANN",
    "ARG",
    "BLE001",
    "D",
    "S101",
    "SLF",
    "PD",
    "PLR2004",
    "PT011",
    "RUF015",
    "S608",
    "PLR0913",
    "PT004",
]
"examples/*" = ["D", "W505", "E501", "T201", "S101", "PLR2004", "ANN001", "ANN202", "INP001", "DTZ007", "RUF015"]
"dev/*" = ["D", "E", "T", "S", "PLR", "C", "SIM", "UP", "EXE", "N817", "ERA001", "ANN001"]
"benchmarks/*" = ["D", "F", "T", "BLE", "FURB", "PLR", "E", "TD", "TRY", "S", "SIM", "EXE", "UP", "ERA001", "ANN001", "INP001"]
"docs/*" = ["D"]
"docs/source/conf.py" = ["ERA001", "ANN001", "INP001"]

[tool.codespell]
skip = [
    "./target",
    "uv.lock",
    "./python/tests/test_functions.py"
]
count = true
ignore-words-list = [
    "ans",
    "IST"
]

[dependency-groups]
dev = [
    "maturin>=1.8.1",
    "numpy>1.25.0;python_version<'3.14'",
    "numpy>=2.3.2;python_version>='3.14'",
    "pre-commit>=4.3.0",
    "pyyaml>=6.0.3",
    "pytest>=7.4.4",
    "pytest-asyncio>=0.23.3",
    "ruff>=0.9.1",
    "toml>=0.10.2",
    "pygithub==2.5.0",
    "codespell==2.4.1",
]
docs = [
    "sphinx>=7.1.2",
    "pydata-sphinx-theme==0.8.0",
    "myst-parser>=3.0.1",
    "jinja2>=3.1.5",
    "ipython>=8.12.3",
    "pandas>=2.0.3",
    "pickleshare>=0.7.5",
    "sphinx-autoapi>=3.4.0",
    "setuptools>=75.3.0",
]
