[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.9"
dependencies = [
    "bs4",  # canonical name is beautifulsoup4
    "defusedxml",
    "humanize",
    "patch-ng",
    "py7zr>=0.22.0",
    "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", "*.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>=1.10.0",
    "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",
    "pylint",
    "types-requests",
]
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.pylint]
max-line-length = 125

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

[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]
requires = ["tox>=4.19"]
envlist = [
    "mypy",
    "check",
    "3.10",
    "3.11",
    "3.12",
    "3.13",
    "3.14",
    "docs",
    "mprof",
    "mypy",
    "fil"
]
isolated_build = true

[tool.tox.env_run_base]
description = "Run test under {base_python}"
passenv = [
    "GITHUB_*",
    "PYTEST_ADDOPTS",
    "COVERALLS_*",
]
extras = ["test", "check", "docs"]
commands = [["python", "-m", "pytest", "-vv"]]

[tool.tox.env.check]
extras = ["check"]
commands = [["check-manifest", "{toxinidir}"], ["flake8", "aqt", "tests"]]

[tool.tox.env.mypy]
extras = ["check"]
deps = ["lxml", "types-requests", "types-beautifulsoup4", "types-psutil"]
commands = [["mypy", "--html-report", "build/mypy", "aqt"]]

[tool.tox.env.docs]
extras = ["docs"]
commands = [
    ["sphinx-build", "{posargs:-E}", "-b", "html", "docs", "build/docs"],
    ["sphinx-build", "-W", "-b", "linkcheck", "docs", "build/docs"]
]

[tool.tox.env.mprof]
extras = ["test", "debug"]
commands = [
    ["mprof", "run", "--multiprocess", "python", "-m", "aqt", "install-qt", "-O", "/tmp", "-d", "/tmp", "linux", "desktop", "6.8.1"],
    ["mprof", "plot", "--output", "memory-profile.png"]
]
deps = ["memory_profiler", "matplotlib"]

[tool.tox.env.fil]
extras = ["debug"]
commands = [
    ["fil-profile", "run", "-m", "aqt", "install-qt", "-O", "/tmp", "-d", "/tmp", "linux", "desktop", "6.8.1"]
]
deps = ["filprofiler"]

[tool.tox.env.coveralls]
deps = ["coveralls"]
skip_install = true
commands = [["coveralls", "[]"]]
