Compare commits

...

3 commits

Author SHA1 Message Date
Tobias Gruetzmacher
98887d246a Housekeeping: Increase minimum required setuptools version
This is probably of little consequence since most users use the newest
setuptools version anyways...
2023-12-02 16:34:38 -06:00
Tobias Gruetzmacher
bff9a86d81 Improve shell completion support 2023-12-02 16:34:38 -06:00
Tobias Gruetzmacher
11cc57c190 Build with Python 3.12 2023-12-02 16:34:38 -06:00
7 changed files with 36 additions and 21 deletions

View file

@ -6,14 +6,14 @@ on:
- pull_request
env:
DEFAULT_PYTHON: '3.11'
DEFAULT_PYTHON: '3.12'
jobs:
tests:
runs-on: ubuntu-latest
strategy:
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:
- uses: actions/checkout@v4

View file

@ -20,7 +20,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
python-version: '3.12'
- name: Build
run: |

9
Jenkinsfile vendored
View file

@ -1,9 +1,10 @@
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.9', docker: '3.9-bookworm', tox:'py39', main: false],
[name: 'Python 3.8', docker: '3.8-bookworm', tox:'py38', main: false],
[name: 'Python 3.7', docker: '3.7-bookworm', tox:'py37', 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.7', docker: '3.7-bookworm', tox:'py37', main: false],
]
properties([

View file

@ -2,9 +2,15 @@
# SPDX-FileCopyrightText: © 2004 Tristan Seligmann and Jonathan Jacobs
# SPDX-FileCopyrightText: © 2012 Bastian Kleineidam
# SPDX-FileCopyrightText: © 2015 Tobias Gruetzmacher
# PYTHON_ARGCOMPLETE_OK
from __future__ import annotations
import argparse
import contextlib
import importlib
import os
import platform
from collections.abc import Iterable
from platformdirs import PlatformDirs
@ -18,7 +24,7 @@ from .util import internal_error, strlimit
class ArgumentParser(argparse.ArgumentParser):
"""Custom argument parser."""
def print_help(self, file=None):
def print_help(self, file=None) -> None:
"""Paginate help message on TTYs."""
with out.pager():
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.
@return: new option parser
@rtype argparse.ArgumentParser
@ -65,8 +71,8 @@ def setup_options():
help='traverse and retrieve all comic strips')
parser.add_argument('-c', '--continue', action='store_true', dest='cont',
help='traverse and retrieve comic strips until an existing one is found')
parser.add_argument('-b', '--basepath', action='store', default='Comics',
metavar='PATH',
basepath_opt = parser.add_argument('-b', '--basepath', action='store',
default='Comics', metavar='PATH',
help='set the path to create invidivual comic directories in, default is Comics')
parser.add_argument('--baseurl', action='store', metavar='PATH',
help='the base URL of your comics directory (for RSS, HTML, etc.);'
@ -103,16 +109,22 @@ def setup_options():
# are not "real" (moved & removed)
parser.add_argument('--list-all', action='store_true',
help=argparse.SUPPRESS)
parser.add_argument('comic', nargs='*',
comic_arg = parser.add_argument('comic', nargs='*',
help='comic module name (including case insensitive substrings)')
try:
import argcomplete
argcomplete.autocomplete(parser)
except ImportError:
pass
comic_arg.completer = scraper_completion
with contextlib.suppress(ImportError):
completers = importlib.import_module('argcomplete.completers')
basepath_opt.completer = completers.DirectoriesCompleter()
importlib.import_module('argcomplete').autocomplete(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):
"""Display application name, version, copyright and license."""
print(configuration.App)

View file

@ -1,5 +1,5 @@
[build-system]
requires = ["setuptools>=61.2", "setuptools_scm>=6.2"]
requires = ["setuptools>=66.0", "setuptools_scm>=7.1"]
build-backend = "setuptools.build_meta"
[project]
@ -22,6 +22,7 @@ classifiers = [
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Multimedia :: Graphics",
]

View file

@ -9,7 +9,7 @@ node {
stage ('Run tests') {
timeout(time: 12, unit: 'HOURS') {
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'
}
}
}

View file

@ -1,5 +1,5 @@
[tox]
envlist = py37, py38, py39, py310, py311, flake8
envlist = py37, py38, py39, py310, py311, py312, flake8
isolated_build = True
[gh-actions]
@ -8,7 +8,8 @@ python =
3.8: py38
3.9: py39
3.10: py310
3.11: py311, flake8
3.11: py311
3.12: py312, flake8
[testenv]
commands =