# 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.8.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]
kerberos = ["kerberos>=1.3.0,<2.0.0; sys_platform != \"win32\""]
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"
]