diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 16997e631..cdbe6d3be 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -46,17 +46,17 @@ jobs: strategy: matrix: os: [ubuntu-latest] - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11", "3.12"] allow-failure: [false] test-case: [test-unit-only, test-func-only] include: # experimental python - os: ubuntu-latest - python-version: "3.12" + python-version: "3.13" allow-failure: true test-case: test-unit-only - os: ubuntu-latest - python-version: "3.12" + python-version: "3.13" allow-failure: true test-case: test-func-only # linter tests diff --git a/CHANGES.rst b/CHANGES.rst index 1ba06264e..263abe3c8 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -12,7 +12,8 @@ Changes Changes: -------- -- No change. +- Add support of Python 3.13. +- Drop support of Python 3.8. Fixes: ------ diff --git a/README.rst b/README.rst index a358de89c..3a6071777 100644 --- a/README.rst +++ b/README.rst @@ -54,8 +54,8 @@ for each process. * - releases - | |version| |commits-since| |docker_image| -.. |py_ver| image:: https://img.shields.io/badge/python-3.8%2B-blue.svg?logo=python - :alt: Requires Python 3.8+ +.. |py_ver| image:: https://img.shields.io/badge/python-3.9%2B-blue.svg?logo=python + :alt: Requires Python 3.9+ :target: https://www.python.org/getit .. |commits-since| image:: https://img.shields.io/github/commits-since/crim-ca/weaver/6.0.0.svg?logo=github diff --git a/setup.py b/setup.py index a4251ea17..cc6381118 100644 --- a/setup.py +++ b/setup.py @@ -95,11 +95,11 @@ def _parse_requirements(file_path, requirements, links): "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3 :: Only", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", @@ -120,7 +120,7 @@ def _parse_requirements(file_path, requirements, links): package_data={"": ["*.mako"]}, zip_safe=False, test_suite="tests", - python_requires=">=3.7, <4", + python_requires=">=3.9, <4", install_requires=REQUIREMENTS, dependency_links=LINKS, extras_require={ diff --git a/tests/functional/test_cli.py b/tests/functional/test_cli.py index 00bde732f..028b66679 100644 --- a/tests/functional/test_cli.py +++ b/tests/functional/test_cli.py @@ -1073,9 +1073,18 @@ def test_deploy_docker_auth_help(self): docker_lines = lines[i:] break assert docker_lines - docker_opts = ["-T TOKEN", "-U USERNAME", "-P PASSWORD"] + # depending on python version, different (equivalent) variants are used + # allow any of them + docker_opts = [ + ("-T TOKEN, --token TOKEN", "-T, --token TOKEN"), + ("-U USERNAME, --username USERNAME", "-U, --username USERNAME"), + ("-P PASSWORD, --password PASSWORD", "-P, --password PASSWORD"), + ] docker_help = f"Arguments {docker_opts} not found in:\n{repr_json(docker_lines, indent=2)}" - assert all(any(opt in line for line in docker_lines) for opt in docker_opts), docker_help + assert all( + any(opt1 in line or opt2 in line for line in docker_lines) + for opt1, opt2 in docker_opts + ), docker_help @staticmethod def add_docker_pull_ref(cwl, ref): @@ -1916,9 +1925,9 @@ def test_execute_help_details(self): start = -1 end = -1 for index, line in enumerate(lines): - if "-I INPUTS, --inputs INPUTS" in line: + if "-I INPUTS, --inputs INPUTS" in line or "-I, --inputs INPUTS" in line: start = index + 1 - if "Example:" in line: + if "-I file:File=data.xml" in line: # contents toward the end of '--inputs' help message end = index break assert 0 < start < end