From 4b9d656ee435193ba9686a2d1fb70a55bc9419ca Mon Sep 17 00:00:00 2001 From: Gyeongjae Choi Date: Thu, 18 Jun 2026 16:52:12 +0900 Subject: [PATCH] chore: add experimental python 314 support --- packages/cli/src/pywrangler/metadata.py | 4 +++- packages/cli/src/pywrangler/utils.py | 10 +++++++++- packages/cli/tests/test_py_version_detect.py | 12 ++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/pywrangler/metadata.py b/packages/cli/src/pywrangler/metadata.py index ee6063b..16feec8 100644 --- a/packages/cli/src/pywrangler/metadata.py +++ b/packages/cli/src/pywrangler/metadata.py @@ -3,12 +3,14 @@ class PythonCompatVersion(NamedTuple): - version: Literal["3.12", "3.13"] + version: Literal["3.12", "3.13", "3.14"] compat_flag: str compat_date: datetime | None + experimental: bool = False PYTHON_COMPAT_VERSIONS = [ + PythonCompatVersion("3.14", "pythonWorkers20260610", None, experimental=True), PythonCompatVersion( "3.13", "python_workers_20250116", datetime.strptime("2025-09-29", "%Y-%m-%d") ), diff --git a/packages/cli/src/pywrangler/utils.py b/packages/cli/src/pywrangler/utils.py index 79bb1ca..054ed75 100644 --- a/packages/cli/src/pywrangler/utils.py +++ b/packages/cli/src/pywrangler/utils.py @@ -334,7 +334,7 @@ def _parse_wrangler_config() -> WranglerConfig: @cache -def get_python_version() -> Literal["3.12", "3.13"]: +def get_python_version() -> Literal["3.12", "3.13", "3.14"]: """ Determine Python version from wrangler configuration. @@ -372,6 +372,10 @@ def get_python_version() -> Literal["3.12", "3.13"]: ) for py_version in sorted_versions: + # Skip experimental versions unless the experimental compat flag is enabled + if "experimental" not in compat_flags and py_version.experimental: + continue + # Check if the specific compat flag is present if py_version.compat_flag in compat_flags: return py_version.version @@ -390,6 +394,8 @@ def get_uv_pyodide_interp_name() -> str: v = "3.12.7" case "3.13": v = "3.13.2" + case "3.14": + v = "3.14.2" return f"cpython-{v}-emscripten-wasm32-musl" @@ -407,6 +413,8 @@ def get_pyodide_index() -> str: v = "0.27.7" case "3.13": v = "0.28.3" + case "3.14": + v = "314.0.0" return "https://index.pyodide.org/" + v diff --git a/packages/cli/tests/test_py_version_detect.py b/packages/cli/tests/test_py_version_detect.py index 5aecb37..8ce3366 100644 --- a/packages/cli/tests/test_py_version_detect.py +++ b/packages/cli/tests/test_py_version_detect.py @@ -176,3 +176,15 @@ def test_main_get_python_version_integration(test_dir): version = get_python_version() assert version == "3.12" + + +def test_314_compat_flag_with_experimental(test_dir): + wrangler_toml = test_dir / "wrangler.toml" + wrangler_toml.write_text(""" +name = "test-worker" +compatibility_flags = ["python_workers", "pythonWorkers20260610", "experimental"] +compatibility_date = "2026-06-10" +""") + + version = get_python_version() + assert version == "3.14"