From 399ce9ee192fcbc168446569e7d9839e2d755b23 Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Tue, 21 Jan 2025 19:02:52 +0100 Subject: [PATCH] Fix seeking Python metadatafs --- src/pyodide/internal/readOnlyFS.ts | 4 ++-- src/workerd/io/compatibility-date.capnp | 4 ++-- src/workerd/server/tests/python/BUILD.bazel | 2 ++ .../server/tests/python/seek-metadatafs/a.py | 8 ++++++++ .../seek-metadatafs/seek-metadatafs.wd-test | 16 ++++++++++++++++ 5 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 src/workerd/server/tests/python/seek-metadatafs/a.py create mode 100644 src/workerd/server/tests/python/seek-metadatafs/seek-metadatafs.wd-test diff --git a/src/pyodide/internal/readOnlyFS.ts b/src/pyodide/internal/readOnlyFS.ts index f3ebf5ac521..a0b014e3af5 100644 --- a/src/pyodide/internal/readOnlyFS.ts +++ b/src/pyodide/internal/readOnlyFS.ts @@ -63,10 +63,10 @@ export function createReadonlyFS( } else if (whence === 2) { // SEEK_END if (FS.isFile(stream.node.mode)) { - if ((stream.node.info as any).size == undefined) { + if (stream.node.usedBytes == undefined) { throw new Error('File size is undefined'); } - position += (stream.node.info as any).size; + position += stream.node.usedBytes; } } return position; diff --git a/src/workerd/io/compatibility-date.capnp b/src/workerd/io/compatibility-date.capnp index 52365feb6fd..b4a310495c2 100644 --- a/src/workerd/io/compatibility-date.capnp +++ b/src/workerd/io/compatibility-date.capnp @@ -430,7 +430,7 @@ struct CompatibilityFlags @0x8f8c1b68151b6cef { pythonWorkers @43 :Bool $compatEnableFlag("python_workers") $pythonSnapshotRelease(pyodide = "0.26.0a2", pyodideRevision = "2024-03-01", - packages = "20240829.4", backport = 13, + packages = "20240829.4", backport = 14, baselineSnapshotHash = "d13ce2f4a0ade2e09047b469874dacf4d071ed3558fec4c26f8d0b99d95f77b5") $impliedByAfterDate(name = "pythonWorkersDevPyodide", date = "2000-01-01"); # Enables Python Workers. Access to this flag is not restricted, instead bundles containing @@ -684,7 +684,7 @@ struct CompatibilityFlags @0x8f8c1b68151b6cef { $compatEnableFlag("python_workers_20250116") $experimental $pythonSnapshotRelease(pyodide = "0.27.1", pyodideRevision = "2025-01-16", - packages = "20241218", backport = 0, + packages = "20241218", backport = 2, baselineSnapshotHash = "TODO"); requestCfOverridesCacheRules @72 :Bool diff --git a/src/workerd/server/tests/python/BUILD.bazel b/src/workerd/server/tests/python/BUILD.bazel index 1c1cfe2e719..6daeb84bef4 100644 --- a/src/workerd/server/tests/python/BUILD.bazel +++ b/src/workerd/server/tests/python/BUILD.bazel @@ -35,6 +35,8 @@ py_wd_test( ], ) +py_wd_test("seek-metadatafs") + gen_import_tests( PYODIDE_IMPORTS_TO_TEST, # TODO: Micropip version mismatch for 0.27.0 diff --git a/src/workerd/server/tests/python/seek-metadatafs/a.py b/src/workerd/server/tests/python/seek-metadatafs/a.py new file mode 100644 index 00000000000..1f76ff283d0 --- /dev/null +++ b/src/workerd/server/tests/python/seek-metadatafs/a.py @@ -0,0 +1,8 @@ +import os +from pathlib import Path + + +def test(): + fh = Path(__file__).open() + print(fh.fileno()) + print(f"This file is {os.lseek(fh.fileno(), 0, os.SEEK_END)} characters long") diff --git a/src/workerd/server/tests/python/seek-metadatafs/seek-metadatafs.wd-test b/src/workerd/server/tests/python/seek-metadatafs/seek-metadatafs.wd-test new file mode 100644 index 00000000000..b324b9af044 --- /dev/null +++ b/src/workerd/server/tests/python/seek-metadatafs/seek-metadatafs.wd-test @@ -0,0 +1,16 @@ +using Workerd = import "/workerd/workerd.capnp"; + +const unitTests :Workerd.Config = ( + services = [ + ( name = "main", + worker = ( + modules = [ + (name = "a.py", pythonModule = embed "./a.py"), + ], + compatibilityDate = "2023-12-18", + compatibilityFlags = [%PYTHON_FEATURE_FLAGS], + ) + ), + ], +); +