[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 License 2.0 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 importlib-metadata>=3.3.0 natsort>=8.1.0 pathvalidate pillow>=9.1.0,<10 pycountry rapidfuzz>=2.12.0 requests==2.* settngs==0.6.2 text2digits typing-extensions 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 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' all = PyQt5 py7zr rarfile>=4.0 pyicu;sys_platform == 'linux' or sys_platform == 'darwin' [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 wheel_build_env = .pkg 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 wheel_build_env = .pkg deps = pytest>=7 icu,all: pyicu-binary extras = 7z: 7Z cbr: CBR gui: GUI all: 7Z,CBR,GUI [testenv:py3.9-{icu,all}] base = {env:tox_env:testenv} [testenv:format] labels = release build skip_install = true deps = black>=22 isort>=5.10 setup-cfg-fmt autoflake pyupgrade commands = -setup-cfg-fmt setup.cfg -python -m autoflake -i --remove-all-unused-imports --ignore-init-module-imports . -python -m isort --af --add-import 'from __future__ import annotations' . -python -m black . [testenv:lint] labels = release skip_install = true depends = format deps = flake8==4.* 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 passenv = TWINE_* setenv = TWINE_NON_INTERACTIVE=true commands = python -m twine upload dist/*.whl dist/*.tar.gz [testenv:pyinstaller] description = Generate pyinstaller executable labels = release build base = {env:tox_env:testenv} depends = clean pypi-upload deps = pyinstaller>=5.6.2 extras = all commands = python -c 'import importlib,platform; importlib.import_module("icu") if platform.system() != "Windows" else ...' # Sanity check for icu pyinstaller -y build-tools/comictagger.spec [testenv:appimage] description = Generate appimage executable skip_install = true platform = Linux base = {env:tox_env:testenv} labels = release build depends = clean pypi-upload pyinstaller deps = requests extras = all commands = python -c 'import importlib,platform; importlib.import_module("icu") if platform.system() != "Windows" else ...' # Sanity check for icu -python -c 'import shutil; shutil.rmtree("./build/", ignore_errors=True)' python -c 'import shutil,pathlib; shutil.copytree("./dist/comictagger/", "./build/appimage", dirs_exist_ok=True); \ shutil.copy("./comictaggerlib/graphics/app.png", "./build/appimage/app.png"); \ pathlib.Path("./build/appimage/AppRun").symlink_to("comictagger"); \ pathlib.Path("./build/appimage/AppRun.desktop").write_text( \ pathlib.Path("build-tools/ComicTagger.desktop").read_text() \ .replace("/usr/local/share/comictagger/app.png", "app") \ .replace("Exec=comictagger", "Exec=./comictagger"))' python ./build-tools/get_appimage.py ./build/appimagetool ./build/appimage [testenv:zip_artifacts] description = Zip release artifacts labels = release build depends = wheel pyinstaller appimage commands = python ./build-tools/zip_artifacts.py [testenv:venv] envdir = venv deps = flake8==4.* flake8-black flake8-encodings flake8-isort mypy types-setuptools types-requests build pyinstaller>=5.6.2 [flake8] max-line-length = 120 extend-ignore = E203, E501, A003 extend-exclude = venv, scripts, build, dist, comictaggerlib/ctversion.py per-file-ignores = comictaggerlib/cli.py: T20