Browse Source

Lower supported Python floor to 3.10

The >=3.13 requires-python floor was an artifact of the PEP 621
packaging migration (setup.py previously declared no floor); nothing
in the codebase or its dependencies needs more than 3.10. Verified by
running the full mock-provider suite on 3.10 (94 passed, matching
3.13) — CI now runs the mock suite on both the lowest and highest
supported versions.

mypy now type-checks against 3.10 so use of newer-stdlib APIs is
caught at lint time.
Nuwan Goonasekera 1 month ago
parent
commit
ee39081cb1
4 changed files with 21 additions and 4 deletions
  1. 2 1
      .github/workflows/integration.yaml
  2. 11 0
      CHANGELOG.rst
  3. 7 2
      pyproject.toml
  4. 1 1
      tox.ini

+ 2 - 1
.github/workflows/integration.yaml

@@ -68,7 +68,8 @@ jobs:
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        python-version: ['3.13']
+        # Lowest and highest supported Python versions
+        python-version: ['3.10', '3.13']
     steps:
       - name: Checkout code
         uses: actions/checkout@v6

+ 11 - 0
CHANGELOG.rst

@@ -1,3 +1,14 @@
+4.2.1 - unreleased
+------------------
+
+## What's new
+* **Supported Python floor lowered to 3.10.** ``requires-python`` was ``>=3.13``
+  since the PEP 621 packaging migration, but nothing in the codebase or its
+  dependencies needs more than 3.10. CloudBridge now installs on Python
+  3.10–3.13, and CI runs the mock-provider suite on both the lowest and highest
+  supported versions. ``mypy`` type-checks against 3.10 so newer-stdlib usage
+  is caught at lint time.
+
 4.2.0 - July 9, 2026 (sha 60dbe305f0af46a7ce3eadd093756d31b8131b2e)
 -------------------------------------------------------------------
 

+ 7 - 2
pyproject.toml

@@ -8,7 +8,7 @@ description = "A simple layer of abstraction over multiple cloud providers."
 readme = "README.rst"
 license = "MIT"
 license-files = ["LICENSE"]
-requires-python = ">=3.13"
+requires-python = ">=3.10"
 authors = [
     { name = "Galaxy and GVL Projects", email = "help@genome.edu.au" },
 ]
@@ -21,6 +21,9 @@ classifiers = [
     "Operating System :: OS Independent",
     "Programming Language :: Python",
     "Programming Language :: Python :: 3",
+    "Programming Language :: Python :: 3.10",
+    "Programming Language :: Python :: 3.11",
+    "Programming Language :: Python :: 3.12",
     "Programming Language :: Python :: 3.13",
     "Programming Language :: Python :: Implementation :: CPython",
     "Topic :: Software Development :: Libraries :: Python Modules",
@@ -118,7 +121,9 @@ parallel = true
 # factory) is held to a strict baseline so downstream users get a fully-typed
 # API; the base implementations and providers (which wrap untyped cloud SDKs)
 # are temporarily exempted below and ratcheted to strict module-by-module.
-python_version = "3.13"
+# Type-check against the LOWEST supported version so use of newer-stdlib
+# APIs is caught at lint time.
+python_version = "3.10"
 files = ["cloudbridge"]
 ignore_missing_imports = true   # untyped cloud SDKs (boto3, azure-*, ...) -> Any
 namespace_packages = true

+ 1 - 1
tox.ini

@@ -6,7 +6,7 @@
 # running the tests.
 
 [tox]
-envlist = py3.13-{aws,azure,gcp,openstack,mock},lint,mypy
+envlist = py3{.10,.13}-{aws,azure,gcp,openstack,mock},lint,mypy
 
 [testenv]
 commands = # see pyproject.toml for coverage options; setup.cfg for flake8