Skip to content

Commit feee557

Browse files
committed
Move Python SDK from cloudflare.workers to workers.
1 parent 69ce716 commit feee557

File tree

8 files changed

+24
-6
lines changed

8 files changed

+24
-6
lines changed

src/pyodide/internal/metadata.ts

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ export const LOAD_WHEELS_FROM_R2: boolean = IS_WORKERD;
1010
export const LOAD_WHEELS_FROM_ARTIFACT_BUNDLER =
1111
MetadataReader.shouldUsePackagesInArtifactBundler();
1212
export const PACKAGES_VERSION = MetadataReader.getPackagesVersion();
13+
export const USING_OLDEST_PYODIDE_VERSION =
14+
MetadataReader.getPyodideVersion() == '0.26.0a2';
1315
export const USING_OLDEST_PACKAGES_VERSION = PACKAGES_VERSION === '20240829.4';
1416
// TODO: pyodide-packages.runtime-playground.workers.dev points at a worker which redirects requests
1517
// to the public R2 bucket URL at pub-45d734c4145d4285b343833ee450ef38.r2.dev. We should remove

src/pyodide/python-entrypoint-helper.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
LOCKFILE,
1414
MAIN_MODULE_NAME,
1515
WORKERD_INDEX_URL,
16+
USING_OLDEST_PYODIDE_VERSION,
1617
} from 'pyodide-internal:metadata';
1718
import { reportError } from 'pyodide-internal:util';
1819
import { default as Limiter } from 'pyodide-internal:limiter';
@@ -79,8 +80,13 @@ async function setupPatches(pyodide: Pyodide): Promise<void> {
7980
pyodide.site_packages = `/lib/python${pymajor}.${pyminor}/site-packages`;
8081

8182
// Inject modules that enable JS features to be used idiomatically from Python.
82-
pyodide.FS.mkdir(`${pyodide.site_packages}/cloudflare`);
83-
await injectSitePackagesModule(pyodide, 'workers', 'cloudflare/workers');
83+
if (USING_OLDEST_PYODIDE_VERSION) {
84+
// Inject at cloudflare.workers for backwards compatibility
85+
pyodide.FS.mkdir(`${pyodide.site_packages}/cloudflare`);
86+
await injectSitePackagesModule(pyodide, 'workers', 'cloudflare/workers');
87+
}
88+
// The SDK was moved from `cloudflare.workers` to just `workers`.
89+
await injectSitePackagesModule(pyodide, 'workers', 'workers');
8490

8591
// Install patches as needed
8692
if (TRANSITIVE_REQUIREMENTS.has('aiohttp')) {

src/pyodide/types/runtime-generated/metadata.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ declare namespace MetadataReader {
1616
const getMemorySnapshotSize: () => number;
1717
const disposeMemorySnapshot: () => void;
1818
const shouldUsePackagesInArtifactBundler: () => boolean;
19+
const getPyodideVersion: () => string;
1920
const getPackagesVersion: () => string;
2021
const getPackagesLock: () => string;
2122
const read: (index: number, position: number, buffer: Uint8Array) => number;

src/workerd/api/pyodide/pyodide.c++

+1
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,7 @@ jsg::Ref<PyodideMetadataReader> makePyodideMetadataReader(Worker::Reader conf,
480480
names.finish(),
481481
contents.finish(),
482482
requirements.finish(),
483+
kj::str(pythonRelease.getPyodide()),
483484
kj::str(pythonRelease.getPackages()),
484485
kj::mv(lock),
485486
true /* isWorkerd */,

src/workerd/api/pyodide/pyodide.h

+8
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ class PyodideMetadataReader: public jsg::Object {
7878
kj::Array<kj::String> names;
7979
kj::Array<kj::Array<kj::byte>> contents;
8080
kj::Array<kj::String> requirements;
81+
kj::String pyodideVersion;
8182
kj::String packagesVersion;
8283
kj::String packagesLock;
8384
bool isWorkerdFlag;
@@ -92,6 +93,7 @@ class PyodideMetadataReader: public jsg::Object {
9293
kj::Array<kj::String> names,
9394
kj::Array<kj::Array<kj::byte>> contents,
9495
kj::Array<kj::String> requirements,
96+
kj::String pyodideVersion,
9597
kj::String packagesVersion,
9698
kj::String packagesLock,
9799
bool isWorkerd,
@@ -104,6 +106,7 @@ class PyodideMetadataReader: public jsg::Object {
104106
names(kj::mv(names)),
105107
contents(kj::mv(contents)),
106108
requirements(kj::mv(requirements)),
109+
pyodideVersion(kj::mv(pyodideVersion)),
107110
packagesVersion(kj::mv(packagesVersion)),
108111
packagesLock(kj::mv(packagesLock)),
109112
isWorkerdFlag(isWorkerd),
@@ -164,6 +167,10 @@ class PyodideMetadataReader: public jsg::Object {
164167
return usePackagesInArtifactBundler;
165168
}
166169

170+
kj::String getPyodideVersion() {
171+
return kj::str(pyodideVersion);
172+
}
173+
167174
kj::String getPackagesVersion() {
168175
return kj::str(packagesVersion);
169176
}
@@ -187,6 +194,7 @@ class PyodideMetadataReader: public jsg::Object {
187194
JSG_METHOD(disposeMemorySnapshot);
188195
JSG_METHOD(shouldSnapshotToDisk);
189196
JSG_METHOD(shouldUsePackagesInArtifactBundler);
197+
JSG_METHOD(getPyodideVersion);
190198
JSG_METHOD(getPackagesVersion);
191199
JSG_METHOD(getPackagesLock);
192200
JSG_METHOD(isCreatingBaselineSnapshot);

src/workerd/io/compatibility-date.capnp

+2-2
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ struct CompatibilityFlags @0x8f8c1b68151b6cef {
430430
pythonWorkers @43 :Bool
431431
$compatEnableFlag("python_workers")
432432
$pythonSnapshotRelease(pyodide = "0.26.0a2", pyodideRevision = "2024-03-01",
433-
packages = "20240829.4", backport = 14,
433+
packages = "20240829.4", backport = 15,
434434
baselineSnapshotHash = "d13ce2f4a0ade2e09047b469874dacf4d071ed3558fec4c26f8d0b99d95f77b5")
435435
$impliedByAfterDate(name = "pythonWorkersDevPyodide", date = "2000-01-01");
436436
# Enables Python Workers. Access to this flag is not restricted, instead bundles containing
@@ -684,7 +684,7 @@ struct CompatibilityFlags @0x8f8c1b68151b6cef {
684684
$compatEnableFlag("python_workers_20250116")
685685
$experimental
686686
$pythonSnapshotRelease(pyodide = "0.27.1", pyodideRevision = "2025-01-16",
687-
packages = "20241218", backport = 2,
687+
packages = "20241218", backport = 3,
688688
baselineSnapshotHash = "TODO");
689689

690690
requestCfOverridesCacheRules @72 :Bool

src/workerd/server/tests/python/sdk/server.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from cloudflare.workers import Blob, FormData, Response
1+
from workers import Blob, FormData, Response
22

33

44
async def on_fetch(request):

src/workerd/server/tests/python/sdk/worker.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
from http import HTTPMethod, HTTPStatus
33

44
import js
5+
from workers import Blob, File, FormData, Response, fetch
56

67
import pyodide.http
7-
from cloudflare.workers import Blob, File, FormData, Response, fetch
88
from pyodide.ffi import to_js
99

1010

0 commit comments

Comments
 (0)