Releases: Distributive-Network/PythonMonkey
v0.4.0
PythonMonkey v0.4.0
- fixed a bug where methods called on proxied JS objects would use
globalThis
for the value ofthis
- implemented proxying of arbitrary python objects in JavaScript, like so:
import pythonmonkey as pm
class Counter:
def __init__(self):
self.count = 0
def increment(self):
self.count = self.count + 1
counter = Counter()
pm.eval("""
(pyObject) => {
console.log(pyObject.count); // 0
pyObject.increment();
console.log(pyObject.count); // 1
}
""")(counter)
- implemented a new type called JSMethodProxy, which can be used to implement methods on python objects in JavaScript, like so:
import pythonmonkey as pm
jsFunc = pm.eval("(function() { this.count++; })")
class Counter:
def __init__(self):
self.count = 0
self.increment = pm.JSMethodProxy(jsFunc, self)
counter = Counter()
print(counter.count) # 0
counter.increment()
print(counter.count) # 1
- various garbage collection optimizations
- various memory leak fixes
- implemented complete cross-language stack traces
pm.eval
can now accept a file object as its first argument (such as an object returned by theopen()
python built-in), which is expected to be a javascript file- when calling
pm.require
(or other requires created bypm.createRequire
), .py CommonJS modules now have precedence over .js modules when there is a namespace collision setTimeout
now returns a Node.js-styleTimeout
class for the timeout id, with.ref()
and.unref()
methods- implemented
XMLHttpRequest.withCredentials
- implemented
"json"
support forXMLHttpRequest.responseType
- implemented remaining standard
console
methods
v0.3.0
Our JS Proxies now implement all Array and Object methods on Python Lists and Dicts, and our Python List and Dict subtypes implements operators and methods on JS Arrays and Objects.
One can now do
items = [1, 2, 3, 4, 5]
result = [None]
pm.eval("(result, arr) => {result[0] = arr.some((element) => element % 2 === 0)}")(result, items)
-> result[0] == True
and going the other way
a = pm.eval("([1,2,3,4,5,6])")
b = a[1:5]
-> b == [2,3,4,5]
We also have all the iterators returned by such methods as values() now working without making copies of the object being iterated upon
v0.2.3
This release adds a new type, JSArrayProxy, a subtype of list, to properly proxy JavaScript Arrays as python lists, including having all of the appropriate methods.
This release also adds new methods to JSObjectProxy to more closely match dict. It now has all the same methods as dict except for the following: keys(), items(), update(), and values(). These will be added soon in a future release.
v0.2.2
This release includes implementations for URLSearchParams, XMLHttpRequest, atob, btoa, setTimeout, and clearTimeout. It also adds python 3.12 compatibility, better stringification for cross-language objects, and adds an event loop to pmjs. Finally, it fixes a bug preventing some users from installing pythonmonkey from source distributions.
Debugger
First release!
Our first public release.
Check out here to see how to install and use the library, or here if you would like to compile a local version and/or contribute to the project!
Basic examples can be found in the /examples
directory.
More advanced examples can be found in the dedicated repository https://github.com/Distributive-Network/PythonMonkey-examples
Example of a fullstack AES encryption and decryption app that uses the crypto-js
NPM package can be found at https://github.com/Distributive-Network/PythonMonkey-Crypto-JS-Fullstack-Example
🐍🐒