# 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.

[metadata]
name = apache-dolphinscheduler
version = attr: pydolphinscheduler.__version__
url = https://dolphinscheduler.apache.org/python/main/index.html
description = pydolphinscheduler is Apache DolphinScheduler Python API.
long_description = file: README.md
long_description_content_type = text/markdown
author = Apache Software Foundation
author_email = dev@dolphinscheduler.apache.org
license = Apache License 2.0
license_files = 
    file: LICENSE
keywords = 
    dolphinscheduler
    workflow
    scheduler
    taskflow
# complete classifier list: http://pypi.python.org/pypi?%3Aaction=list_classifiers
classifiers =
    Development Status :: 4 - Beta
    Environment :: Console
    Intended Audience :: Developers
    License :: OSI Approved :: Apache Software License
    Operating System :: Unix
    Operating System :: POSIX
    Operating System :: Microsoft :: Windows
    Programming Language :: Python
    Programming Language :: Python :: 3.8
    Programming Language :: Python :: 3.9
    Programming Language :: Python :: 3.10
    Programming Language :: Python :: 3.11
    Programming Language :: Python :: 3.12
    Programming Language :: Python :: Implementation :: CPython
    Programming Language :: Python :: Implementation :: PyPy
    Topic :: Software Development :: User Interfaces
project_urls =
    Homepage = https://dolphinscheduler.apache.org/python/main/index.html
    Documentation = https://dolphinscheduler.apache.org/python/main/index.html
    Source = https://github.com/apache/dolphinscheduler-sdk-python
    Issue Tracker = https://github.com/apache/dolphinscheduler-sdk-python/issues
    Twitter = https://twitter.com/dolphinschedule

[options]
python_requires = >=3.8
include_package_data = True
zip_safe = true
platforms = any
package_dir =
    =src
packages =
    find:
install_requires =
    boto3>=1.23.10
    oss2>=2.16.0
    python-gitlab>=2.10.1
    click>=8.0.0
    py4j~=0.10
    ruamel.yaml
    stmdency>=0.0.2
    # 23.0 not support python 3.6
    packaging>=21.3

[options.packages.find]
where=src

[options.package_data]
pydolphinscheduler =
    default_config.yaml
    version_ext

[options.entry_points]
console_scripts =
    pydolphinscheduler = pydolphinscheduler.cli.commands:cli

[options.extras_require]
build =
    build
    setuptools>=42
    wheel
test =
    pytest>=6.2
    freezegun>=1.1
    coverage>=6.1
    pytest-cov>=3.0
    docker>=5.0.3
style =
    black>=22.8
    ruff>=0.3
doc =
    sphinx>=4.3
    sphinx_rtd_theme>=1.0
    sphinx-click>=3.0
    sphinx-inline-tabs
    sphinx-copybutton>=0.4.0
    # Unreleased package have a feature we want(use correct version package for API ref), so we install from
    # GitHub directly, see also:
    # https://github.com/Holzhaus/sphinx-multiversion/issues/42#issuecomment-1210539786
    sphinx-multiversion @ git+https://github.com/Holzhaus/sphinx-multiversion#egg=sphinx-multiversion
    sphinx-github-changelog
dev =
    # build
    apache-dolphinscheduler[build]
    # test
    apache-dolphinscheduler[test]
    # style
    apache-dolphinscheduler[style]
    # doc
    apache-dolphinscheduler[doc]

# ---------------------------------------------
# Test Settings
# ---------------------------------------------
[tool:pytest]
# add path here to skip pytest scan it
norecursedirs =
    tests/testing
    # Integration test run seperated which do not calculate coverage, it will run in `tox -e integrate-test`
    tests/integration

[coverage:run]
command_line = -m pytest
omit = 
    # Ignore all test cases in tests/
    tests/*
    # Ignore examples directory
    */pydolphinscheduler/examples/*
    # TODO. Temporary ignore java_gateway file, because we could not find good way to test it.
    */pydolphinscheduler/java_gateway.py

[coverage:report]
# Mark no cover for typing.TYPE_CHECKING, see details https://github.com/nedbat/coveragepy/issues/831
exclude_lines = 
    pragma: no cover
    if TYPE_CHECKING:
# Don’t report files that are 100% covered
skip_covered = True
show_missing = True
precision = 2
# Report will fail when coverage under 90.00%
fail_under = 90

# ---------------------------------------------
# TOX Settings
# ---------------------------------------------
[tox:tox]
envlist =
    local-ci
    auto-lint
    lint
    doc-build
    doc-build-multi
    code-test
    integrate-test
    local-integrate-test
    py{38,39,310,311,312}

[testenv]
allowlist_externals =
    make
    git
    find

[testenv:auto-lint]
extras = style
commands =
    python -m black .
    python -m ruff check --fix .

[testenv:lint]
extras = style
commands =
    python -m black --check .
    python -m ruff check .
    
[testenv:code-test]
extras = test
# Run both tests and coverage
commands =
    python -m pytest --cov=pydolphinscheduler --cov-report term --cov-report xml:coverage.xml tests/

[testenv:doc-build]
extras = doc
commands =
    make -C {toxinidir}/docs clean
    make -C {toxinidir}/docs html
# Remove sensitive information from the generated documentation
commands_post =
    find {toxinidir}/docs -type f -name "environment.pickle" -exec rm -rf \{\} \;

[testenv:doc-build-multi]
extras = doc
commands =
    # Get all tags for `multiversion` subcommand
    git fetch --tags
    make -C {toxinidir}/docs clean
    make -C {toxinidir}/docs multiversion
# Remove sensitive information from the generated documentation
commands_post =
    find {toxinidir}/docs -type f -name "environment.pickle" -exec rm -rf \{\} \;

[testenv:integrate-test]
extras = test
commands =
    python -m pytest tests/integration/

[testenv:local-integrate-test]
extras = test
setenv =
    skip_launch_docker = true
commands =
    {[testenv:integrate-test]commands}

# local-ci do not build `doc-build-multi`
[testenv:local-ci]
extras = dev
commands =
    {[testenv:lint]commands}
    {[testenv:code-test]commands}
    {[testenv:doc-build]commands}
