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')

-