diff --git a/Lib/_dummy_os.py b/Lib/_dummy_os.py
index 5bd5ec0a1..38e287af6 100644
--- a/Lib/_dummy_os.py
+++ b/Lib/_dummy_os.py
@@ -5,22 +5,30 @@ A shim of the os module containing only simple path-related utilities
try:
from os import *
except ImportError:
- import abc
+ import abc, sys
def __getattr__(name):
- raise OSError("no os specific module found")
+ if name in {"_path_normpath", "__path__"}:
+ raise AttributeError(name)
+ if name.isupper():
+ return 0
+ def dummy(*args, **kwargs):
+ import io
+ return io.UnsupportedOperation(f"{name}: no os specific module found")
+ dummy.__name__ = f"dummy_{name}"
+ return dummy
- def _shim():
- import _dummy_os, sys
- sys.modules['os'] = _dummy_os
- sys.modules['os.path'] = _dummy_os.path
+ sys.modules['os'] = sys.modules['posix'] = sys.modules[__name__]
import posixpath as path
- import sys
sys.modules['os.path'] = path
del sys
sep = path.sep
+ supports_dir_fd = set()
+ supports_effective_ids = set()
+ supports_fd = set()
+ supports_follow_symlinks = set()
def fspath(path):
diff --git a/Lib/io.py b/Lib/io.py
index 7362ae305..c2812876d 100644
--- a/Lib/io.py
+++ b/Lib/io.py
@@ -55,10 +55,15 @@ import _io
import abc
from _io import (DEFAULT_BUFFER_SIZE, BlockingIOError, UnsupportedOperation,
- open, open_code, FileIO, BytesIO, StringIO, BufferedReader,
+ open, open_code, BytesIO, StringIO, BufferedReader,
BufferedWriter, BufferedRWPair, BufferedRandom,
IncrementalNewlineDecoder, text_encoding, TextIOWrapper)
+try:
+ from _io import FileIO
+except ImportError:
+ pass
+
# Pretend this exception was created here.
UnsupportedOperation.__module__ = "io"
@@ -82,7 +87,10 @@ class BufferedIOBase(_io._BufferedIOBase, IOBase):
class TextIOBase(_io._TextIOBase, IOBase):
__doc__ = _io._TextIOBase.__doc__
-RawIOBase.register(FileIO)
+try:
+ RawIOBase.register(FileIO)
+except NameError:
+ pass
for klass in (BytesIO, BufferedReader, BufferedWriter, BufferedRandom,
BufferedRWPair):
diff --git a/wasm/demo/package.json b/wasm/demo/package.json
index c87513250..53ed264ea 100644
--- a/wasm/demo/package.json
+++ b/wasm/demo/package.json
@@ -4,24 +4,25 @@
"description": "Bindings to the RustPython library for WebAssembly",
"main": "index.js",
"dependencies": {
- "codemirror": "^5.42.0",
- "local-echo": "^0.2.0",
- "xterm": "^3.8.0"
+ "@codemirror/lang-python": "^6.1.6",
+ "@xterm/addon-fit": "^0.10.0",
+ "@xterm/xterm": "^5.3.0",
+ "codemirror": "^6.0.1",
+ "upgrade": "^1.1.0",
+ "xterm-readline": "^1.1.2"
},
"devDependencies": {
- "@wasm-tool/wasm-pack-plugin": "^1.1.0",
- "clean-webpack-plugin": "^3.0.0",
- "css-loader": "^3.4.1",
- "html-webpack-plugin": "^3.2.0",
- "mini-css-extract-plugin": "^0.9.0",
- "raw-loader": "^4.0.0",
- "serve": "^11.0.2",
- "webpack": "^4.16.3",
- "webpack-cli": "^3.1.0",
- "webpack-dev-server": "^3.1.5"
+ "@wasm-tool/wasm-pack-plugin": "^1.7.0",
+ "css-loader": "^7.1.2",
+ "html-webpack-plugin": "^5.6.3",
+ "mini-css-extract-plugin": "^2.9.2",
+ "serve": "^14.2.4",
+ "webpack": "^5.97.1",
+ "webpack-cli": "^6.0.1",
+ "webpack-dev-server": "^5.2.0"
},
"scripts": {
- "dev": "webpack-dev-server -d",
+ "dev": "webpack serve",
"build": "webpack",
"dist": "webpack --mode production",
"test": "webpack --mode production && cd ../tests && pytest"
diff --git a/wasm/demo/snippets/import_pypi.py b/wasm/demo/snippets/import_pypi.py
index cbe837cd0..a7c8a8e7f 100644
--- a/wasm/demo/snippets/import_pypi.py
+++ b/wasm/demo/snippets/import_pypi.py
@@ -1,13 +1,12 @@
-import asyncweb
-import whlimport
-
-whlimport.setup()
-
# make sys.modules['os'] a dumb version of the os module, which has posixpath
# available as os.path as well as a few other utilities, but will raise an
# OSError for anything that actually requires an OS
import _dummy_os
-_dummy_os._shim()
+
+import asyncweb
+import whlimport
+
+whlimport.setup()
@asyncweb.main
async def main():
diff --git a/wasm/demo/src/browser_module.rs b/wasm/demo/src/browser_module.rs
deleted file mode 100644
index e69de29bb..000000000
diff --git a/wasm/demo/src/index.ejs b/wasm/demo/src/index.ejs
index 02f2f52f5..d261b110e 100644
--- a/wasm/demo/src/index.ejs
+++ b/wasm/demo/src/index.ejs
@@ -14,7 +14,6 @@
browser's devtools and play with rp.pyEval('1 + 1')
-