jupyter-jscomm
A Python package to work around JavaScript-Python communication difficulties in Jupyter notebooks. Basic strategy is to use a hidden widget holding a json payload with the variables you want to keep.
This code can for instance be used as a hack to copy the content of bokeh JS variables into these JS-Python accessible variables.
Installation
pip install jupyter-jscomm
Usage from a Jupyter notebook
from jupyter_jscomm import JSComm
# Initialize the communication
comm = JSComm()
# Or initialize with custom class name to avoid collisions
comm1 = JSComm(class_name="my-comm-1")
comm2 = JSComm(class_name="my-comm-2")
# Each instance maintains its own state
comm1.add("var1", "Value for comm1")
comm2.add("var1", "Value for comm2")
# Add data from Python
comm1.add("var1", "Hello from Python")
comm2.add("var2", {"nested": "data"})
# Get data from JavaScript
value = comm1.get("var1")
# Update existing data
comm1.update("var1", "Updated value")
# Remove data
comm1.remove("var1")
# Clear all data
comm1.clear_all()
Change JS variable from JS context
While this package ensures the creation of a "magic" JS variable (default class name "comm-class") where you can write from Python to JS and get the value back from JS to Python, one of the goal is to map an already existing variable to this "magic" JS variable
// var my_existing_variable already contains the value I want to retrieve and expose in Python
// For default class name
var parent = document.getElementsByClassName("comm-class")[0];
// For custom class name
var parent = document.getElementsByClassName("my-comm-1")[0];
var input = parent.querySelector(".widget-input");
input.value = '{"var1": ' + JSON.stringify(my_existing_variable + '}';
input.dispatchEvent(new Event('input', { bubbles: true }));
License
This project is licensed under the MIT License - see the LICENSE file for details.
Metadata
Release files for jupyter-jscomm 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jupyter_jscomm-0.1.4.tar.gz | 3.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jupyter_jscomm-0.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 8.2 kB
Release files / jupyter_jscomm-0.1.4.tar.gz
| Download URL | jupyter_jscomm-0.1.4.tar.gz |
|---|---|
| Size | 3.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
960aca6fe9080fa2c9b3b5c4aa1d88b4fda1aace2c5662193f51402fb64bc12d
|
|
BLAKE2b-256 checksum How to use checksums |
020df67e3aa9ef2becb1cc713bdeb0978ec333a25082742cd8e414f1fc71ea9d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Release files / jupyter_jscomm-0.1.4-py3-none-any.whl
| Download URL | jupyter_jscomm-0.1.4-py3-none-any.whl |
|---|---|
| Size | 4.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6593aa74e5188c19ec768a57d19c50e392b5d8ddcc0778f7dc047ec819e8300c
|
|
BLAKE2b-256 checksum How to use checksums |
147a8ea03f81c23479aea710d58f4ecae16ab4b8d8bdab26c7efc370b050d95e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|