A package for JavaScript-Python communication in Jupyter notebooks
Project description
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.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jupyter_jscomm-0.1.0.tar.gz.
File metadata
- Download URL: jupyter_jscomm-0.1.0.tar.gz
- Upload date:
- Size: 2.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
000683fffdcb2c950cce7b551862bcfd831ec60e105dc627d0441481fa5b7ee6
|
|
| MD5 |
eda29a9cdfb0aeaa00b07818d95b9f56
|
|
| BLAKE2b-256 |
3a366e20c0f36805d37c091b84762ce9fddf4e2424e74c8a78029489434053f5
|
File details
Details for the file jupyter_jscomm-0.1.0-py3-none-any.whl.
File metadata
- Download URL: jupyter_jscomm-0.1.0-py3-none-any.whl
- Upload date:
- Size: 2.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f0f7b833b5d91973570d531fe213f3ee614c588fe0270680b39d026f1bd4318
|
|
| MD5 |
e562ec93493c5cdce66b87126c2ac1a9
|
|
| BLAKE2b-256 |
a619b8d5eb886ed489d0060f49e7e082cbd0d244a9fc903d344e2e50dbb82de6
|