Skip to content

Commit

Permalink
Move Python SDK from cloudflare.workers to workers.
Browse files Browse the repository at this point in the history
  • Loading branch information
dom96 committed Feb 13, 2025
1 parent d7358e9 commit 66d9bb7
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 4 deletions.
2 changes: 2 additions & 0 deletions src/pyodide/internal/metadata.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ export const LOAD_WHEELS_FROM_R2: boolean = IS_WORKERD;
export const LOAD_WHEELS_FROM_ARTIFACT_BUNDLER =
MetadataReader.shouldUsePackagesInArtifactBundler();
export const PACKAGES_VERSION = MetadataReader.getPackagesVersion();
export const USING_OLDEST_PYODIDE_VERSION =
MetadataReader.getPyodideVersion() == '0.26.0a2';
export const USING_OLDEST_PACKAGES_VERSION = PACKAGES_VERSION === '20240829.4';
// TODO: pyodide-packages.runtime-playground.workers.dev points at a worker which redirects requests
// to the public R2 bucket URL at pub-45d734c4145d4285b343833ee450ef38.r2.dev. We should remove
Expand Down
10 changes: 8 additions & 2 deletions src/pyodide/python-entrypoint-helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
LOCKFILE,
MAIN_MODULE_NAME,
WORKERD_INDEX_URL,
USING_OLDEST_PYODIDE_VERSION,
} from 'pyodide-internal:metadata';
import { reportError } from 'pyodide-internal:util';
import { default as Limiter } from 'pyodide-internal:limiter';
Expand Down Expand Up @@ -79,8 +80,13 @@ async function setupPatches(pyodide: Pyodide): Promise<void> {
pyodide.site_packages = `/lib/python${pymajor}.${pyminor}/site-packages`;

// Inject modules that enable JS features to be used idiomatically from Python.
pyodide.FS.mkdir(`${pyodide.site_packages}/cloudflare`);
await injectSitePackagesModule(pyodide, 'workers', 'cloudflare/workers');
if (USING_OLDEST_PYODIDE_VERSION) {
// Inject at cloudflare.workers for backwards compatibility
pyodide.FS.mkdir(`${pyodide.site_packages}/cloudflare`);
await injectSitePackagesModule(pyodide, 'workers', 'cloudflare/workers');
}
// The SDK was moved from `cloudflare.workers` to just `workers`.
await injectSitePackagesModule(pyodide, 'workers', 'workers');

// Install patches as needed
if (TRANSITIVE_REQUIREMENTS.has('aiohttp')) {
Expand Down
1 change: 1 addition & 0 deletions src/pyodide/types/runtime-generated/metadata.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ declare namespace MetadataReader {
const getMemorySnapshotSize: () => number;
const disposeMemorySnapshot: () => void;
const shouldUsePackagesInArtifactBundler: () => boolean;
const getPyodideVersion: () => string;
const getPackagesVersion: () => string;
const getPackagesLock: () => string;
const read: (index: number, position: number, buffer: Uint8Array) => number;
Expand Down
1 change: 1 addition & 0 deletions src/workerd/api/pyodide/pyodide.c++
Original file line number Diff line number Diff line change
Expand Up @@ -480,6 +480,7 @@ jsg::Ref<PyodideMetadataReader> makePyodideMetadataReader(Worker::Reader conf,
names.finish(),
contents.finish(),
requirements.finish(),
kj::str(pythonRelease.getPyodide()),
kj::str(pythonRelease.getPackages()),
kj::mv(lock),
true /* isWorkerd */,
Expand Down
8 changes: 8 additions & 0 deletions src/workerd/api/pyodide/pyodide.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ class PyodideMetadataReader: public jsg::Object {
kj::Array<kj::String> names;
kj::Array<kj::Array<kj::byte>> contents;
kj::Array<kj::String> requirements;
kj::String pyodideVersion;
kj::String packagesVersion;
kj::String packagesLock;
bool isWorkerdFlag;
Expand All @@ -92,6 +93,7 @@ class PyodideMetadataReader: public jsg::Object {
kj::Array<kj::String> names,
kj::Array<kj::Array<kj::byte>> contents,
kj::Array<kj::String> requirements,
kj::String pyodideVersion,
kj::String packagesVersion,
kj::String packagesLock,
bool isWorkerd,
Expand All @@ -104,6 +106,7 @@ class PyodideMetadataReader: public jsg::Object {
names(kj::mv(names)),
contents(kj::mv(contents)),
requirements(kj::mv(requirements)),
pyodideVersion(kj::mv(pyodideVersion)),
packagesVersion(kj::mv(packagesVersion)),
packagesLock(kj::mv(packagesLock)),
isWorkerdFlag(isWorkerd),
Expand Down Expand Up @@ -164,6 +167,10 @@ class PyodideMetadataReader: public jsg::Object {
return usePackagesInArtifactBundler;
}

kj::String getPyodideVersion() {
return kj::str(pyodideVersion);
}

kj::String getPackagesVersion() {
return kj::str(packagesVersion);
}
Expand All @@ -187,6 +194,7 @@ class PyodideMetadataReader: public jsg::Object {
JSG_METHOD(disposeMemorySnapshot);
JSG_METHOD(shouldSnapshotToDisk);
JSG_METHOD(shouldUsePackagesInArtifactBundler);
JSG_METHOD(getPyodideVersion);
JSG_METHOD(getPackagesVersion);
JSG_METHOD(getPackagesLock);
JSG_METHOD(isCreatingBaselineSnapshot);
Expand Down
2 changes: 1 addition & 1 deletion src/workerd/server/tests/python/sdk/server.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from cloudflare.workers import Blob, FormData, Response
from workers import Blob, FormData, Response


async def on_fetch(request):
Expand Down
2 changes: 1 addition & 1 deletion src/workerd/server/tests/python/sdk/worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
from http import HTTPMethod, HTTPStatus

import js
from workers import Blob, File, FormData, Response, fetch

import pyodide.http
from cloudflare.workers import Blob, File, FormData, Response, fetch
from pyodide.ffi import to_js


Expand Down

0 comments on commit 66d9bb7

Please sign in to comment.