# 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
    Programming Language :: Python :: 3.6
    Programming Language :: Python :: 3.7
    Programming Language :: Python :: 3.8
    Programming Language :: Python :: 3.9
    Programming Language :: Python :: 3.10
    Programming Language :: Python :: 3.11
    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.6
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 =
    flake8>=4.0
    flake8-docstrings>=1.6
    flake8-black>=0.2
    isort>=5.10
    autoflake>=1.4
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]
# 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

# ---------------------------------------------
# Code Style Settings
# ---------------------------------------------
[flake8]
max-line-length = 110
exclude =
    .git,
    __pycache__,
    .pytest_cache,
    *.egg-info,
    docs/source/conf.py
    old,
    build,
    dist,
    htmlcov,
    .tox,
ignore = 
    # It's clear and not need to add docstring
    # D107: Don't require docstrings on __init__
    D107,
    # D105: Missing docstring in magic method
    D105,
    # Conflict to Black
    # W503: Line breaks before binary operators
    W503
per-file-ignores =
    */pydolphinscheduler/side/__init__.py:F401
    */pydolphinscheduler/tasks/__init__.py:F401

[isort]
profile=black

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

[testenv]
allowlist_externals =
    make
    git
    find

[testenv:auto-lint]
extras = style
commands =
    python -m isort .
    python -m black .
    python -m autoflake --in-place --remove-all-unused-imports --ignore-init-module-imports --recursive .

[testenv:lint]
extras = style
commands =
    python -m isort --check .
    python -m black --check .
    python -m flake8
    python -m autoflake --remove-all-unused-imports --ignore-init-module-imports --check --recursive .
    
[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}
