[project]
name = "aqtinstall"
description = "Another unofficial Qt installer"
license = {text = "MIT License"}
authors = [
    {name = "Hiroshi Miura", email = "miurahr@linux.com"},
]
classifiers = [
    "Development Status :: 4 - Beta",
    "Environment :: Console",
    "Environment :: X11 Applications :: Qt",
    "Intended Audience :: Developers",
    "License :: OSI Approved :: MIT License",
    "Operating System :: MacOS :: MacOS X",
    "Operating System :: Microsoft :: Windows",
    "Operating System :: POSIX",
    "Operating System :: POSIX :: Linux",
    "Programming Language :: Python",
    "Programming Language :: C++",
    "Topic :: Software Development",
    "Topic :: Software Development :: Libraries",
]
requires-python = ">=3.8"
dependencies = [
    "bs4",  # canonical name is beautifulsoup4
    "defusedxml",
    "humanize",
    "patch>=1.16",
    "py7zr>=0.20.6",
    "requests>=2.31.0",
    "semantic-version",
    "texttable",
]
dynamic = ["version", "readme"]

[tool.setuptools]
packages = ["aqt"]

[tool.setuptools.dynamic]
readme = {file = ["README.rst"]}

[tool.setuptools.package-data]
aqt = ["*.yml", "*.json", "*.ini"]

[project.scripts]
aqt = "aqt.__main__:main"

[project.optional-dependencies]
test = [
    "pytest>=6.0",
    "pytest-pep8",
    "pytest-cov",
    "pytest-remotedata>=0.4.1",
    "pytest-socket",
    "pytest-timeout",
    "pympler",
]
check = [
    "mypy>=0.990",
    "flake8>=6.0.0,<8.0.0",
    "flake8-black",
    "flake8-colors",
    "flake8-isort>=6.0.0,<7.0.0",
    "flake8-pyi",
    "flake8-typing-imports",
    "docutils",
    "check-manifest",
    "readme-renderer",
    "pygments",
    "packaging",
]
docs = [
    "sphinx>=7.0",
    "sphinx_rtd_theme>=1.3",
    "sphinx-py3doc-enhanced-theme>=2.4",
]
debug = [
    "pytest-leaks",
]

[project.urls]
Documentation = "https://aqtinstall.readthedocs.io/"
"Bug Tracker" = "https://github.com/miurahr/aqtinstall/issues"
Wiki = "https://github.com/miurahr/aqtinstall/wiki"
Source = "https://github.com/miurahr/aqtinstall"
Changelog = "https://aqtinstall.readthedocs.io/en/latest/CHANGELOG.html"

[build-system]
requires = ["setuptools>=61", "wheel", "setuptools_scm[toml]>=6.4"]
build-backend = "setuptools.build_meta"

[tool.setuptools_scm]
local_scheme = "no-local-version"
write_to = "aqt/version.py"
write_to_template = """
__version__ = \"{version}\"
"""
tag_regex = "^(?P<prefix>v)?(?P<version>[^\\+]+)(?P<suffix>.*)?$"

[tool.check-manifest]
ignore = ["aqt/version.py","azure-pipelines.yml", ".readthedocs.yml", "ci/*"]

[tool.coverage.run]
branch = true
parallel = true
source = ["aqt", "tests"]

[tool.coverage.report]
show_missing = true
exclude_lines = ["if __name__ == .__main__.:", "pragma: no-cover", "@abstract", "def __repr__"]

[tool.black]
line-length = 125
target-version = ['py39']

[tool.isort]
line_length = 125
known_first_party = "aqt"
known_third_party = ["docutils", "flake8", "pyannotate_runtime", "pytest", "pytz", "requests", "setuptools", "sphinx", "yaml", "packaging"]
multi_line_output = 3
include_trailing_comma = true
force_grid_wrap = 0
use_parentheses = true
ensure_newline_before_comments = true

[tool.mypy]
# Untyped definitions and calls are disable in default
check_untyped_defs = false
disallow_incomplete_defs = false
disallow_untyped_calls = false
disallow_untyped_defs = false
disallow_untyped_decorators = false
# not a all 3rd party package has type hints
ignore_missing_imports = true
# Optional check: implicit check enabled in mypy 0.980 or before
strict_optional = true
implicit_optional = false
# Enable incremental mode and use sqlite cache
incremental = true
sqlite_cache = true
# Enables PEP 420 style namespace packages
namespace_packages = true
# Control error output
pretty = true
color_output = true
show_error_context = false
show_column_numbers = true
error_summary = true
# configuring warnings
warn_no_return = true
warn_redundant_casts = true
warn_return_any = true
warn_unreachable = true
warn_unused_ignores = true

# TODO: Remove this `ignore_missing_imports` and add type stubs.
# See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
[[tool.mypy.overrides]]
module = "texttable"
ignore_missing_imports = true

[tool.pytest.ini_options]
minversion = "6.0"
testpaths = ["tests"]
python_files = "test*.py"
norecursedirs = [".git", "_build", "tmp", ".eggs"]
timeout = 480
markers = [
    "unit: mark a test as an unit test.",
    "enable_socket : mark a test with enabling socket.",
    "remote_data: mark a test with remote data.",
]

[tool.tox]
legacy_tox_ini = """
[tox]
envlist = check, docs, py{38,39,310,311,312}, py39d, mprof, fil, mypy
isolated_build = True

[testenv]
passenv =
    GITHUB*
    APPVEYOR*
    TRAVIS*
    COVERALLS_*
    PYTEST_ADDOPTS
extras = test, check, docs
commands =
    python -m pytest -vv

[testenv:check]
basepython = python3.9
extras = check
commands =
    check-manifest {toxinidir}
    flake8 aqt tests

[testenv:mypy]
basepython = python3.9
extras = check
commands = mypy aqt
deps =
    types-requests
    types-beautifulsoup4
    types-psutil

[testenv:docs]
basepython = python3.9
extras = docs
commands =
    sphinx-build {posargs:-E} -W -b html docs build/docs
    sphinx-build -W -b linkcheck docs build/docs

[testenv:py39d]
basepython = python3.9d
extras = test, debug
commands =
    python3.9-dbg -m pytest -v --no-cov -R : -k "test_install"

[testenv:mprof]
basepython = python3.9
extras = debug
commands =
    mprof run --multiprocess python -m aqt install-qt -O /tmp -d /tmp linux desktop 6.2.1
    mprof plot --output memory-profile.png
deps =
    memory_profiler
    matplotlib

[testenv:fil]
basepython = python3.9
extras = debug
commands =
    fil-profile run -m aqt install-qt -O /tmp -d /tmp linux desktop 6.2.1
deps =
    filprofiler

[testenv:coveralls]
deps =
    coveralls
skip_install = true
commands =
    coveralls []

[gh-actions]
python =
    3.8: py38
    3.9: py39, docs, check, mypy
    3.10: py310
    3.11: py311
    3.12: py312
"""
