diff --git a/.circleci/config.yml b/.circleci/config.yml index f29c69235e6..9c27be38c17 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,7 +15,7 @@ variables: jobs: get_code: docker: - - image: cimg/python:3.8 + - image: cimg/python:3.9 <<: *set_workdir steps: # Replace standard code checkout with shallow clone to speed things up. @@ -73,7 +73,7 @@ jobs: - ~/repo validate_test_tools: docker: - - image: cimg/python:3.8 + - image: cimg/python:3.9 <<: *set_workdir steps: - *restore_repo_cache diff --git a/.github/workflows/api.yaml b/.github/workflows/api.yaml index 0ca4399f931..0f4330b2ce1 100644 --- a/.github/workflows/api.yaml +++ b/.github/workflows/api.yaml @@ -29,7 +29,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8'] + python-version: ['3.9'] chunk: [0, 1] services: postgres: diff --git a/.github/workflows/bioblend.yaml b/.github/workflows/bioblend.yaml index f0da9f2ed0e..6438020f147 100644 --- a/.github/workflows/bioblend.yaml +++ b/.github/workflows/bioblend.yaml @@ -32,7 +32,7 @@ jobs: fail-fast: false matrix: tox_env: [py313] - galaxy_python_version: ["3.8"] + galaxy_python_version: ['3.9'] steps: - name: Checkout Galaxy uses: actions/checkout@v4 diff --git a/.github/workflows/check_test_class_names.yaml b/.github/workflows/check_test_class_names.yaml index 33bf3187717..39dc74a27a0 100644 --- a/.github/workflows/check_test_class_names.yaml +++ b/.github/workflows/check_test_class_names.yaml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.8'] + python-version: ['3.9'] steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 diff --git a/.github/workflows/converter_tests.yaml b/.github/workflows/converter_tests.yaml index b953699e604..24114a2cd00 100644 --- a/.github/workflows/converter_tests.yaml +++ b/.github/workflows/converter_tests.yaml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.8'] + python-version: ['3.9'] steps: - if: github.event_name == 'schedule' run: | diff --git a/.github/workflows/cwl_conformance.yaml b/.github/workflows/cwl_conformance.yaml index 10fb215bf04..d4927f6d390 100644 --- a/.github/workflows/cwl_conformance.yaml +++ b/.github/workflows/cwl_conformance.yaml @@ -24,7 +24,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8'] + python-version: ['3.9'] marker: ['green', 'red and required', 'red and not required'] conformance-version: ['cwl_conformance_v1_0'] #, 'cwl_conformance_v1_1', 'cwl_conformance_v1_2'] services: diff --git a/.github/workflows/db_indexes.yaml b/.github/workflows/db_indexes.yaml index 5141cfc04ba..497dcd29e02 100644 --- a/.github/workflows/db_indexes.yaml +++ b/.github/workflows/db_indexes.yaml @@ -24,11 +24,11 @@ jobs: matrix: db: ['postgresql', 'sqlite'] postgresql-version: ['13'] - python-version: ['3.8'] + python-version: ['3.9'] include: - db: postgresql postgresql-version: '9.6' - python-version: '3.8' + python-version: '3.9' services: postgres: image: postgres:${{ matrix.postgresql-version }} diff --git a/.github/workflows/dependencies.yaml b/.github/workflows/dependencies.yaml index 2401107eb32..b415778ea77 100644 --- a/.github/workflows/dependencies.yaml +++ b/.github/workflows/dependencies.yaml @@ -10,13 +10,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - # Install Python 3.8 for update_lint_requirements.sh - # Install Python 3.9 (as default) to allow `uv lock` to generate metadata for rucio-clients - uses: actions/setup-python@v5 with: - python-version: | - 3.8 - 3.9 + python-version: '3.9' - name: Update dependencies run: make update-dependencies - name: Create pull request diff --git a/.github/workflows/deployment.yaml b/.github/workflows/deployment.yaml index 281b60beb07..ab66de3456d 100644 --- a/.github/workflows/deployment.yaml +++ b/.github/workflows/deployment.yaml @@ -29,7 +29,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.8'] + python-version: ['3.9'] steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 0758dfb522a..cdeec968f0e 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.8'] + python-version: ['3.9'] steps: - name: Get target branch name (push) if: github.event_name == 'push' diff --git a/.github/workflows/first_startup.yaml b/.github/workflows/first_startup.yaml index 05efc45367b..703a9e450c7 100644 --- a/.github/workflows/first_startup.yaml +++ b/.github/workflows/first_startup.yaml @@ -23,7 +23,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8', '3.13'] + python-version: ['3.9', '3.13'] defaults: run: shell: bash -l {0} diff --git a/.github/workflows/framework_tools.yaml b/.github/workflows/framework_tools.yaml index a55dfa31648..9b5abb12204 100644 --- a/.github/workflows/framework_tools.yaml +++ b/.github/workflows/framework_tools.yaml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.8'] + python-version: ['3.9'] services: postgres: image: postgres:13 diff --git a/.github/workflows/framework_workflows.yaml b/.github/workflows/framework_workflows.yaml index 018463833e2..ae2cb03153c 100644 --- a/.github/workflows/framework_workflows.yaml +++ b/.github/workflows/framework_workflows.yaml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.8'] + python-version: ['3.9'] services: postgres: image: postgres:13 diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml index 872cdef6c69..2a004d30fb7 100644 --- a/.github/workflows/integration.yaml +++ b/.github/workflows/integration.yaml @@ -29,7 +29,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8'] + python-version: ['3.9'] chunk: ['0', '1', '2', '3'] services: postgres: diff --git a/.github/workflows/integration_selenium.yaml b/.github/workflows/integration_selenium.yaml index 311fb16a96f..b72858d0274 100644 --- a/.github/workflows/integration_selenium.yaml +++ b/.github/workflows/integration_selenium.yaml @@ -31,7 +31,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.8'] + python-version: ['3.9'] services: postgres: image: postgres:13 diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 37d337fb95f..a28dd0f192f 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -22,7 +22,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8', '3.13'] + python-version: ['3.9', '3.13'] env: LINT_PATH: 'lib/galaxy/dependencies/pinned-lint-requirements.txt' TYPE_PATH: 'lib/galaxy/dependencies/pinned-typecheck-requirements.txt' @@ -56,5 +56,5 @@ jobs: run: tox -e mypy - uses: psf/black@stable with: - version: "24.8.0" # last version supporting Python 3.8 + version: ">=25.1.0" - uses: isort/isort-action@v1 diff --git a/.github/workflows/lint_openapi_schema.yml b/.github/workflows/lint_openapi_schema.yml index 4dc692fc273..6d1822a4009 100644 --- a/.github/workflows/lint_openapi_schema.yml +++ b/.github/workflows/lint_openapi_schema.yml @@ -20,7 +20,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8', '3.13'] + python-version: ['3.9', '3.13'] steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/mulled.yaml b/.github/workflows/mulled.yaml index 4d654af6ddb..63044616f2a 100644 --- a/.github/workflows/mulled.yaml +++ b/.github/workflows/mulled.yaml @@ -20,7 +20,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8'] + python-version: ['3.9'] steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/osx_startup.yaml b/.github/workflows/osx_startup.yaml index 13960eb8e85..66228cf37f0 100644 --- a/.github/workflows/osx_startup.yaml +++ b/.github/workflows/osx_startup.yaml @@ -21,7 +21,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8', '3.13'] + python-version: ['3.9', '3.13'] defaults: run: shell: bash -l {0} diff --git a/.github/workflows/performance.yaml b/.github/workflows/performance.yaml index ab4063c51f7..652c578d9af 100644 --- a/.github/workflows/performance.yaml +++ b/.github/workflows/performance.yaml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.8'] + python-version: ['3.9'] services: postgres: image: postgres:13 diff --git a/.github/workflows/publish_artifacts.yaml b/.github/workflows/publish_artifacts.yaml index dded5d1086e..7f08aeed2a0 100644 --- a/.github/workflows/publish_artifacts.yaml +++ b/.github/workflows/publish_artifacts.yaml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.8'] + python-version: ['3.9'] steps: - uses: actions/setup-python@v5 with: diff --git a/.github/workflows/reports_startup.yaml b/.github/workflows/reports_startup.yaml index b7449dc5979..9c73ff643df 100644 --- a/.github/workflows/reports_startup.yaml +++ b/.github/workflows/reports_startup.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8', '3.13'] + python-version: ['3.9', '3.13'] defaults: run: shell: bash -l {0} diff --git a/.github/workflows/selenium.yaml b/.github/workflows/selenium.yaml index 195eb02b3de..03b25b89cc8 100644 --- a/.github/workflows/selenium.yaml +++ b/.github/workflows/selenium.yaml @@ -32,7 +32,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8'] + python-version: ['3.9'] chunk: [0, 1, 2] services: postgres: diff --git a/.github/workflows/test_galaxy_packages.yaml b/.github/workflows/test_galaxy_packages.yaml index f38f05846e7..b47284cd289 100644 --- a/.github/workflows/test_galaxy_packages.yaml +++ b/.github/workflows/test_galaxy_packages.yaml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8', '3.13'] + python-version: ['3.9', '3.13'] steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/toolshed.yaml b/.github/workflows/toolshed.yaml index 14be278e16b..e70cf8c97a6 100644 --- a/.github/workflows/toolshed.yaml +++ b/.github/workflows/toolshed.yaml @@ -21,7 +21,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8', '3.13'] + python-version: ['3.9', '3.13'] shed-api: ['v1', 'v2'] test-install-client: ['galaxy_api', 'standalone'] services: diff --git a/.github/workflows/unit-postgres.yaml b/.github/workflows/unit-postgres.yaml index 92ee7795854..1c884f19bbe 100644 --- a/.github/workflows/unit-postgres.yaml +++ b/.github/workflows/unit-postgres.yaml @@ -22,7 +22,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8'] + python-version: ['3.9'] services: postgres: image: postgres:13 diff --git a/.github/workflows/unit.yaml b/.github/workflows/unit.yaml index 671dcac0162..25fc0d0db7d 100644 --- a/.github/workflows/unit.yaml +++ b/.github/workflows/unit.yaml @@ -20,7 +20,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8', '3.13'] + python-version: ['3.9', '3.13'] steps: - uses: actions/checkout@v4 with: diff --git a/Makefile b/Makefile index 64d649ebf18..80a9f3ba6a7 100644 --- a/Makefile +++ b/Makefile @@ -26,6 +26,14 @@ CWL_TARGETS := test/functional/tools/cwl_tools/v1.0/conformance_tests.yaml \ lib/galaxy_test/api/cwl/test_cwl_conformance_v1_1.py \ lib/galaxy_test/api/cwl/test_cwl_conformance_v1_2.py NO_YARN_MSG="Could not find yarn, which is required to build the Galaxy client.\nIt should be shipped with Galaxy's virtualenv, but to install yarn manually please visit \033[0;34mhttps://yarnpkg.com/en/docs/install\033[0m for instructions, and package information for all platforms.\n" +SPACE := $() $() +NEVER_PYUPGRADE_PATHS := .venv/ .tox/ lib/galaxy/schema/bco/ \ + lib/galaxy/schema/drs/ lib/tool_shed_client/schema/trs \ + scripts/check_python.py tools/ test/functional/tools/cwl_tools/ +PY37_PYUPGRADE_PATHS := lib/galaxy/exceptions/ lib/galaxy/job_metrics/ \ + lib/galaxy/objectstore/ lib/galaxy/tool_util/ lib/galaxy/util/ \ + test/unit/job_metrics/ test/unit/objectstore/ test/unit/tool_util/ \ + test/unit/util/ all: help @echo "This makefile is used for building Galaxy's JS client, documentation, and drive the release process. A sensible all target is not implemented." @@ -54,10 +62,10 @@ format: ## Format Python code base remove-unused-imports: ## Remove unused imports in Python code base $(IN_VENV) autoflake --in-place --remove-all-unused-imports --recursive --verbose lib/ test/ -pyupgrade: ## Convert older code patterns to Python3.7/3.8 idiomatic ones - ack --type=python -f | grep -v '^lib/galaxy/schema/bco/\|^lib/galaxy/schema/drs/\|^lib/tool_shed_client/schema/trs\|^tools/\|^.venv/\|^.tox/\|^lib/galaxy/exceptions/\|^lib/galaxy/job_metrics/\|^lib/galaxy/objectstore/\|^lib/galaxy/tool_util/\|^lib/galaxy/util/\|^test/functional/tools/cwl_tools/' | xargs pyupgrade --py38-plus - ack --type=python -f | grep -v '^lib/galaxy/schema/bco/\|^lib/galaxy/schema/drs/\|^lib/tool_shed_client/schema/trs\|^tools/\|^.venv/\|^.tox/\|^lib/galaxy/exceptions/\|^lib/galaxy/job_metrics/\|^lib/galaxy/objectstore/\|^lib/galaxy/tool_util/\|^lib/galaxy/util/\|^test/functional/tools/cwl_tools/' | xargs auto-walrus - ack --type=python -f lib/galaxy/exceptions/ lib/galaxy/job_metrics/ lib/galaxy/objectstore/ lib/galaxy/tool_util/ lib/galaxy/util/ | xargs pyupgrade --py37-plus +pyupgrade: ## Convert older code patterns to Python 3.7/3.9 idiomatic ones + ack --type=python -f | grep -v '^$(subst $(SPACE),\|^,$(NEVER_PYUPGRADE_PATHS) $(PY37_PYUPGRADE_PATHS))' | xargs pyupgrade --py39-plus + ack --type=python -f | grep -v '^$(subst $(SPACE),\|^,$(NEVER_PYUPGRADE_PATHS) $(PY37_PYUPGRADE_PATHS))' | xargs auto-walrus + ack --type=python -f $(PY37_PYUPGRADE_PATHS) | xargs pyupgrade --py37-plus docs-slides-ready: test -f plantuml.jar || wget http://jaist.dl.sourceforge.net/project/plantuml/plantuml.jar diff --git a/README.rst b/README.rst index 6c4fb522c00..a2ae0f9125d 100644 --- a/README.rst +++ b/README.rst @@ -24,12 +24,12 @@ Community support is available at `Galaxy Help Galaxy Quickstart ================= -Galaxy requires Python 3.8 or higher. To check your Python version, run: +Galaxy requires Python 3.9 or higher. To check your Python version, run: .. code:: console $ python -V - Python 3.8.18 + Python 3.9.21 Start Galaxy: diff --git a/lib/galaxy/datatypes/sniff.py b/lib/galaxy/datatypes/sniff.py index 310ee9d21c7..7a36ec764cc 100644 --- a/lib/galaxy/datatypes/sniff.py +++ b/lib/galaxy/datatypes/sniff.py @@ -119,9 +119,10 @@ def convert_newlines( converted_regex = False NEWLINE_BYTE = 10 CR_BYTE = 13 - with tempfile.NamedTemporaryFile(mode="wb", prefix=tmp_prefix, dir=tmp_dir, delete=False) as fp, open( - fname, mode="rb" - ) as fi: + with ( + tempfile.NamedTemporaryFile(mode="wb", prefix=tmp_prefix, dir=tmp_dir, delete=False) as fp, + open(fname, mode="rb") as fi, + ): last_char = None block = fi.read(block_size) last_block = b"" @@ -171,9 +172,10 @@ def convert_sep2tabs( i = 0 converted_newlines = False converted_regex = False - with tempfile.NamedTemporaryFile(mode="wb", prefix=tmp_prefix, dir=tmp_dir, delete=False) as fp, open( - fname, mode="rb" - ) as fi: + with ( + tempfile.NamedTemporaryFile(mode="wb", prefix=tmp_prefix, dir=tmp_dir, delete=False) as fp, + open(fname, mode="rb") as fi, + ): block = fi.read(block_size) while block: if block: diff --git a/lib/galaxy/dependencies/__init__.py b/lib/galaxy/dependencies/__init__.py index 7ded543fa8b..7c11dd4de21 100644 --- a/lib/galaxy/dependencies/__init__.py +++ b/lib/galaxy/dependencies/__init__.py @@ -315,7 +315,7 @@ class ConditionalDependencies: return self.pkce_support def check_rucio_clients(self): - return "rucio" in self.object_stores and sys.version_info >= (3, 9) + return "rucio" in self.object_stores def optional(config_file=None): diff --git a/lib/galaxy/dependencies/dev-requirements.txt b/lib/galaxy/dependencies/dev-requirements.txt index 21eb4355574..e756c00cfdd 100644 --- a/lib/galaxy/dependencies/dev-requirements.txt +++ b/lib/galaxy/dependencies/dev-requirements.txt @@ -1,26 +1,18 @@ # This file was autogenerated by uv via the following command: # uv export --frozen --no-hashes --only-group=dev -aiohappyeyeballs==2.4.4 ; python_full_version < '3.9' -aiohappyeyeballs==2.4.6 ; python_full_version >= '3.9' -aiohttp==3.10.11 ; python_full_version < '3.9' -aiohttp==3.11.12 ; python_full_version >= '3.9' -aiosignal==1.3.1 ; python_full_version < '3.9' -aiosignal==1.3.2 ; python_full_version >= '3.9' -alabaster==0.7.13 ; python_full_version < '3.9' -alabaster==0.7.16 ; python_full_version == '3.9.*' +aiohappyeyeballs==2.4.6 +aiohttp==3.11.12 +aiosignal==1.3.2 +alabaster==0.7.16 ; python_full_version < '3.10' alabaster==1.0.0 ; python_full_version >= '3.10' -anyio==4.5.2 ; python_full_version < '3.9' -anyio==4.8.0 ; python_full_version >= '3.9' -ase==3.23.0 ; python_full_version < '3.9' -ase==3.24.0 ; python_full_version >= '3.9' +anyio==4.8.0 +ase==3.24.0 async-timeout==5.0.1 ; python_full_version < '3.11' attrs==25.1.0 axe-selenium-python==2.1.6 babel==2.17.0 backports-tarfile==1.2.0 ; python_full_version < '3.12' and platform_machine != 'ppc64le' and platform_machine != 's390x' -backports-zoneinfo==0.2.1 ; python_full_version < '3.9' -black==24.8.0 ; python_full_version < '3.9' -black==25.1.0 ; python_full_version >= '3.9' +black==25.1.0 boto3==1.36.23 botocore==1.36.23 build==1.2.2.post1 @@ -31,25 +23,21 @@ charset-normalizer==3.4.1 click==8.1.8 codespell==2.4.1 colorama==0.4.6 ; os_name == 'nt' or sys_platform == 'win32' -contourpy==1.1.1 ; python_full_version < '3.9' -contourpy==1.3.0 ; python_full_version == '3.9.*' +contourpy==1.3.0 ; python_full_version < '3.10' contourpy==1.3.1 ; python_full_version >= '3.10' -coverage==7.6.1 ; python_full_version < '3.9' -coverage==7.6.12 ; python_full_version >= '3.9' +coverage==7.6.12 cryptography==44.0.1 cwltest==2.5.20241122133319 cycler==0.12.1 darker==2.1.1 darkgraylib==1.2.1 -decorator==5.1.1 ; python_full_version >= '3.9' +decorator==5.2.0 defusedxml==0.7.1 deprecated==1.2.18 -docutils==0.20.1 ; python_full_version < '3.9' -docutils==0.21.2 ; python_full_version >= '3.9' -dogpile-cache==1.3.4 ; python_full_version >= '3.9' +docutils==0.21.2 +dogpile-cache==1.3.4 exceptiongroup==1.2.2 ; python_full_version < '3.11' -filelock==3.16.1 ; python_full_version < '3.9' -filelock==3.17.0 ; python_full_version >= '3.9' +filelock==3.17.0 fluent-logger==0.11.1 fonttools==4.56.0 frozenlist==1.5.0 @@ -62,168 +50,128 @@ httpx==0.28.1 id==1.5.0 idna==3.10 imagesize==1.4.1 -importlib-metadata==8.5.0 ; python_full_version < '3.9' -importlib-metadata==8.6.1 ; (python_full_version >= '3.9' and python_full_version < '3.10.2' and platform_machine == 'ppc64le') or (python_full_version >= '3.9' and python_full_version < '3.10.2' and platform_machine == 's390x') or (python_full_version >= '3.9' and python_full_version < '3.12' and platform_machine != 'ppc64le' and platform_machine != 's390x') -importlib-resources==6.4.5 ; python_full_version < '3.9' -importlib-resources==6.5.2 ; python_full_version == '3.9.*' +importlib-metadata==8.6.1 ; (python_full_version < '3.10.2' and platform_machine == 'ppc64le') or (python_full_version < '3.10.2' and platform_machine == 's390x') or (python_full_version < '3.12' and platform_machine != 'ppc64le' and platform_machine != 's390x') +importlib-resources==6.5.2 ; python_full_version < '3.10' iniconfig==2.0.0 -isodate==0.6.1 ; python_full_version < '3.9' -isodate==0.7.2 ; python_full_version >= '3.9' and python_full_version < '3.11' -isort==5.13.2 ; python_full_version < '3.9' -isort==6.0.0 ; python_full_version >= '3.9' +isodate==0.7.2 ; python_full_version < '3.11' +isort==6.0.0 jaraco-classes==3.4.0 ; platform_machine != 'ppc64le' and platform_machine != 's390x' jaraco-context==6.0.1 ; platform_machine != 'ppc64le' and platform_machine != 's390x' jaraco-functools==4.1.0 ; platform_machine != 'ppc64le' and platform_machine != 's390x' jeepney==0.8.0 ; platform_machine != 'ppc64le' and platform_machine != 's390x' and sys_platform == 'linux' jinja2==3.1.5 jmespath==1.0.1 -jsonschema==4.23.0 ; python_full_version >= '3.9' -jsonschema-specifications==2023.12.1 ; python_version < '0' -jsonschema-specifications==2024.10.1 ; python_full_version >= '3.9' +jsonschema==4.23.0 +jsonschema-specifications==2024.10.1 junit-xml==1.9 -keyring==25.5.0 ; python_full_version < '3.9' and platform_machine != 'ppc64le' and platform_machine != 's390x' -keyring==25.6.0 ; python_full_version >= '3.9' and platform_machine != 'ppc64le' and platform_machine != 's390x' +keyring==25.6.0 ; platform_machine != 'ppc64le' and platform_machine != 's390x' kiwisolver==1.4.7 ; python_full_version < '3.10' kiwisolver==1.4.8 ; python_full_version >= '3.10' lxml==5.3.1 markdown-it-py==3.0.0 markdown-it-reporter==0.0.2 -markupsafe==2.1.5 ; python_full_version < '3.9' -markupsafe==3.0.2 ; python_full_version >= '3.9' -matplotlib==3.7.5 ; python_full_version < '3.9' -matplotlib==3.9.4 ; python_full_version == '3.9.*' +markupsafe==3.0.2 +matplotlib==3.9.4 ; python_full_version < '3.10' matplotlib==3.10.0 ; python_full_version >= '3.10' mdit-py-plugins==0.4.2 mdurl==0.1.2 -mirakuru==2.5.2 ; python_full_version < '3.9' -mirakuru==2.6.0 ; python_full_version >= '3.9' +mirakuru==2.6.0 mistune==3.0.2 -more-itertools==10.5.0 ; python_full_version < '3.9' and platform_machine != 'ppc64le' and platform_machine != 's390x' -more-itertools==10.6.0 ; python_full_version >= '3.9' and platform_machine != 'ppc64le' and platform_machine != 's390x' +more-itertools==10.6.0 ; platform_machine != 'ppc64le' and platform_machine != 's390x' msgpack==1.1.0 multidict==6.1.0 mypy-extensions==1.0.0 myst-parser==3.0.1 ; python_full_version < '3.10' myst-parser==4.0.1 ; python_full_version >= '3.10' nh3==0.2.20 -numpy==1.24.4 ; python_full_version < '3.9' -numpy==2.0.2 ; python_full_version == '3.9.*' +numpy==2.0.2 ; python_full_version < '3.10' numpy==2.2.3 ; python_full_version >= '3.10' onedatafilerestclient==21.2.5.2 outcome==1.3.0.post0 packaging==24.2 pathspec==0.12.1 -pbr==6.1.1 ; python_full_version >= '3.9' -pillow==10.4.0 ; python_full_version < '3.9' -pillow==11.1.0 ; python_full_version >= '3.9' +pbr==6.1.1 +pillow==11.1.0 pkce==1.0.3 -pkgutil-resolve-name==1.3.10 ; python_version < '0' platformdirs==4.3.6 -playwright==1.48.0 ; python_full_version < '3.9' -playwright==1.50.0 ; python_full_version >= '3.9' +playwright==1.50.0 pluggy==1.5.0 -port-for==0.7.3 ; python_full_version < '3.9' -port-for==0.7.4 ; python_full_version >= '3.9' -prettytable==3.11.0 ; python_full_version < '3.9' -prettytable==3.14.0 ; python_full_version >= '3.9' -propcache==0.2.0 ; python_full_version < '3.9' -propcache==0.3.0 ; python_full_version >= '3.9' +port-for==0.7.4 +prettytable==3.14.0 +propcache==0.3.0 psutil==7.0.0 ; sys_platform != 'cygwin' -psycopg==3.2.4 +psycopg==3.2.5 pycparser==2.22 -pyee==12.0.0 ; python_full_version < '3.9' -pyee==12.1.1 ; python_full_version >= '3.9' +pyee==12.1.1 pygithub==2.6.1 pygments==2.19.1 -pyjwt==2.9.0 ; python_full_version < '3.9' -pyjwt==2.10.1 ; python_full_version >= '3.9' +pyjwt==2.10.1 pynacl==1.5.0 -pyparsing==3.1.4 ; python_full_version < '3.9' -pyparsing==3.2.1 ; python_full_version >= '3.9' +pyparsing==3.2.1 pyproject-hooks==1.2.0 pysocks==1.7.1 pytest==7.4.4 pytest-asyncio==0.23.8 pytest-base-url==2.1.0 -pytest-cov==5.0.0 ; python_full_version < '3.9' -pytest-cov==6.0.0 ; python_full_version >= '3.9' +pytest-cov==6.0.0 pytest-html==4.1.1 pytest-httpserver==1.1.1 pytest-json-report==1.5.0 pytest-metadata==3.1.1 pytest-mock==3.14.0 -pytest-playwright==0.5.2 ; python_full_version < '3.9' -pytest-playwright==0.7.0 ; python_full_version >= '3.9' -pytest-postgresql==6.1.1 +pytest-playwright==0.7.0 +pytest-postgresql==7.0.0 pytest-shard==0.1.2 python-dateutil==2.9.0.post0 python-irodsclient==3.0.0 python-slugify==8.0.4 -pytz==2025.1 ; python_full_version < '3.9' pywin32-ctypes==0.2.3 ; platform_machine != 'ppc64le' and platform_machine != 's390x' and sys_platform == 'win32' pyyaml==6.0.2 -rdflib==6.3.2 ; python_full_version < '3.8.1' -rdflib==7.0.0 ; python_full_version >= '3.8.1' and python_full_version < '3.9' -rdflib==7.1.3 ; python_full_version >= '3.9' -readme-renderer==43.0 ; python_full_version < '3.9' -readme-renderer==44.0 ; python_full_version >= '3.9' -referencing==0.35.1 ; python_version < '0' -referencing==0.36.2 ; python_full_version >= '3.9' +rdflib==7.1.3 +readme-renderer==44.0 +referencing==0.36.2 requests==2.32.3 requests-toolbelt==1.0.0 responses==0.25.6 rfc3986==2.0.0 rich==13.9.4 -roman-numerals-py==3.0.0 ; python_full_version >= '3.11' -rpds-py==0.20.1 ; python_version < '0' -rpds-py==0.23.1 ; python_full_version >= '3.9' +roman-numerals-py==3.1.0 ; python_full_version >= '3.11' +rpds-py==0.23.1 ruamel-yaml==0.18.10 -ruamel-yaml-clib==0.2.8 ; python_full_version < '3.9' and platform_python_implementation == 'CPython' -ruamel-yaml-clib==0.2.12 ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' -rucio-clients==36.3.0 ; python_full_version >= '3.9' +ruamel-yaml-clib==0.2.12 ; python_full_version < '3.13' and platform_python_implementation == 'CPython' +rucio-clients==36.3.0 s3transfer==0.11.2 -schema-salad==8.7.20241010092723 ; python_full_version < '3.9' -schema-salad==8.8.20250205075315 ; python_full_version >= '3.9' -scipy==1.10.1 ; python_full_version < '3.9' -scipy==1.13.1 ; python_full_version == '3.9.*' +schema-salad==8.8.20250205075315 +scipy==1.13.1 ; python_full_version < '3.10' scipy==1.15.2 ; python_full_version >= '3.10' secretstorage==3.3.3 ; platform_machine != 'ppc64le' and platform_machine != 's390x' and sys_platform == 'linux' -selenium==4.27.1 ; python_full_version < '3.9' -selenium==4.29.0 ; python_full_version >= '3.9' +selenium==4.29.0 seletools==1.5.0 -setuptools==75.3.0 ; python_full_version < '3.9' -setuptools==75.8.0 ; python_full_version >= '3.9' +setuptools==75.8.0 six==1.17.0 sniffio==1.3.1 snowballstemmer==2.2.0 sortedcontainers==2.4.0 -sphinx==7.1.2 ; python_full_version < '3.9' -sphinx==7.4.7 ; python_full_version == '3.9.*' +sphinx==7.4.7 ; python_full_version < '3.10' sphinx==8.1.3 ; python_full_version == '3.10.*' sphinx==8.2.1 ; python_full_version >= '3.11' sphinx-rtd-theme==3.0.2 -sphinxcontrib-applehelp==1.0.4 ; python_full_version < '3.9' -sphinxcontrib-applehelp==2.0.0 ; python_full_version >= '3.9' -sphinxcontrib-devhelp==1.0.2 ; python_full_version < '3.9' -sphinxcontrib-devhelp==2.0.0 ; python_full_version >= '3.9' -sphinxcontrib-htmlhelp==2.0.1 ; python_full_version < '3.9' -sphinxcontrib-htmlhelp==2.1.0 ; python_full_version >= '3.9' +sphinxcontrib-applehelp==2.0.0 +sphinxcontrib-devhelp==2.0.0 +sphinxcontrib-htmlhelp==2.1.0 sphinxcontrib-jquery==4.1 sphinxcontrib-jsmath==1.0.1 -sphinxcontrib-qthelp==1.0.3 ; python_full_version < '3.9' -sphinxcontrib-qthelp==2.0.0 ; python_full_version >= '3.9' -sphinxcontrib-serializinghtml==1.1.5 ; python_full_version < '3.9' -sphinxcontrib-serializinghtml==2.0.0 ; python_full_version >= '3.9' +sphinxcontrib-qthelp==2.0.0 +sphinxcontrib-serializinghtml==2.0.0 statsd==4.0.1 -stevedore==5.4.1 ; python_full_version >= '3.9' -tabulate==0.9.0 ; python_full_version >= '3.9' +stevedore==5.4.1 +tabulate==0.9.0 testfixtures==8.3.0 text-unidecode==1.3 tinydb==4.8.2 toml==0.10.2 tomli==2.2.1 ; python_full_version <= '3.11' -trio==0.27.0 ; python_full_version < '3.9' -trio==0.29.0 ; python_full_version >= '3.9' +trio==0.29.0 trio-websocket==0.12.1 tuspy==1.1.0 twill==3.3 @@ -232,15 +180,11 @@ typing-extensions==4.12.2 tzdata==2025.1 ; sys_platform == 'win32' urllib3==1.26.20 ; python_full_version < '3.10' urllib3==2.3.0 ; python_full_version >= '3.10' -watchdog==4.0.2 ; python_full_version < '3.9' -watchdog==6.0.0 ; python_full_version >= '3.9' +watchdog==6.0.0 wcwidth==0.2.13 websocket-client==1.8.0 -werkzeug==3.0.6 ; python_full_version < '3.9' -werkzeug==3.1.3 ; python_full_version >= '3.9' +werkzeug==3.1.3 wrapt==1.17.2 wsproto==1.2.0 -yarl==1.15.2 ; python_full_version < '3.9' -yarl==1.18.3 ; python_full_version >= '3.9' -zipp==3.20.2 ; python_full_version < '3.9' -zipp==3.21.0 ; (python_full_version >= '3.9' and python_full_version < '3.10.2' and platform_machine == 'ppc64le') or (python_full_version >= '3.9' and python_full_version < '3.10.2' and platform_machine == 's390x') or (python_full_version >= '3.9' and python_full_version < '3.12' and platform_machine != 'ppc64le' and platform_machine != 's390x') +yarl==1.18.3 +zipp==3.21.0 ; (python_full_version < '3.10.2' and platform_machine == 'ppc64le') or (python_full_version < '3.10.2' and platform_machine == 's390x') or (python_full_version < '3.12' and platform_machine != 'ppc64le' and platform_machine != 's390x') diff --git a/lib/galaxy/dependencies/pinned-requirements.txt b/lib/galaxy/dependencies/pinned-requirements.txt index 0b22bd452d4..4ab8da70ac1 100644 --- a/lib/galaxy/dependencies/pinned-requirements.txt +++ b/lib/galaxy/dependencies/pinned-requirements.txt @@ -5,20 +5,15 @@ adal==1.2.7 aiobotocore==2.20.0 aiodataloader==0.4.2 aiofiles==24.1.0 -aiohappyeyeballs==2.4.4 ; python_full_version < '3.9' -aiohappyeyeballs==2.4.6 ; python_full_version >= '3.9' -aiohttp==3.10.11 ; python_full_version < '3.9' -aiohttp==3.11.12 ; python_full_version >= '3.9' +aiohappyeyeballs==2.4.6 +aiohttp==3.11.12 aioitertools==0.12.0 -aiosignal==1.3.1 ; python_full_version < '3.9' -aiosignal==1.3.2 ; python_full_version >= '3.9' +aiosignal==1.3.2 alembic==1.14.1 amqp==5.3.1 annotated-types==0.7.0 -anyio==4.5.2 ; python_full_version < '3.9' -anyio==4.8.0 ; python_full_version >= '3.9' -apispec==6.6.1 ; python_full_version < '3.9' -apispec==6.8.1 ; python_full_version >= '3.9' +anyio==4.8.0 +apispec==6.8.1 appdirs==1.4.4 arcp==0.2.1 argcomplete==3.5.3 @@ -26,7 +21,6 @@ async-timeout==5.0.1 ; python_full_version < '3.11' attmap==0.13.2 attrs==25.1.0 babel==2.17.0 -backports-zoneinfo==0.2.1 ; python_full_version < '3.9' bagit==1.8.1 bagit-profile==1.3.1 bcrypt==4.2.1 @@ -34,8 +28,7 @@ bdbag==1.7.3 beaker==1.13.0 billiard==4.2.1 bioblend==1.4.0 -bleach==6.1.0 ; python_full_version < '3.9' -bleach==6.2.0 ; python_full_version >= '3.9' +bleach==6.2.0 boltons==25.0.0 boto==2.49.0 botocore==1.36.23 @@ -57,34 +50,26 @@ coloredlogs==15.0.1 conda-package-streaming==0.11.0 cryptography==44.0.1 ct3==3.4.0 -cwl-upgrader==1.2.11 ; python_full_version < '3.9' -cwl-upgrader==1.2.12 ; python_full_version >= '3.9' -cwl-utils==0.35 ; python_full_version < '3.9' -cwl-utils==0.37 ; python_full_version >= '3.9' -cwltool==3.1.20241007082533 ; python_full_version < '3.9' -cwltool==3.1.20250110105449 ; python_full_version >= '3.9' +cwl-upgrader==1.2.12 +cwl-utils==0.37 +cwltool==3.1.20250110105449 defusedxml==0.7.1 deprecation==2.1.0 dictobj==0.4 -dnspython==2.6.1 ; python_full_version < '3.9' -dnspython==2.7.0 ; python_full_version >= '3.9' +dnspython==2.7.0 docopt==0.6.2 -docutils==0.20.1 ; python_full_version < '3.9' -docutils==0.21.2 ; python_full_version >= '3.9' +docutils==0.21.2 dparse==0.6.4 edam-ontology==1.25.2 email-validator==2.2.0 exceptiongroup==1.2.2 ; python_full_version < '3.11' fastapi-slim==0.115.8 -filelock==3.16.1 ; python_full_version < '3.9' -filelock==3.17.0 ; python_full_version >= '3.9' +filelock==3.17.0 fissix==24.4.24 ; python_full_version >= '3.13' frozenlist==1.5.0 fs==2.4.16 -fsspec==2024.10.0 ; python_full_version < '3.9' -fsspec==2025.2.0 ; python_full_version >= '3.9' +fsspec==2025.2.0 future==1.0.0 -galaxy2cwl==0.1.4 ; python_full_version < '3.9' graphene==3.4.3 graphene-sqlalchemy==3.0.0rc2 graphql-core==3.2.6 @@ -95,24 +80,19 @@ gunicorn==23.0.0 gxformat2==0.20.0 h11==0.14.0 h5grove==2.3.0 -h5py==3.11.0 ; python_full_version < '3.9' -h5py==3.13.0 ; python_full_version >= '3.9' +h5py==3.13.0 humanfriendly==10.0 idna==3.10 -importlib-metadata==8.5.0 ; python_full_version < '3.9' -importlib-metadata==8.6.1 ; python_full_version >= '3.9' -importlib-resources==6.4.5 ; python_full_version < '3.9' -importlib-resources==6.5.2 ; python_full_version >= '3.9' and python_full_version < '3.12' +importlib-metadata==8.6.1 +importlib-resources==6.5.2 ; python_full_version < '3.12' isa-rwval @ git+https://github.com/nsoranzo/isa-rwval.git@3d989181058d2765a93cb0e7ca85d6955e0eb6ef isal==1.7.1 -isodate==0.6.1 ; python_full_version < '3.9' -isodate==0.7.2 ; python_full_version >= '3.9' and python_full_version < '3.11' +isodate==0.7.2 ; python_full_version < '3.11' jinja2==3.1.5 jmespath==1.0.1 jsonref==1.1.0 jsonschema==4.23.0 -jsonschema-specifications==2023.12.1 ; python_full_version < '3.9' -jsonschema-specifications==2024.10.1 ; python_full_version >= '3.9' +jsonschema-specifications==2024.10.1 kombu==5.4.2 lagom==2.7.5 legacy-cgi==2.6.2 ; python_full_version >= '3.13' @@ -120,8 +100,7 @@ lxml==5.3.1 mako==1.3.9 markdown==3.7 markdown-it-py==3.0.0 -markupsafe==2.1.5 ; python_full_version < '3.9' -markupsafe==3.0.2 ; python_full_version >= '3.9' +markupsafe==3.0.2 mdurl==0.1.2 mercurial==6.9.2 mistune==3.0.2 @@ -130,12 +109,10 @@ msal==1.31.1 msgpack==1.1.0 multidict==6.1.0 mypy-extensions==1.0.0 -networkx==3.1 ; python_full_version < '3.9' -networkx==3.2.1 ; python_full_version == '3.9.*' +networkx==3.2.1 ; python_full_version < '3.10' networkx==3.4.2 ; python_full_version >= '3.10' nodeenv==1.9.1 -numpy==1.24.4 ; python_full_version < '3.9' -numpy==2.0.2 ; python_full_version == '3.9.*' +numpy==2.0.2 ; python_full_version < '3.10' numpy==2.2.3 ; python_full_version >= '3.10' oauthlib==3.2.2 orjson==3.10.15 @@ -146,13 +123,10 @@ parsley==1.3 paste==3.10.1 pastedeploy==3.1.0 pebble==5.1.0 -pillow==10.4.0 ; python_full_version < '3.9' -pillow==11.1.0 ; python_full_version >= '3.9' -pkgutil-resolve-name==1.3.10 ; python_full_version < '3.9' +pillow==11.1.0 promise==2.3 prompt-toolkit==3.0.50 -propcache==0.2.0 ; python_full_version < '3.9' -propcache==0.3.0 ; python_full_version >= '3.9' +propcache==0.3.0 prov==1.5.1 psutil==7.0.0 pulsar-galaxy-lib==0.15.6 @@ -165,13 +139,11 @@ pydot==2.0.0 pyeventsystem==0.1.0 pyfaidx==0.8.1.3 pygments==2.19.1 -pyjwt==2.9.0 ; python_full_version < '3.9' -pyjwt==2.10.1 ; python_full_version >= '3.9' +pyjwt==2.10.1 pykwalify==1.8.0 pylibmagic==0.5.0 pynacl==1.5.0 -pyparsing==3.1.4 ; python_full_version < '3.9' -pyparsing==3.2.1 ; python_full_version >= '3.9' +pyparsing==3.2.1 pyreadline3==3.5.4 ; sys_platform == 'win32' pysam==0.23.0 python-dateutil==2.9.0.post0 @@ -182,11 +154,8 @@ python3-openid==3.2.0 pytz==2025.1 pyyaml==6.0.2 pyzmq==26.2.1 -rdflib==6.3.2 ; python_full_version < '3.8.1' -rdflib==7.0.0 ; python_full_version >= '3.8.1' and python_full_version < '3.9' -rdflib==7.1.3 ; python_full_version >= '3.9' -referencing==0.35.1 ; python_full_version < '3.9' -referencing==0.36.2 ; python_full_version >= '3.9' +rdflib==7.1.3 +referencing==0.36.2 refgenconf==0.12.2 regex==2024.11.6 repoze-lru==0.7 @@ -195,41 +164,32 @@ requests-oauthlib==2.0.0 requests-toolbelt==1.0.0 requests-unixsocket==0.3.0 rich==13.9.4 -rich-argparse==1.7.0 ; python_full_version >= '3.9' -rocrate==0.11.0 ; python_full_version < '3.9' -rocrate==0.13.0 ; python_full_version >= '3.9' +rich-argparse==1.7.0 +rocrate==0.13.0 routes==2.5.1 -rpds-py==0.20.1 ; python_full_version < '3.9' -rpds-py==0.23.1 ; python_full_version >= '3.9' +rpds-py==0.23.1 ruamel-yaml==0.18.10 -ruamel-yaml-clib==0.2.8 ; python_full_version < '3.9' and platform_python_implementation == 'CPython' -ruamel-yaml-clib==0.2.12 ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' -s3fs==2024.10.0 ; python_full_version < '3.9' -s3fs==2025.2.0 ; python_full_version >= '3.9' -schema-salad==8.7.20241010092723 ; python_full_version < '3.9' -schema-salad==8.8.20250205075315 ; python_full_version >= '3.9' -setuptools==75.3.0 ; python_full_version < '3.9' -setuptools==75.8.0 ; python_full_version >= '3.9' +ruamel-yaml-clib==0.2.12 ; python_full_version < '3.13' and platform_python_implementation == 'CPython' +s3fs==2025.2.0 +schema-salad==8.8.20250205075315 +setuptools==75.8.0 setuptools-scm==5.0.2 six==1.17.0 sniffio==1.3.1 -social-auth-core==4.5.4 ; python_full_version < '3.9' -social-auth-core==4.5.6 ; python_full_version >= '3.9' +social-auth-core==4.5.6 sortedcontainers==2.4.0 spython==0.3.14 sqlalchemy==2.0.38 sqlitedict==2.1.0 sqlparse==0.5.3 -starlette==0.44.0 ; python_full_version < '3.9' -starlette==0.45.3 ; python_full_version >= '3.9' +starlette==0.45.3 starlette-context==0.3.6 starlette-graphene3==0.6.0 supervisor==4.2.5 svgwrite==1.4.3 tenacity==9.0.0 text-unidecode==1.3 -tifffile==2023.7.10 ; python_full_version < '3.9' -tifffile==2024.8.30 ; python_full_version == '3.9.*' +tifffile==2024.8.30 ; python_full_version < '3.10' tifffile==2025.2.18 ; python_full_version >= '3.10' tinydb==4.8.2 tomli==2.2.1 ; python_full_version < '3.11' @@ -239,13 +199,11 @@ tuspy==1.1.0 tuswsgi==0.5.5 typing-extensions==4.12.2 tzdata==2025.1 -tzlocal==5.2 ; python_full_version < '3.9' -tzlocal==5.3 ; python_full_version >= '3.9' +tzlocal==5.3 ubiquerg==0.8.0 urllib3==1.26.20 ; python_full_version < '3.10' urllib3==2.3.0 ; python_full_version >= '3.10' -uvicorn==0.33.0 ; python_full_version < '3.9' -uvicorn==0.34.0 ; python_full_version >= '3.9' +uvicorn==0.34.0 uvloop==0.21.0 vine==5.1.0 wcwidth==0.2.13 @@ -254,9 +212,7 @@ webob==1.8.9 whoosh==2.7.4 wrapt==1.17.2 yacman==0.9.3 -yarl==1.15.2 ; python_full_version < '3.9' -yarl==1.18.3 ; python_full_version >= '3.9' -zipp==3.20.2 ; python_full_version < '3.9' -zipp==3.21.0 ; python_full_version >= '3.9' +yarl==1.18.3 +zipp==3.21.0 zipstream-new==1.1.8 zstandard==0.23.0 diff --git a/lib/galaxy/dependencies/pinned-typecheck-requirements.txt b/lib/galaxy/dependencies/pinned-typecheck-requirements.txt index c0703cbd9f6..5b4a031ab23 100644 --- a/lib/galaxy/dependencies/pinned-typecheck-requirements.txt +++ b/lib/galaxy/dependencies/pinned-typecheck-requirements.txt @@ -6,8 +6,7 @@ botocore-stubs==1.36.26 cffi==1.17.1 ; platform_python_implementation != 'PyPy' cryptography==44.0.1 lxml-stubs==0.5.1 -mypy==1.14.1 ; python_full_version < '3.9' -mypy==1.15.0 ; python_full_version >= '3.9' +mypy==1.15.0 mypy-boto3-s3==1.36.21 mypy-extensions==1.0.0 pycparser==2.22 ; platform_python_implementation != 'PyPy' @@ -29,8 +28,7 @@ types-pyyaml==6.0.12.20241230 types-requests==2.31.0.6 ; python_full_version < '3.10' types-requests==2.32.0.20241016 ; python_full_version >= '3.10' types-s3transfer==0.11.2 -types-setuptools==75.8.0.20250110 ; python_full_version < '3.9' -types-setuptools==75.8.0.20250210 ; python_full_version >= '3.9' +types-setuptools==75.8.0.20250210 types-six==1.17.0.20241205 types-urllib3==1.26.25.14 ; python_full_version < '3.10' typing-extensions==4.12.2 diff --git a/lib/galaxy/dependencies/update_lint_requirements.sh b/lib/galaxy/dependencies/update_lint_requirements.sh index 623f95f54dc..9fc43257355 100755 --- a/lib/galaxy/dependencies/update_lint_requirements.sh +++ b/lib/galaxy/dependencies/update_lint_requirements.sh @@ -10,7 +10,7 @@ THIS_DIRECTORY="$(cd "$(dirname "$0")" > /dev/null && pwd)" update_pinned_reqs() { VENV=$(mktemp -d "${TMPDIR:-/tmp}/$1_venv.XXXXXXXXXX") - python3.8 -m venv "${VENV}" + python3.9 -m venv "${VENV}" . "${VENV}/bin/activate" pip install --upgrade pip setuptools pip install -r "${THIS_DIRECTORY}/$1-requirements.txt" diff --git a/lib/galaxy/files/sources/elabftw.py b/lib/galaxy/files/sources/elabftw.py index a3e8439fc73..9861aefce56 100644 --- a/lib/galaxy/files/sources/elabftw.py +++ b/lib/galaxy/files/sources/elabftw.py @@ -888,11 +888,14 @@ class eLabFTWFilesSource(BaseFilesSource): # noqa f"?format=binary", ) try: - with session.get( - url, - timeout=(CONNECT_TIMEOUT, READ_TIMEOUT), - stream=True, - ) as response, open(native_path, "wb") as file: + with ( + session.get( + url, + timeout=(CONNECT_TIMEOUT, READ_TIMEOUT), + stream=True, + ) as response, + open(native_path, "wb") as file, + ): response.raise_for_status() for chunk in response.iter_content(512): file.write(chunk) diff --git a/lib/galaxy/model/__init__.py b/lib/galaxy/model/__init__.py index 1063fb16611..552e4a85511 100644 --- a/lib/galaxy/model/__init__.py +++ b/lib/galaxy/model/__init__.py @@ -10103,12 +10103,12 @@ class PSAAssociation(Base, AssociationMixin, RepresentById): __tablename__ = "psa_association" id: Mapped[int] = mapped_column(primary_key=True) - server_url: Mapped[Optional[str]] = mapped_column(VARCHAR(255)) # type: ignore[assignment, unused-ignore] # needed for social-auth-core Mixin class attributes. unused-ignore needed for older social-auth-core on Python 3.8 - handle: Mapped[Optional[str]] = mapped_column(VARCHAR(255)) # type:ignore[assignment, unused-ignore] - secret: Mapped[Optional[str]] = mapped_column(VARCHAR(255)) # type:ignore[assignment, unused-ignore] - issued: Mapped[Optional[int]] # type:ignore[assignment, unused-ignore] - lifetime: Mapped[Optional[int]] # type:ignore[assignment, unused-ignore] - assoc_type: Mapped[Optional[str]] = mapped_column(VARCHAR(64)) # type:ignore[assignment, unused-ignore] + server_url: Mapped[Optional[str]] = mapped_column(VARCHAR(255)) # type: ignore[assignment] # needed for social-auth-core Mixin class attributes + handle: Mapped[Optional[str]] = mapped_column(VARCHAR(255)) # type:ignore[assignment] + secret: Mapped[Optional[str]] = mapped_column(VARCHAR(255)) # type:ignore[assignment] + issued: Mapped[Optional[int]] # type:ignore[assignment] + lifetime: Mapped[Optional[int]] # type:ignore[assignment] + assoc_type: Mapped[Optional[str]] = mapped_column(VARCHAR(64)) # type:ignore[assignment] # This static property is set at: galaxy.authnz.psa_authnz.PSAAuthnz sa_session = None @@ -10165,8 +10165,8 @@ class PSACode(Base, CodeMixin, RepresentById): __table_args__ = (UniqueConstraint("code", "email"),) id: Mapped[int] = mapped_column(primary_key=True) - email: Mapped[Optional[str]] = mapped_column(VARCHAR(200)) # type:ignore[assignment, unused-ignore] - code: Mapped[Optional[str]] = mapped_column(VARCHAR(32)) # type:ignore[assignment, unused-ignore] + email: Mapped[Optional[str]] = mapped_column(VARCHAR(200)) # type:ignore[assignment] + code: Mapped[Optional[str]] = mapped_column(VARCHAR(32)) # type:ignore[assignment] # This static property is set at: galaxy.authnz.psa_authnz.PSAAuthnz sa_session = None @@ -10192,9 +10192,9 @@ class PSANonce(Base, NonceMixin, RepresentById): __tablename__ = "psa_nonce" id: Mapped[int] = mapped_column(primary_key=True) - server_url: Mapped[Optional[str]] = mapped_column(VARCHAR(255)) # type:ignore[assignment, unused-ignore] - timestamp: Mapped[Optional[int]] # type:ignore[assignment, unused-ignore] - salt: Mapped[Optional[str]] = mapped_column(VARCHAR(40)) # type:ignore[assignment, unused-ignore] + server_url: Mapped[Optional[str]] = mapped_column(VARCHAR(255)) # type:ignore[assignment] + timestamp: Mapped[Optional[int]] # type:ignore[assignment] + salt: Mapped[Optional[str]] = mapped_column(VARCHAR(40)) # type:ignore[assignment] # This static property is set at: galaxy.authnz.psa_authnz.PSAAuthnz sa_session = None @@ -10228,10 +10228,10 @@ class PSAPartial(Base, PartialMixin, RepresentById): __tablename__ = "psa_partial" id: Mapped[int] = mapped_column(primary_key=True) - token: Mapped[Optional[str]] = mapped_column(VARCHAR(32)) # type:ignore[assignment, unused-ignore] - data: Mapped[Optional[str]] = mapped_column(TEXT) # type:ignore[assignment, unused-ignore] - next_step: Mapped[Optional[int]] # type:ignore[assignment, unused-ignore] - backend: Mapped[Optional[str]] = mapped_column(VARCHAR(32)) # type:ignore[assignment, unused-ignore] + token: Mapped[Optional[str]] = mapped_column(VARCHAR(32)) # type:ignore[assignment] + data: Mapped[Optional[str]] = mapped_column(TEXT) # type:ignore[assignment] + next_step: Mapped[Optional[int]] # type:ignore[assignment] + backend: Mapped[Optional[str]] = mapped_column(VARCHAR(32)) # type:ignore[assignment] # This static property is set at: galaxy.authnz.psa_authnz.PSAAuthnz sa_session = None @@ -10271,8 +10271,8 @@ class UserAuthnzToken(Base, UserMixin, RepresentById): id: Mapped[int] = mapped_column(primary_key=True) user_id: Mapped[Optional[int]] = mapped_column(ForeignKey("galaxy_user.id"), index=True) - uid: Mapped[Optional[str]] = mapped_column(VARCHAR(255)) # type:ignore[assignment, unused-ignore] - provider: Mapped[Optional[str]] = mapped_column(VARCHAR(32)) # type:ignore[assignment, unused-ignore] + uid: Mapped[Optional[str]] = mapped_column(VARCHAR(255)) # type:ignore[assignment] + provider: Mapped[Optional[str]] = mapped_column(VARCHAR(32)) # type:ignore[assignment] extra_data: Mapped[Optional[bytes]] = mapped_column(MutableJSONType) lifetime: Mapped[Optional[int]] assoc_type: Mapped[Optional[str]] = mapped_column(VARCHAR(64)) diff --git a/lib/galaxy_test/api/test_workflows.py b/lib/galaxy_test/api/test_workflows.py index b97cccb9f15..18e6e6d7e2f 100644 --- a/lib/galaxy_test/api/test_workflows.py +++ b/lib/galaxy_test/api/test_workflows.py @@ -5466,7 +5466,10 @@ steps: def test_workflow_rerun_with_use_cached_job(self): workflow = self.workflow_populator.load_workflow(name="test_for_run") # We launch a workflow - with self.dataset_populator.test_history() as history_id_one, self.dataset_populator.test_history() as history_id_two: + with ( + self.dataset_populator.test_history() as history_id_one, + self.dataset_populator.test_history() as history_id_two, + ): workflow_request, _, workflow_id = self._setup_workflow_run(workflow, history_id=history_id_one) invocation_id = self.workflow_populator.invoke_workflow_and_wait( workflow_id, request=workflow_request @@ -5549,7 +5552,10 @@ steps: @skip_without_tool("cat1") def test_nested_workflow_rerun_with_use_cached_job(self): - with self.dataset_populator.test_history() as history_id_one, self.dataset_populator.test_history() as history_id_two: + with ( + self.dataset_populator.test_history() as history_id_one, + self.dataset_populator.test_history() as history_id_two, + ): test_data = """ outer_input: value: 1.bed diff --git a/lib/tool_shed/util/commit_util.py b/lib/tool_shed/util/commit_util.py index afbaa3f8803..49f7267e4ad 100644 --- a/lib/tool_shed/util/commit_util.py +++ b/lib/tool_shed/util/commit_util.py @@ -137,12 +137,15 @@ def get_change_lines_in_file_for_tag(tag, change_dict): def handle_bz2(repository: "Repository", uploaded_file_name): - with tempfile.NamedTemporaryFile( - mode="wb", - prefix=f"repo_{repository.id}_upload_bunzip2_", - dir=os.path.dirname(uploaded_file_name), - delete=False, - ) as uncompressed, bz2.BZ2File(uploaded_file_name, "rb") as bzipped_file: + with ( + tempfile.NamedTemporaryFile( + mode="wb", + prefix=f"repo_{repository.id}_upload_bunzip2_", + dir=os.path.dirname(uploaded_file_name), + delete=False, + ) as uncompressed, + bz2.BZ2File(uploaded_file_name, "rb") as bzipped_file, + ): while 1: try: chunk = bzipped_file.read(basic_util.CHUNK_SIZE) @@ -242,9 +245,15 @@ def handle_directory_changes( def handle_gzip(repository, uploaded_file_name): - with tempfile.NamedTemporaryFile( - mode="wb", prefix=f"repo_{repository.id}_upload_gunzip_", dir=os.path.dirname(uploaded_file_name), delete=False - ) as uncompressed, gzip.GzipFile(uploaded_file_name, "rb") as gzipped_file: + with ( + tempfile.NamedTemporaryFile( + mode="wb", + prefix=f"repo_{repository.id}_upload_gunzip_", + dir=os.path.dirname(uploaded_file_name), + delete=False, + ) as uncompressed, + gzip.GzipFile(uploaded_file_name, "rb") as gzipped_file, + ): while 1: try: chunk = gzipped_file.read(basic_util.CHUNK_SIZE) diff --git a/packages/app/setup.cfg b/packages/app/setup.cfg index d316f3bb587..da79607d340 100644 --- a/packages/app/setup.cfg +++ b/packages/app/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -80,7 +79,7 @@ install_requires = WebOb>=1.8.9 Whoosh packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.entry_points] console_scripts = diff --git a/packages/auth/setup.cfg b/packages/auth/setup.cfg index 014754c74ed..70534a38afb 100644 --- a/packages/auth/setup.cfg +++ b/packages/auth/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -36,7 +35,7 @@ install_requires = galaxy-data galaxy-util packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.packages.find] exclude = diff --git a/packages/config/setup.cfg b/packages/config/setup.cfg index 67b1e45f727..90791f097c4 100644 --- a/packages/config/setup.cfg +++ b/packages/config/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -39,7 +38,7 @@ install_requires = pykwalify PyYAML packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.entry_points] console_scripts = diff --git a/packages/data/setup.cfg b/packages/data/setup.cfg index ab14267b7f1..f2f71d501e9 100644 --- a/packages/data/setup.cfg +++ b/packages/data/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -63,7 +62,7 @@ install_requires = tifffile typing-extensions packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.entry_points] console_scripts = diff --git a/packages/files/setup.cfg b/packages/files/setup.cfg index fd73bc921ad..5561659a8ea 100644 --- a/packages/files/setup.cfg +++ b/packages/files/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -37,7 +36,7 @@ install_requires = fs typing-extensions packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.packages.find] exclude = diff --git a/packages/job_execution/setup.cfg b/packages/job_execution/setup.cfg index 3636b158d33..48d82abade8 100644 --- a/packages/job_execution/setup.cfg +++ b/packages/job_execution/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -41,7 +40,7 @@ install_requires = MarkupSafe SQLAlchemy>=2.0,<2.1,!=2.0.36 packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.entry_points] console_scripts = diff --git a/packages/meta/setup.cfg b/packages/meta/setup.cfg index 1615e974552..fc8dc4a8546 100644 --- a/packages/meta/setup.cfg +++ b/packages/meta/setup.cfg @@ -10,7 +10,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -35,7 +34,7 @@ version = 25.0.dev0 [options] include_package_data = True packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.extras_require] postgresql = diff --git a/packages/navigation/setup.cfg b/packages/navigation/setup.cfg index d5b5b29a431..f2b485208f7 100644 --- a/packages/navigation/setup.cfg +++ b/packages/navigation/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -36,7 +35,7 @@ install_requires = galaxy-util PyYAML packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.packages.find] exclude = diff --git a/packages/schema/setup.cfg b/packages/schema/setup.cfg index 162f1395b52..934d8b57ccf 100644 --- a/packages/schema/setup.cfg +++ b/packages/schema/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -36,7 +35,7 @@ install_requires = galaxy-util pydantic[email]>=2.7.4 packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.packages.find] exclude = diff --git a/packages/selenium/setup.cfg b/packages/selenium/setup.cfg index 29357e9b81f..47b283c5e32 100644 --- a/packages/selenium/setup.cfg +++ b/packages/selenium/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -40,7 +39,7 @@ install_requires = requests selenium!=4.11.0,!=4.11.1,!=4.11.2 packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.entry_points] console_scripts = diff --git a/packages/test_api/setup.cfg b/packages/test_api/setup.cfg index 15c5d99b8d5..b7bb8529dea 100644 --- a/packages/test_api/setup.cfg +++ b/packages/test_api/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -39,7 +38,7 @@ install_requires = requests tuspy packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.extras_require] driver = diff --git a/packages/test_base/setup.cfg b/packages/test_base/setup.cfg index 5ddf759eb0d..3d9bacc35ec 100644 --- a/packages/test_base/setup.cfg +++ b/packages/test_base/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -42,7 +41,7 @@ install_requires = PyYAML requests packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.packages.find] exclude = diff --git a/packages/test_driver/setup.cfg b/packages/test_driver/setup.cfg index 48803e05804..d358750c57b 100644 --- a/packages/test_driver/setup.cfg +++ b/packages/test_driver/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -42,7 +41,7 @@ install_requires = galaxy-web-apps pytest packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.packages.find] exclude = diff --git a/packages/test_selenium/setup.cfg b/packages/test_selenium/setup.cfg index 5193d6d60aa..22149209fa1 100644 --- a/packages/test_selenium/setup.cfg +++ b/packages/test_selenium/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -44,7 +43,7 @@ install_requires = requests selenium!=4.11.0,!=4.11.1,!=4.11.2 packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.extras_require] driver = diff --git a/packages/tool_shed/setup.cfg b/packages/tool_shed/setup.cfg index 1ec356afc85..5a0e27add4b 100644 --- a/packages/tool_shed/setup.cfg +++ b/packages/tool_shed/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -61,7 +60,7 @@ install_requires = WebOb Whoosh packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.packages.find] exclude = diff --git a/packages/tours/setup.cfg b/packages/tours/setup.cfg index 14a8534e45f..9eabc60b787 100644 --- a/packages/tours/setup.cfg +++ b/packages/tours/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -37,7 +36,7 @@ install_requires = pydantic>=2.7.4 PyYAML packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.entry_points] console_scripts = diff --git a/packages/web_apps/setup.cfg b/packages/web_apps/setup.cfg index 08637c4815b..c815f3f1b57 100644 --- a/packages/web_apps/setup.cfg +++ b/packages/web_apps/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -66,7 +65,7 @@ install_requires = uvloop>=0.21.0 WebOb>=1.8.9 packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.entry_points] console_scripts = diff --git a/packages/web_framework/setup.cfg b/packages/web_framework/setup.cfg index 70db3ce7384..7b1942377c7 100644 --- a/packages/web_framework/setup.cfg +++ b/packages/web_framework/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -45,7 +44,7 @@ install_requires = WebOb packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.packages.find] exclude = diff --git a/packages/web_stack/setup.cfg b/packages/web_stack/setup.cfg index 25cf63a2f2e..3f38cc6d440 100644 --- a/packages/web_stack/setup.cfg +++ b/packages/web_stack/setup.cfg @@ -9,7 +9,6 @@ classifiers = Natural Language :: English Operating System :: POSIX Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -37,7 +36,7 @@ install_requires = galaxy-util SQLAlchemy>=2.0,<2.1,!=2.0.36 packages = find: -python_requires = >=3.8 +python_requires = >=3.9 [options.packages.find] exclude = diff --git a/pyproject.toml b/pyproject.toml index 0b86f368ee7..31966ff3cfd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ maintainers = [ ] license = {file = "LICENSE.txt"} readme = "README.rst" -requires-python = ">=3.8" +requires-python = ">=3.9" dependencies = [ "a2wsgi", "aiofiles", @@ -48,8 +48,7 @@ dependencies = [ "gunicorn", "gxformat2", "h5grove>=1.2.1", - "h5py", # Python 3.8 support - "h5py>=3.12 ; python_version>='3.9'", # Python 3.13 support + "h5py>=3.12", # Python 3.13 support "importlib-resources ; python_version<'3.12'", # for importlib.{abc.Traversable,resources.{files, Package}} "isa-rwval @ git+https://github.com/nsoranzo/isa-rwval.git@master", # https://github.com/ISA-tools/isa-rwval/pull/17 "isal>=1.7.0", # Python 3.13 support @@ -63,8 +62,7 @@ dependencies = [ "mrcfile", "msal", "nodeenv", - "numpy", - "numpy>=1.26.0 ; python_version=='3.9'", # Python 3.12 support + "numpy>=1.26.0", # Python 3.12 support "numpy>=2.1.0 ; python_version>='3.10'", # Python 3.13 support "packaging", "paramiko!=2.9.0,!=2.9.1", # https://github.com/paramiko/paramiko/issues/1961 @@ -149,7 +147,7 @@ dev = [ "pytest-postgresql!=3.0.0", # https://github.com/ClearcodeHQ/pytest-postgresql/issues/426 "pytest-shard", "responses", - "rucio-clients>=33.6.0 ; python_version>='3.9'", # https://github.com/galaxyproject/galaxy/pull/17156 + "rucio-clients>=33.6.0", "selenium", "seletools", "Sphinx>=4.0", # support docutils 0.17 @@ -183,7 +181,7 @@ typecheck = [ [tool.black] line-length = 120 -target-version = ['py38'] +target-version = ['py39'] include = '\.pyi?$' extend-exclude = ''' ^/( @@ -196,7 +194,7 @@ extend-exclude = ''' isort = true [tool.ruff] -target-version = "py38" +target-version = "py39" exclude = [ "lib/tool_shed/test/test_data/repos" ] @@ -212,7 +210,8 @@ select = ["E", "F", "B", "C4", "G", "ISC", "NPY", "UP"] # E402 module level import not at top of file # TODO, we would like to improve this. # E501 is line length (delegated to black) # G* are TODOs -ignore = ["B008", "B9", "E402", "E501", "G001", "G002", "G004"] +# UP006 and UP035 are PEP 585 type annotations +ignore = ["B008", "B9", "E402", "E501", "G001", "G002", "G004", "UP006", "UP035"] [tool.ruff.lint.flake8-comprehensions] allow-dict-calls-with-keyword-arguments = true @@ -231,11 +230,22 @@ keep-runtime-typing = true # Don't check pyupgrade rules on tool scripts, which may use different Python versions "test/functional/tools/*" = ["UP"] "tools/*" = ["UP"] -# Don't check some pyupgrade rules on generated files -"lib/galaxy/schema/bco/*" = ["UP006", "UP007"] -"lib/galaxy/schema/drs/*" = ["UP006", "UP007"] -"lib/tool_shed_client/schema/trs.py" = ["UP006", "UP007"] -"lib/tool_shed_client/schema/trs_service_info.py" = ["UP006", "UP007"] +# Don't check pyupgrade rules on generated files +"lib/galaxy/schema/bco/*" = ["UP"] +"lib/galaxy/schema/drs/*" = ["UP"] +"lib/tool_shed_client/schema/trs.py" = ["UP"] +"lib/tool_shed_client/schema/trs_service_info.py" = ["UP"] +# Don't check some pyupgrade rules on packages for Pulsar, which need to stay compatible with Python 3.7 +"lib/galaxy/exceptions/*" = ["UP006", "UP007", "UP033", "UP035", "UP036"] +"lib/galaxy/job_metrics/*" = ["UP006", "UP007", "UP033", "UP035", "UP036"] +"lib/galaxy/objectstore/*" = ["UP006", "UP007", "UP033", "UP035", "UP036"] +"lib/galaxy/tool_util/*" = ["UP006", "UP007", "UP033", "UP035", "UP036"] +"lib/galaxy/util/*" = ["UP006", "UP007", "UP033", "UP035", "UP036"] +"scripts/check_python.py" = ["UP006", "UP007", "UP010", "UP032", "UP033", "UP035", "UP036"] +"test/unit/job_metrics/*" = ["UP006", "UP007", "UP033", "UP035", "UP036"] +"test/unit/objectstore/*" = ["UP006", "UP007", "UP033", "UP035", "UP036"] +"test/unit/tool_util/*" = ["UP006", "UP007", "UP033", "UP035", "UP036"] +"test/unit/util/*" = ["UP006", "UP007", "UP033", "UP035", "UP036"] [tool.uv] constraint-dependencies = [ diff --git a/scripts/check_python.py b/scripts/check_python.py index 766d67904fe..b3fec2eb98f 100644 --- a/scripts/check_python.py +++ b/scripts/check_python.py @@ -3,25 +3,28 @@ If the current installed Python version is not supported, prints an error message to stderr and returns 1 """ -from __future__ import print_function # noqa: UP010 +from __future__ import print_function import sys +MIN_VERSION_TUPLE = (3, 9) + def check_python(): - if sys.version_info[:2] >= (3, 8): # noqa: UP036 + if sys.version_info[:2] >= MIN_VERSION_TUPLE: # supported return else: version_string = ".".join(str(_) for _ in sys.version_info[:3]) - msg = ( - """ERROR: Your Python version is: %s -Galaxy is currently supported on Python >=3.8 . + min_version_string = ".".join(str(_) for _ in MIN_VERSION_TUPLE) + msg = """ERROR: Your Python version is: {} +Galaxy is currently supported on Python >={} . To run Galaxy, please install a supported Python version. If a supported version is already installed but is not your default, https://docs.galaxyproject.org/en/latest/admin/python.html contains instructions -on how to force Galaxy to use a different version.""" # noqa: UP031 - % version_string +on how to force Galaxy to use a different version.""".format( + version_string, + min_version_string, ) print(msg, file=sys.stderr) raise Exception(msg) diff --git a/scripts/common_startup.sh b/scripts/common_startup.sh index 20a9b0ea29c..b951cfb9481 100755 --- a/scripts/common_startup.sh +++ b/scripts/common_startup.sh @@ -14,7 +14,7 @@ SKIP_NODE=${GALAXY_SKIP_NODE:-0} INSTALL_PREBUILT_CLIENT=${GALAXY_INSTALL_PREBUILT_CLIENT:-0} NODE_VERSION=${GALAXY_NODE_VERSION:-"$(cat client/.node_version)"} : "${YARN_INSTALL_OPTS:=--network-timeout 300000 --check-files}" -: "${GALAXY_CONDA_PYTHON_VERSION:=3.8}" +: "${GALAXY_CONDA_PYTHON_VERSION:=3.9}" for arg in "$@"; do if [ "$arg" = "--skip-venv" ]; then @@ -40,7 +40,7 @@ RMFILES=" lib/pkg_resources.pyc " -MIN_PYTHON_VERSION=3.8 +MIN_PYTHON_VERSION=3.9 MIN_PIP_VERSION=20.3 # return true if $1 is in $2 else false diff --git a/test/integration/objectstore/test_rucio_objectstore.py b/test/integration/objectstore/test_rucio_objectstore.py index da5805adc88..02533bce7a2 100644 --- a/test/integration/objectstore/test_rucio_objectstore.py +++ b/test/integration/objectstore/test_rucio_objectstore.py @@ -33,5 +33,3 @@ class TestRucioObjectStoreIntegration(BaseRucioObjectStoreIntegrationTestCase): instance = integration_util.integration_module_instance(TestRucioObjectStoreIntegration) test_tools = integration_util.integration_tool_runner(TEST_TOOL_IDS) - -integration_util.skip_for_older_python((3, 9))(test_tools) diff --git a/test/integration/test_genomes.py b/test/integration/test_genomes.py index 578e40a44c8..6a5b1bf7421 100644 --- a/test/integration/test_genomes.py +++ b/test/integration/test_genomes.py @@ -83,8 +83,9 @@ class TestGenomes(integration_util.IntegrationTestCase): sequence = "test-value" key = get_key() - with patch.object(self._app.genomes, "has_reference_data", return_value=True), patch.object( - self._app.genomes, "_get_reference_data", return_value=RefDataMock() + with ( + patch.object(self._app.genomes, "has_reference_data", return_value=True), + patch.object(self._app.genomes, "_get_reference_data", return_value=RefDataMock()), ): response = self._get(f"genomes/{key}/sequences") self._assert_status_code_is(response, 200) diff --git a/test/unit/data/datatypes/test_vcf.py b/test/unit/data/datatypes/test_vcf.py index 38d7b8df4c4..394ecdef72c 100644 --- a/test/unit/data/datatypes/test_vcf.py +++ b/test/unit/data/datatypes/test_vcf.py @@ -26,9 +26,10 @@ def test_vcf_sniff(): def test_vcf_bgzip_set_meta(): vcf_bgzip_datatype = VcfGz() - with get_input_files("1.vcf_bgzip") as input_files, get_dataset( - input_files[0], index_attr="tabix_index" - ) as dataset: + with ( + get_input_files("1.vcf_bgzip") as input_files, + get_dataset(input_files[0], index_attr="tabix_index") as dataset, + ): vcf_bgzip_datatype.set_meta(dataset) f = pysam.VariantFile(dataset.get_file_name(), index_filename=dataset.metadata.tabix_index.get_file_name()) assert isinstance(f.index, pysam.libcbcf.TabixIndex) is True diff --git a/test/unit/data/security/test_vault.py b/test/unit/data/security/test_vault.py index ef94d21cb77..af769afbdfd 100644 --- a/test/unit/data/security/test_vault.py +++ b/test/unit/data/security/test_vault.py @@ -60,9 +60,10 @@ VAULT_CONF_HASHICORP = os.path.join(os.path.dirname(__file__), "fixtures/vault_c ) class TestHashicorpVault(AbstractTestCases.VaultTestBase): def setUp(self) -> None: - with tempfile.NamedTemporaryFile(mode="w", prefix="vault_hashicorp", delete=False) as tempconf, open( - VAULT_CONF_HASHICORP - ) as f: + with ( + tempfile.NamedTemporaryFile(mode="w", prefix="vault_hashicorp", delete=False) as tempconf, + open(VAULT_CONF_HASHICORP) as f, + ): content = string.Template(f.read()).safe_substitute( vault_address=os.environ.get("VAULT_ADDRESS"), vault_token=os.environ.get("VAULT_TOKEN") ) @@ -120,9 +121,10 @@ VAULT_CONF_CUSTOS = os.path.join(os.path.dirname(__file__), "fixtures/vault_conf ) class TestCustosVault(AbstractTestCases.VaultTestBase): def setUp(self) -> None: - with tempfile.NamedTemporaryFile(mode="w", prefix="vault_custos", delete=False) as tempconf, open( - VAULT_CONF_CUSTOS - ) as f: + with ( + tempfile.NamedTemporaryFile(mode="w", prefix="vault_custos", delete=False) as tempconf, + open(VAULT_CONF_CUSTOS) as f, + ): content = string.Template(f.read()).safe_substitute( custos_client_id=os.environ.get("CUSTOS_CLIENT_ID"), custos_client_secret=os.environ.get("CUSTOS_CLIENT_SECRET"),