[metadata] name = comictagger description = A cross-platform GUI/CLI app for writing metadata to comic archives long_description = file: README.md long_description_content_type = text/markdown url = https://github.com/comictagger/comictagger author = ComicTagger team author_email = comictagger@gmail.com license = Apache-2.0 license_files = LICENSE classifiers = Development Status :: 4 - Beta Environment :: Console Environment :: MacOS X Environment :: Win32 (MS Windows) Environment :: X11 Applications :: Qt Intended Audience :: End Users/Desktop License :: OSI Approved :: Apache Software License Natural Language :: English Operating System :: OS Independent Programming Language :: Python :: 3 Programming Language :: Python :: 3 :: Only Topic :: Multimedia :: Graphics Topic :: Other/Nonlisted Topic Topic :: Utilities keywords = comictagger comics comic metadata tagging tagger [options] packages = find: install_requires = appdirs==1.4.4 beautifulsoup4>=4.1 chardet>=5.1.0,<6 comicfn2dict>=0.2.1 importlib-metadata>=3.3.0 isocodes>=2023.11.26 natsort>=8.1.0 packaging>=20 pathvalidate pillow>=9.1.0,<10 pyrate-limiter>=2.6,<3 pyyaml rapidfuzz>=2.12.0 requests==2.* settngs==0.10.4 text2digits typing-extensions>=4.3.0 wordninja python_requires = >=3.9 [options.packages.find] exclude = tests; testing [options.entry_points] console_scripts = comictagger=comictaggerlib.main:main comicapi.archiver = zip = comicapi.archivers.zip:ZipArchiver sevenzip = comicapi.archivers.sevenzip:SevenZipArchiver rar = comicapi.archivers.rar:RarArchiver folder = comicapi.archivers.folder:FolderArchiver comicapi.tags = cr = comicapi.tags.comicrack:ComicRack comictagger.talker = comicvine = comictalker.talkers.comicvine:ComicVineTalker pyinstaller40 = hook-dirs = comictaggerlib.__pyinstaller:get_hook_dirs [options.extras_require] 7Z = py7zr CBR = rarfile>=4.0 GUI = PyQt5 ICU = pyicu;sys_platform == 'linux' or sys_platform == 'darwin' QTW = PyQt5 PyQtWebEngine all = PyQt5 PyQtWebEngine comicinfoxml==0.4.* gcd-talker>0.1.0 metron-talker>0.1.5 pillow-avif-plugin>=1.4.1 pillow-jxl-plugin>=1.2.5 py7zr rarfile>=4.0 pyicu;sys_platform == 'linux' or sys_platform == 'darwin' archived_tags = ct-archived-tags avif = pillow-avif-plugin>=1.4.1 cix = comicinfoxml==0.4.* gcd = gcd-talker>=0.1.0 jxl = pillow-jxl-plugin>=1.2.5 metron = metron-talker>=0.1.3 [options.package_data] comicapi = data/* comictaggerlib = ui/* graphics/* [tox:tox] env_list = format py3.9-{none,gui,7z,cbr,icu,all} minversion = 4.4.12 basepython = {env:tox_python:python3.9} [testenv] description = run the tests with pytest package = wheel deps = pytest>=7 extras = 7z: 7Z cbr: CBR gui: GUI icu: ICU all: all commands = python -m pytest {tty:--color=yes} {posargs} icu,all: python -c 'import importlib,platform; importlib.import_module("icu") if platform.system() != "Windows" else ...' # Sanity check for icu [m1env] description = run the tests with pytest package = wheel deps = pytest>=7 icu,all: pyicu-binary extras = 7z: 7Z cbr: CBR gui: GUI all: 7Z,CBR,GUI commands = python -m pytest {tty:--color=yes} {posargs} [testenv:py3.9-{icu,all}] base = {env:tox_env:testenv} [testenv:format] labels = build deps = black>=22 isort>=5.10 setup-cfg-fmt autoflake pyupgrade commands = -python ./build-tools/generate_settngs.py -setup-cfg-fmt setup.cfg -python -m autoflake -i --remove-all-unused-imports --ignore-init-module-imports -r comictaggerlib comicapi comictalker testing tests build-tools -python -m isort --af --add-import 'from __future__ import annotations' . -python -m black . [testenv:lint] skip_install = true depends = format deps = flake8 flake8-black flake8-encodings flake8-isort mypy types-setuptools types-requests commands = python -m flake8 . -python -m mypy --ignore-missing-imports comicapi comictaggerlib comictalker [testenv:clean] description = Clean development outputs labels = release build depends = format lint skip_install = true commands = -python -c 'import shutil,pathlib; \ shutil.rmtree("./build/", ignore_errors=True); \ shutil.rmtree("./dist/", ignore_errors=True); \ pathlib.Path("./comictaggerlib/ctversion.py").unlink(missing_ok=True); \ pathlib.Path("comictagger.spec").unlink(missing_ok=True)' [testenv:wheel] description = Generate wheel and tar.gz labels = release build depends = clean skip_install = true deps = build commands = python -m build [testenv:pypi-upload] description = Upload wheel to PyPi platform = linux labels = release skip_install = true depends = wheel deps = twine id~=1.0 keyrings.alt passenv = GITHUB_* ACTIONS_* CI setenv = TWINE_NON_INTERACTIVE=true commands = python {tox_root}/build-tools/oidc-exchange.py python -m twine upload dist/*.whl dist/*.tar.gz [testenv:pyinstaller] description = Generate pyinstaller executable labels = build release base = {env:tox_env:testenv} depends = clean deps = pyinstaller>=5.6.2,!=6.0.0 extras = all commands = pyrcc5 comictaggerlib/graphics/graphics.qrc -o comictaggerlib/graphics/resources.py pyinstaller -y build-tools/comictagger.spec python -c 'import importlib,platform; importlib.import_module("icu") if platform.system() != "Windows" else ...' # Sanity check for icu [testenv:appimage] description = Generate appimage executable skip_install = true platform = linux base = {env:tox_env:testenv} labels = release build depends = clean pyinstaller deps = requests allowlist_externals = {tox_root}/build/appimagetool-x86_64.AppImage change_dir = {tox_root}/dist/binary commands_pre = -python -c 'import shutil; shutil.rmtree("{tox_root}/build/", ignore_errors=True)' python {tox_root}/build-tools/get_appimage.py {tox_root}/build/appimagetool-x86_64.AppImage commands = python -c 'import shutil,pathlib; shutil.copytree("{tox_root}/dist/comictagger/", "{tox_root}/build/appimage", dirs_exist_ok=True); \ shutil.copy("{tox_root}/comictaggerlib/graphics/app.png", "{tox_root}/build/appimage/app.png"); \ pathlib.Path("{tox_root}/build/appimage/AppRun").symlink_to("comictagger"); \ pathlib.Path("{tox_root}/build/appimage/AppRun.desktop").write_text( \ pathlib.Path("{tox_root}/build-tools/ComicTagger.desktop").read_text() \ .replace("/usr/local/share/comictagger/app.png", "app"))' {tox_root}/build/appimagetool-x86_64.AppImage {tox_root}/build/appimage [testenv:zip_artifacts] description = Zip release artifacts labels = release build depends = wheel pyinstaller appimage deps = dmgbuild commands = python ./build-tools/zip_artifacts.py [testenv:venv] envdir = venv deps = flake8 flake8-black flake8-encodings flake8-isort mypy types-setuptools types-requests build pyinstaller>=5.6.2,!=6.0.0 [flake8] max-line-length = 120 extend-ignore = E203, E501, A003, A005, T202, E701 extend-exclude = venv, scripts, build, dist, comictaggerlib/ctversion.py, comictaggerlib/graphics/resources.py per-file-ignores = comictaggerlib/cli.py: T20 build-tools/generate_settngs.py: T20 build-tools/oidc-exchange.py: T20 tests/*: L [mypy] exclude = comictaggerlib/graphics/resources.py check_untyped_defs = true disallow_any_generics = true disallow_incomplete_defs = true disallow_untyped_defs = true warn_redundant_casts = true warn_unused_ignores = true disable_error_code = import-untyped [mypy-testing.*] disallow_untyped_defs = false disallow_incomplete_defs = false check_untyped_defs = false [mypy-tests.*] disallow_untyped_defs = false disallow_incomplete_defs = false check_untyped_defs = false [mypy-comictaggerlib.graphics.resources] ignore_errors = True