Commit Graph

2625 Commits

Author SHA1 Message Date
Gyeongjae Choi 1138a4af2d
Add url parameter to install_xbuildenv (#3592) 2023-02-22 11:56:35 +09:00
Gyeongjae Choi 0d5bd851fe
Use loky.cpu_count() instead of os.cpu_count() (#3598) 2023-02-22 07:53:19 +09:00
Gyeongjae Choi 862e4f8877
MAINT Initialize filesystem in a single point (#3591)
We do several filesystem operations before loading Python.

- Mount _node_mounts
- Create default directories
- Register NativeFS file system

This PR organizes all those operations into a single function.

This is an another split off from #3582.
2023-02-19 18:25:00 -08:00
Gyeongjae Choi 994ce5111f
BLD Add DISTDIR variable (#3584) 2023-02-17 08:25:42 +09:00
messense 0be3c6d9fa
Fix activating pyodide venv command docs (#3586) 2023-02-15 16:34:07 +09:00
Gyeongjae Choi c55bd2a823
Move webbrowser.py into pyodide-py (#3583) 2023-02-14 16:08:28 +09:00
Gyeongjae Choi 5ad2dcf76f
Improve the error message when a meta.yaml file is not found (#3568) 2023-02-14 08:49:52 +09:00
Gyeongjae Choi d4bb0df3fa
Remove some build-only dependencies from meta.yaml (#3576) 2023-02-13 09:56:08 -08:00
Gyeongjae Choi 0b378d6727
Remove globally pinned build requirements (#3577) 2023-02-13 09:55:41 -08:00
Nicholas Bollweg e835bf05ff
add license file and metadata to pyodide-build (#3574) 2023-02-11 13:29:01 -08:00
Gyeongjae Choi 2fb9440e91
BLD Remove _pywasmcross entrypoint (#3566) 2023-02-11 00:04:25 -08:00
Feodor Fitsner 2f305cfec7
Add Flet to Related Projects (#3571) 2023-02-10 12:25:59 -08:00
Gyeongjae Choi b6fc9e7b1d
Add --no-user flag when installing packages in xbuildenv (#3562) 2023-02-10 09:17:53 +09:00
Gyeongjae Choi 68e42b1867
ENH Autodetect the number of cores when invoking `pyodide build-recipes` (#3559)
Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>
2023-02-10 08:56:42 +09:00
Gyeongjae Choi 189e49e892
FIX Escape nbsp in console.html (#3558)
Resolves https://github.com/pyodide/pyodide/issues/3337

In Firefox if one writes anything with spaces then tries to copy-paste the input to a standard Python REPL, one gets,

SyntaxError: invalid non-printable character U+00A0

this is because spaces are replaced by the non-breaking space character.

This patch replaces non-breaking space characters with normal space characters in the repl.
2023-02-09 10:34:05 -08:00
Gyeongjae Choi 7cc1058358
Update gitpod config (#3555) 2023-02-08 13:23:26 +09:00
Hood Chatham 84ef7fa76d
Fix isPyProxy so that it works correctly with multiple Pyodide interpreters (#3545)
This removes code so that we use the default `instanceof` behavior.
The added test fatally fails without this patch.
2023-02-07 16:03:43 -08:00
Deepak Cherian 21d941bd34
Update to Xarray 2023.02.0 (#3554) 2023-02-08 08:47:06 +09:00
Roman Yurchak 48258ff146
Replace isort, flake8, pycln and pyupgrade by ruff (#3522)
Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
2023-02-07 08:35:20 +09:00
Hood Chatham 5780584407
Docs: Minor improvements (#3546) 2023-02-06 08:45:12 +01:00
Hood Chatham 861a758c3b
Add new `pyodide.ffi` JavaScript submodule with PyProxy subtypes (#3523)
This creates a new `pyodide.ffi` submodule and adds a bunch of new subclasses of
`PyProxy` to it.

There are three stages in which we are concerned with the behavior of the
objects we define:
1. at time of static typechecks
2. at execution time
3. when generating docs

Prior to this PR, the subtypes of PyProxy only work well for static type checks,
they work acceptably at runtime (just don't let the user access them), and the
docs don't look that great. This PR is primarily intended to improve the docs
for PyProxy, but they also make execution time checks work better: you can now
say `obj instanceof pyodide.ffi.PyCallable` instead of `obj.isCallable()` which
I is easier to understand and to cross reference against the documentation. I am
marking `isCallable` as deprecated.

I also made a bunch of edits and improvements to the docs.

I have deprecated `PyProxyCallable` in favor of `pyodide.ffi.PyCallable` and
`PyProxy.isCallable` in favor of `obj instanceof pyodide.ffi.PyCallable`.
`PyBuffer` has been renamed to `pyodide.ffi.PyBufferView` and a new `PyBuffer`
has been created which is a subtype of `PyProxy`.
2023-02-05 19:35:08 -08:00
Joe Marshall ba3a8d7eb8
Reproducible package builds (and requirements.txt support) (#3469)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2023-02-04 14:55:09 +01:00
Hood Chatham c221532c8c
Disable NODEJS_CATCH_EXIT (#3542) 2023-02-04 14:50:14 +01:00
Gyeongjae Choi 71d466df2f
DOC Fix version warning CSS (#3533)
Close https://github.com/pyodide/pyodide/issues/3513
2023-02-04 14:49:11 +01:00
Gyeongjae Choi f943739e8f
ENH Add --no-deps parameter to build-recipes CLI (#3520)
This adds `--no-deps` parameter to `pyodide build-recipes` CLI, which is a replacement for `pyodide_build buildpkg` entrypoint.

Ref: https://github.com/pyodide/pyodide/issues/2879
2023-02-03 21:31:46 -08:00
Gyeongjae Choi 01e0c92380
Add package_type field to repodata.json (#3528)
This PR adds `package_type` field to repodata.json and use it to create a list of
unvendored standard libraries. After this we don't need to manage a hard-coded
list of unvendored stdlib lists in pyodide-py.
2023-02-03 21:26:23 -08:00
Gyeongjae Choi 66812b8295
CI Show compressed size of main modules after build (#3526)
This adds a short helper script which shows a gzip and brotli compressed size of a file,
and uses it in CI to check compressed size of pyodide.asm.* after build in addition to
the original file size.
2023-02-03 21:25:38 -08:00
Gyeongjae Choi c633565983
Fix console.html url in docs (#3532) 2023-02-02 10:39:42 +09:00
Hood Chatham 20e92c37ca
DOCS, MAINT: Replace :any: xrefs with more specific types (#3531)
This leads to more consistent rendering (functions and methods get parens after
them) and reduces chances of warnings about getting the wrong link. It is also
possible to use `~fully.quallified.name` to just show `name` if we use a specific
reference type, but it doesn't work with `any` for some reason.
2023-02-01 11:00:58 -08:00
Gyeongjae Choi dcdc1e6941
Unvendor pydoc_data and _pydecimal (#3525)
Removes / unvendors some python modules:

- Remove `_aix_support.py`, which is for supporting IBM AIX OS.

- Unvendor `_pydecimal.py`.
  - _pydecimal is a pure Python implementation of `decimal` module. [Importing `decimal` fallbacks](https://github.com/python/cpython/blob/main/Lib/decimal.py) to `_pydecimal` if the C-implementation `_decimal` is not available. In our case, _decimal is available, so _pydecimal will not be normally used. 

- Unvendor `pydoc_data`.
  - pydoc_data contains [a large (~700KB) dictionary](https://github.com/python/cpython/blob/main/Lib/pydoc_data/topics.py) for explaining python builtins. This is mostly used when `help("...")` is called.
2023-02-01 11:00:17 +09:00
Gyeongjae Choi f4f097542c
Fix misplaced changelog entry [skip ci] (#3527) 2023-02-01 10:18:10 +09:00
Gyeongjae Choi db4f068d54
Xfail richcmp test (#3519) 2023-01-31 16:41:20 +09:00
Roman Yurchak 2ee73d397c
CI Fix isort in pre-commit (#3521) 2023-01-30 22:05:48 +01:00
Gyeongjae Choi 570e69ad4f
Add BuildArgs class to store common build arguments (#3514) 2023-01-30 13:35:18 +09:00
Gyeongjae Choi f50c749c9a
Apply upstream cpython commits to relocate test directories (#3507) 2023-01-30 13:34:33 +09:00
Hood Chatham 6816fe9bb1
MAINT Remove "use strict" pragmas from source code (#3518)
We insert these at the top of the file with sed. It's redundant to put them in individual functions.
2023-01-29 18:07:01 -08:00
Gyeongjae Choi 16d494b22b Disable AUTO_JS_LIBRARIES and AUTO_NATIVE_LIBRARIES flags (#3505) 2023-01-30 10:43:34 +09:00
Hood Chatham eb2ffeb660
Add compiled mypy (#3504) 2023-01-27 20:05:49 -08:00
Hood Chatham 122facf069
Emscripten 3.1.31 (#3517) 2023-01-27 20:05:21 -08:00
Hood Chatham cca5e9f87f
Add pynacl (#3500)
Resolves https://github.com/pyodide/pyodide/issues/3327
2023-01-27 16:36:46 -08:00
Gyeongjae Choi 328a9ffc34
Add tag key in meta.yaml spec (#3444)
Co-authored-by: Roman Yurchak <rth.yurchak@gmail.com>
Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>
2023-01-27 13:31:26 +09:00
Hood Chatham 2ab4b0ab6a
Install autoconf 2.71 in the docker image (#3515)
Upstream libffi requires autoconf 2.71, so we should use it too.
2023-01-26 19:30:13 -08:00
Hood Chatham 5e26d9f1ae
Build libpyodide.a (#3335)
This is work towards unvendoring the Pyodide foreign function interface. 

Prior to this point, we included a large amount of critical functionality with `--pre-js`.
So we could create an archive called `libpyodide.a` with the object files but to use it
you would have to pass `--pre-js _pyodide.out.js` at link time. This embeds all of this
stuff in an object file called `pyodide_pre.o` which goes in our archive so you get all
the needed js runtime by linking it. 

Of course someone trying to use this still has to get the Python code onto the import
path, either using `--preload-file`, using Python to unpack it as a zip archive as we now
do, with zipimporter, or otherwise. They also will have to link `libpython.a` (is CPython
going to start distributing an Emscripten libpython?) and probably various other things.

We have to use a hack to inject the JavaScript code into the object files. The normal
`EM_JS` macro cannot handle arbitrary JavaScript code -- for example it fails with many
regex. Instead we manually generate write a C source file that does what we need using
`xxd`. The generated C code is similar to what `EM_JS` generates, but it uses an array
initializer rather than a string initializer for the characters avoiding the C preprocessor /
compiler's strange opinions about strings.
2023-01-26 17:22:05 -08:00
Hood Chatham 441cddea0c
Refactor conf.py (#3512)
Instead of putting stuff behind `IN_SPHINX`, define functions and call them from the `setup` function. 
In these functions, if we want to expose variables as part of the config we have to assign to `app.config.some_var` which is more explicit.

We still have to make the path change at top level. To improve this, in the future we should:
1. rename the sphinx_pyodide folder to sphinx-pyodide
2. add a `pyproject.toml` and `setup.py` so we can `pip install -e` it
3. instead of modifying the path, source the virtual environment
2023-01-26 15:36:22 -08:00
Hood Chatham 74686832b9
ENH Make JS Errors work like other special JS types (#3455)
Up to this point, we've used this dynamic subclassing method for
producing JsProxies for everything but errors. For errors, we make
a wrapper which is not a JsProxy that inherits from Exception and
give the wrapper a "js_error" attribute that points to an actual
error. We also make python2js know about this wrapper so it can
unwrap it. But the raw js_error object is a bit weird. There isn't
anything terrible about this situation but it is mildly unsatisfying.

This changes it so that errors subclass both JsProxy and Exception.
To do this we need to:
1. ensure that they have compatible memory layouts, and
2. convince Python that they have compatible memory layouts

I switched to using a union for the different subtypes of JsProxy
that need extra space: JsCallable, JsBuffer, and JsError. We need
js to be at the end so it won't get in the way of the BaseException
memory layout. I added _Static_asserts to double check that the
memory layouts do in fact agree.

To convince Python that they have compatible memory layouts, we have
to temporarily tell it that JsProxy is a subtype of BaseException.
To do this, we just set JsProxy.__mro__ = (BaseException,) before
creating the type and then restore it afterward.
2023-01-26 11:08:46 +09:00
Hood Chatham 9161c34fb3
Reorder changelog for 0.22.1 (#3509) 2023-01-25 15:58:09 -08:00
Hood Chatham c06f4d5dfb
DOCS Fix console.html deploy (#3510)
Put `console.html` in `app.outdir`.

This was needed because readthedocs/readthedocs.org PR 9888 moved the outdir
2023-01-25 09:31:06 -08:00
Hood Chatham 1c2bf92a3f
Improve messages in case of system exit (#3496)
This prints a better set of error messages in case someone calls os._exit() or in C code exit() is used.
In the future we might like to do something better here, but for now at least we can print a clear
error message.
2023-01-24 18:11:11 -08:00
Hood Chatham 8c5ae6ff9e
Update description of github releases in docs (#3498) 2023-01-24 13:11:31 -08:00
Hood Chatham b3d4688818
Xfail the urllib test in safari (#3502) 2023-01-24 11:46:24 -08:00