329 lines
7.6 KiB
INI
329 lines
7.6 KiB
INI
[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
|
|
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
|
|
rapidfuzz>=2.12.0
|
|
requests==2.*
|
|
settngs==0.9.2
|
|
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.metadata =
|
|
cr = comicapi.metadata.comicrack:ComicRack
|
|
cbi = comicapi.metadata.comicbookinfo:ComicBookInfo
|
|
comet = comicapi.metadata.comet:CoMet
|
|
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
|
|
gcd-talker>=0.1.0
|
|
metron-talker>=0.1.5
|
|
pillow-avif-plugin>=1.4.1
|
|
py7zr
|
|
rarfile>=4.0
|
|
pyicu;sys_platform == 'linux' or sys_platform == 'darwin'
|
|
avif =
|
|
pillow-avif-plugin>=1.4.1
|
|
cix =
|
|
comicinfoxml
|
|
gcd =
|
|
gcd-talker>=0.1.0
|
|
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 =
|
|
release
|
|
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]
|
|
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,!=6.0.0
|
|
extras =
|
|
all
|
|
commands =
|
|
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
|
|
pypi-upload
|
|
pyinstaller
|
|
deps =
|
|
requests
|
|
allowlist_externals =
|
|
{tox_root}/build/appimagetool-x86_64.AppImage
|
|
change_dir = dist
|
|
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") \
|
|
.replace("Exec=comictagger", "Exec={tox_root}/comictagger"))'
|
|
{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==4.*
|
|
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, T202, E701
|
|
extend-exclude = venv, scripts, build, dist, comictaggerlib/ctversion.py
|
|
per-file-ignores =
|
|
comictaggerlib/cli.py: T20
|
|
build-tools/generate_settngs.py: T20
|
|
tests/*: L
|
|
|
|
[mypy]
|
|
check_untyped_defs = true
|
|
disallow_any_generics = true
|
|
disallow_incomplete_defs = true
|
|
disallow_untyped_defs = true
|
|
warn_redundant_casts = true
|
|
warn_unused_ignores = true
|
|
|
|
[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
|