# 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>=0.15,<0.16"]
build-backend = "maturin"

[project]
name = "datafusion"
description = "Build and run queries against data"
readme = "README.md"
license = {file = "LICENSE.txt"}
requires-python = ">=3.6"
keywords = ["datafusion", "dataframe", "rust", "query-engine"]
classifier = [
    "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.7",
    "Programming Language :: Python :: 3.8",
    "Programming Language :: Python :: 3.9",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python",
    "Programming Language :: Rust",
]
dependencies = [
    "pyarrow>=11.0.0",
]

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

[tool.isort]
profile = "black"

[tool.maturin]
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"]
