# 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]
build-backend = "maturin"
requires = ["maturin>=1.0,<2.0"]

[project]
classifiers = [
  "Programming Language :: Rust",
  "Programming Language :: Python :: Implementation :: CPython",
]
description = "Apache OpenDAL™ Python Binding"
license = "Apache-2.0"
license-files = ["LICENSE", "LICENSE-MPL-2.0.txt", "NOTICE"]
name = "opendal"
readme = "README.md"
requires-python = ">=3.10"

dynamic = ['version']

[project.urls]
Documentation = "https://opendal.apache.org/docs/python/index.html"
Homepage = "https://opendal.apache.org/"
Repository = "https://github.com/apache/opendal"

[dependency-groups]
benchmark = [
  "boto3>=1.37.9",
  "boto3-stubs[essential]>=1.37.9",
  "gevent>=24.11.1",
  "greenify>=0.4.3",
  "greenlet>=3.1.1",
  "pydantic>=2.10.6",
]
dev = ["maturin>=1.8.2"]
docs = [
  "myst-parser>=4.0.1",
  "nbconvert",
  "numpydoc>=1.9.0",
  "pydata-sphinx-theme>=0.16.1,<0.21",
  "sphinx>=8.1,<9",
  "sphinx-autobuild>=2024.10.3",
  "sphinx-copybutton>=0.5.2",
  "sphinx-design>=0.6.1",
]
lint = ["ruff>=0.9.10", "ty>=0.0.51"]
test = [
  "pytest>=8.3.5",
  "pytest-asyncio>=0.25.3",
  "python-dotenv>=1.0.1",
  "pydantic-settings>=2.8.1",
]

[tool.maturin]
features = ["pyo3/extension-module"]
module-name = "opendal._opendal"
python-source = "python"

[tool.ty.src]
include = ["python/opendal"]

[tool.uv]
cache-keys = [
  { file = "pyproject.toml" },
  { file = "Cargo.toml" },
  { file = "src/**/*.rs" },
  { file = "../../core/**/*.rs" },
]
package = false
