# 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 = ["setuptools>=60", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "gremlinpython"
dynamic = ["version"]
description = "Gremlin-Python for Apache TinkerPop"
readme = {file = "README.rst", content-type = "text/x-rst"}
license = {text = "Apache 2"}
maintainers = [{name = "Apache TinkerPop", email = "dev@tinkerpop.apache.org"}]
requires-python = ">=3.10,<3.14"
dependencies = [
    "nest_asyncio",
    "aiohttp>=3.11.0,<4.0.0",
    "aenum>=1.4.5,<4.0.0",
    "isodate>=0.6.0,<1.0.0",
    "boto3",
    "botocore",
    "async-timeout>=4.0.3,<5.0; python_version < \"3.11\""
]
classifiers = [
    "Intended Audience :: Developers",
    "License :: OSI Approved :: Apache Software License",
    "Natural Language :: English",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13"
]

[project.urls]
Homepage = "https://tinkerpop.apache.org"

[project.optional-dependencies]
ujson = ["ujson>=2.0.0"]
test = [
    "pytest>=6.2.5,<8.0.0",
    "radish-bdd==0.18.2",
    "lxml==5.3.0",
    "PyHamcrest>=1.9.0,<3.0.0",
    "PyYAML>=5.3"
]

[tool.pytest.ini_options]
addopts = "--junitxml=./python-reports/TEST-native-python.xml -sv"
norecursedirs = [".*", "build", "dist", "CVS", "_darcs", "{arch}", "*.egg", "lib", "lib64"]
testpaths = ["tests/unit","tests/integration"]

[tool.setuptools.dynamic]
version = {attr = "gremlin_python.__version__"}

[tool.setuptools.package-data]
"*" = ["LICENSE", "NOTICE"]

[tool.setuptools]
packages = [
    "gremlin_python",
    "gremlin_python.driver",
    "gremlin_python.driver.aiohttp",
    "gremlin_python.process",
    "gremlin_python.structure",
    "gremlin_python.structure.io"
]