Skip to main content

fork of JSPyBridge overhauled to allow for asyncio compatibility and more control.

Project description

JSPyBridge_async - javascript asyncio fork

PyPI Documentation Status Build Status

Interoperate Node.js from Python, with built in asyncio compatibility.

This is a fork of JSPyBridge by extremeheat, created to properly integrate asyncio events and coroutines into the python side of the bridge.

As the purpose of this fork was only to alter the javascript package, it's specifically for running Node.js from Python. No changes are made to pythonia or are planned to be made to pythonia.

current stable installation

 pip install -U javascriptasync

current latest installation

 pip install -U git+https://github.com/CrosswaveOmega/JSPyBridge_Async.git

Requires Node.js 14 and Python 3.8 or newer.

Key Features

  • use node.js objects in the same way as python modules.

  • Ability to call async and sync functions and get object properties with a native feel

  • Built-in garbage collection

  • Bidirectional callbacks with arbitrary arguments

  • Iteration and exception handling support

  • Object inspection allows you to easily console.log or print() any foreign objects

  • (Bridge to call JS from Python) Specialized object oriented support for event-emitter functions.

  • retrieve blob objects from the Javascript side of the bridge.

  • enhanced support for concurrent operations.

New Javascript from Python usage:

import asyncio
from javascriptasync import init_js, require_a, get_globalThis
init_js()
async def main():
  chalk, fs = await require_a("chalk")
  globalThis=get_globalThis()
  datestr=await (await globalThis.Date(coroutine=True)).toLocaleString(coroutine=True)
  print("Hello", chalk.red("world!"), "it's", datestr)
  fs.writeFileSync("HelloWorld.txt", "hi!")

asyncio.run(main)

TO DO:

  • better documentation and examples
  • bug fixing/optimization
  • Code cleanup.

KEY CHANGES:

  • javascript is now javascriptasync
  • config.py has been encapsulated into the JSConfig class, all objects that need to access variables within JSConfig have been passed an object reference to a single unique JSConfig instance.
  • __init__.py utilizes a singleton to ensure that only one instance of an JSConfig class is created at any one time. You need to call init() to start up the bridge!
  • The JSContext object can be utilized to make use of the library's operations in a more object oriented manner.
  • debug output now uses the logging module.
  • connection.py has been encapsulated into the ConnectionClass, accessable through the events.EventLoop class, as events.EventLoop is the only place the connection was ever utilized.
  • It's possible to set a custom timeout value when using eval_js.
  • async variants of require and eval_js are included within init.py, as require_a and eval_js_a respectively.
  • this package is now built using a pyproject.toml file instead of a setup.py script.
  • test_general.py now works with pytest.
  • console, globalThis, and RegExp have to be retrieved with the get_console(), get_globalThis(), and get_RegExp() functions.
  • start, stop, and abort has to be retrieved with through the ThreadUtils static class.
  • any call or init operation can be made into a coroutine by passing in the coroutine=True keyword.
  • Separate set of wrappers for asyncio tasks through AsyncTaskUtils
  • Event Emitters can utilize Coroutine handlers.

Examples

see https://github.com/CrosswaveOmega/JSPyBridge_Async/tree/master/examples

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

javascriptasync-0.2.2.8.tar.gz (71.5 kB view details)

Uploaded Source

Built Distribution

javascriptasync-0.2.2.8-py3-none-any.whl (79.3 kB view details)

Uploaded Python 3

File details

Details for the file javascriptasync-0.2.2.8.tar.gz.

File metadata

  • Download URL: javascriptasync-0.2.2.8.tar.gz
  • Upload date:
  • Size: 71.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for javascriptasync-0.2.2.8.tar.gz
Algorithm Hash digest
SHA256 5e7d604e28ba868cdab51b1fe2c7f372947154b940ebd8ebd6481c4d0c27afcc
MD5 21b8255ba2083d405df3ce54006664ba
BLAKE2b-256 5fab9df14ba9bf95a43b05aaaa5786ef40560bca2c7b04190fcc289a6a953257

See more details on using hashes here.

File details

Details for the file javascriptasync-0.2.2.8-py3-none-any.whl.

File metadata

File hashes

Hashes for javascriptasync-0.2.2.8-py3-none-any.whl
Algorithm Hash digest
SHA256 f660188e2ad3fc2c9f19cabdbcedaf317d2f1573c928fb64045dd86a7d48b72e
MD5 c74c117fbf2fdcfd6634d025b7d809ad
BLAKE2b-256 91adc4e408c6bf7932d27fb99a7098581a8e9a389bd632f921b3ea8bbc8e7108

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page