Compare commits
3 commits
89afdb37d7
...
98887d246a
Author | SHA1 | Date | |
---|---|---|---|
|
98887d246a | ||
|
bff9a86d81 | ||
|
11cc57c190 |
7 changed files with 36 additions and 21 deletions
4
.github/workflows/ci.yaml
vendored
4
.github/workflows/ci.yaml
vendored
|
@ -6,14 +6,14 @@ on:
|
||||||
- pull_request
|
- pull_request
|
||||||
|
|
||||||
env:
|
env:
|
||||||
DEFAULT_PYTHON: '3.11'
|
DEFAULT_PYTHON: '3.12'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
tests:
|
tests:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
|
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
2
.github/workflows/pages.yml
vendored
2
.github/workflows/pages.yml
vendored
|
@ -20,7 +20,7 @@ jobs:
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: '3.11'
|
python-version: '3.12'
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
|
|
3
Jenkinsfile
vendored
3
Jenkinsfile
vendored
|
@ -1,5 +1,6 @@
|
||||||
def pys = [
|
def pys = [
|
||||||
[name: 'Python 3.11', docker: '3.11-bookworm', tox:'py311,flake8', main: true],
|
[name: 'Python 3.12', docker: '3.12-bookworm', tox:'py312,flake8', main: true],
|
||||||
|
[name: 'Python 3.11', docker: '3.11-bookworm', tox:'py311', main: false],
|
||||||
[name: 'Python 3.10', docker: '3.10-bookworm', tox:'py310', main: false],
|
[name: 'Python 3.10', docker: '3.10-bookworm', tox:'py310', main: false],
|
||||||
[name: 'Python 3.9', docker: '3.9-bookworm', tox:'py39', main: false],
|
[name: 'Python 3.9', docker: '3.9-bookworm', tox:'py39', main: false],
|
||||||
[name: 'Python 3.8', docker: '3.8-bookworm', tox:'py38', main: false],
|
[name: 'Python 3.8', docker: '3.8-bookworm', tox:'py38', main: false],
|
||||||
|
|
|
@ -2,9 +2,15 @@
|
||||||
# SPDX-FileCopyrightText: © 2004 Tristan Seligmann and Jonathan Jacobs
|
# SPDX-FileCopyrightText: © 2004 Tristan Seligmann and Jonathan Jacobs
|
||||||
# SPDX-FileCopyrightText: © 2012 Bastian Kleineidam
|
# SPDX-FileCopyrightText: © 2012 Bastian Kleineidam
|
||||||
# SPDX-FileCopyrightText: © 2015 Tobias Gruetzmacher
|
# SPDX-FileCopyrightText: © 2015 Tobias Gruetzmacher
|
||||||
|
# PYTHON_ARGCOMPLETE_OK
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import contextlib
|
||||||
|
import importlib
|
||||||
import os
|
import os
|
||||||
import platform
|
import platform
|
||||||
|
from collections.abc import Iterable
|
||||||
|
|
||||||
from platformdirs import PlatformDirs
|
from platformdirs import PlatformDirs
|
||||||
|
|
||||||
|
@ -18,7 +24,7 @@ from .util import internal_error, strlimit
|
||||||
class ArgumentParser(argparse.ArgumentParser):
|
class ArgumentParser(argparse.ArgumentParser):
|
||||||
"""Custom argument parser."""
|
"""Custom argument parser."""
|
||||||
|
|
||||||
def print_help(self, file=None):
|
def print_help(self, file=None) -> None:
|
||||||
"""Paginate help message on TTYs."""
|
"""Paginate help message on TTYs."""
|
||||||
with out.pager():
|
with out.pager():
|
||||||
out.info(self.format_help())
|
out.info(self.format_help())
|
||||||
|
@ -46,7 +52,7 @@ User plugin directory: {user_plugin_path}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def setup_options():
|
def setup_options() -> ArgumentParser:
|
||||||
"""Construct option parser.
|
"""Construct option parser.
|
||||||
@return: new option parser
|
@return: new option parser
|
||||||
@rtype argparse.ArgumentParser
|
@rtype argparse.ArgumentParser
|
||||||
|
@ -65,8 +71,8 @@ def setup_options():
|
||||||
help='traverse and retrieve all comic strips')
|
help='traverse and retrieve all comic strips')
|
||||||
parser.add_argument('-c', '--continue', action='store_true', dest='cont',
|
parser.add_argument('-c', '--continue', action='store_true', dest='cont',
|
||||||
help='traverse and retrieve comic strips until an existing one is found')
|
help='traverse and retrieve comic strips until an existing one is found')
|
||||||
parser.add_argument('-b', '--basepath', action='store', default='Comics',
|
basepath_opt = parser.add_argument('-b', '--basepath', action='store',
|
||||||
metavar='PATH',
|
default='Comics', metavar='PATH',
|
||||||
help='set the path to create invidivual comic directories in, default is Comics')
|
help='set the path to create invidivual comic directories in, default is Comics')
|
||||||
parser.add_argument('--baseurl', action='store', metavar='PATH',
|
parser.add_argument('--baseurl', action='store', metavar='PATH',
|
||||||
help='the base URL of your comics directory (for RSS, HTML, etc.);'
|
help='the base URL of your comics directory (for RSS, HTML, etc.);'
|
||||||
|
@ -103,16 +109,22 @@ def setup_options():
|
||||||
# are not "real" (moved & removed)
|
# are not "real" (moved & removed)
|
||||||
parser.add_argument('--list-all', action='store_true',
|
parser.add_argument('--list-all', action='store_true',
|
||||||
help=argparse.SUPPRESS)
|
help=argparse.SUPPRESS)
|
||||||
parser.add_argument('comic', nargs='*',
|
comic_arg = parser.add_argument('comic', nargs='*',
|
||||||
help='comic module name (including case insensitive substrings)')
|
help='comic module name (including case insensitive substrings)')
|
||||||
try:
|
comic_arg.completer = scraper_completion
|
||||||
import argcomplete
|
with contextlib.suppress(ImportError):
|
||||||
argcomplete.autocomplete(parser)
|
completers = importlib.import_module('argcomplete.completers')
|
||||||
except ImportError:
|
basepath_opt.completer = completers.DirectoriesCompleter()
|
||||||
pass
|
importlib.import_module('argcomplete').autocomplete(parser)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
|
def scraper_completion(**kwargs) -> Iterable[str]:
|
||||||
|
"""Completion helper for argcomplete."""
|
||||||
|
scrapercache.adddir(user_plugin_path)
|
||||||
|
return (comic.name for comic in scrapercache.all())
|
||||||
|
|
||||||
|
|
||||||
def display_version(verbose):
|
def display_version(verbose):
|
||||||
"""Display application name, version, copyright and license."""
|
"""Display application name, version, copyright and license."""
|
||||||
print(configuration.App)
|
print(configuration.App)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["setuptools>=61.2", "setuptools_scm>=6.2"]
|
requires = ["setuptools>=66.0", "setuptools_scm>=7.1"]
|
||||||
build-backend = "setuptools.build_meta"
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
|
@ -22,6 +22,7 @@ classifiers = [
|
||||||
"Programming Language :: Python :: 3.9",
|
"Programming Language :: Python :: 3.9",
|
||||||
"Programming Language :: Python :: 3.10",
|
"Programming Language :: Python :: 3.10",
|
||||||
"Programming Language :: Python :: 3.11",
|
"Programming Language :: Python :: 3.11",
|
||||||
|
"Programming Language :: Python :: 3.12",
|
||||||
"Topic :: Internet :: WWW/HTTP",
|
"Topic :: Internet :: WWW/HTTP",
|
||||||
"Topic :: Multimedia :: Graphics",
|
"Topic :: Multimedia :: Graphics",
|
||||||
]
|
]
|
||||||
|
|
2
tests/modules/Jenkinsfile
vendored
2
tests/modules/Jenkinsfile
vendored
|
@ -9,7 +9,7 @@ node {
|
||||||
stage ('Run tests') {
|
stage ('Run tests') {
|
||||||
timeout(time: 12, unit: 'HOURS') {
|
timeout(time: 12, unit: 'HOURS') {
|
||||||
withCredentials([string(credentialsId: 'proxymap', variable: 'PROXYMAP')]) {
|
withCredentials([string(credentialsId: 'proxymap', variable: 'PROXYMAP')]) {
|
||||||
sh 'podman run --rm -v $PWD:/work --userns=keep-id docker.io/python:3.11-bookworm /work/tests/modules/testall.sh'
|
sh 'podman run --rm -v $PWD:/work --userns=keep-id docker.io/python:3.12-bookworm /work/tests/modules/testall.sh'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
5
tox.ini
5
tox.ini
|
@ -1,5 +1,5 @@
|
||||||
[tox]
|
[tox]
|
||||||
envlist = py37, py38, py39, py310, py311, flake8
|
envlist = py37, py38, py39, py310, py311, py312, flake8
|
||||||
isolated_build = True
|
isolated_build = True
|
||||||
|
|
||||||
[gh-actions]
|
[gh-actions]
|
||||||
|
@ -8,7 +8,8 @@ python =
|
||||||
3.8: py38
|
3.8: py38
|
||||||
3.9: py39
|
3.9: py39
|
||||||
3.10: py310
|
3.10: py310
|
||||||
3.11: py311, flake8
|
3.11: py311
|
||||||
|
3.12: py312, flake8
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
commands =
|
commands =
|
||||||
|
|
Loading…
Reference in a new issue