Skip to main content

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

jupyter_jscomm-0.1.1.tar.gz (4.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jupyter_jscomm-0.1.1-py3-none-any.whl (4.6 kB view details)

Uploaded Python 3

File details

Details for the file jupyter_jscomm-0.1.1.tar.gz.

File metadata

  • Download URL: jupyter_jscomm-0.1.1.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for jupyter_jscomm-0.1.1.tar.gz
Algorithm Hash digest
SHA256 dbb1a1c7f8a5af92f905f3feb255b9f6cfb13c329d9e795f3522fa95bdedcad9
MD5 5ed6da71504e0462e62459e67745ab9e
BLAKE2b-256 5d2fae48aa159e25246a41a377011a0036c9674c976d77c4f03d0c5104d2dde3

See more details on using hashes here.

File details

Details for the file jupyter_jscomm-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: jupyter_jscomm-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 4.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for jupyter_jscomm-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8a502a87afdcabe34899038bd50b69f6d70613891f61d99c46d7316481f9920a
MD5 ea739f6ebeaedcf14c290ac821e957df
BLAKE2b-256 92a2c4dd97266ba2dc92a659035de1d8b8dcb8ded617145fd084d7466a2ba1fe

See more details on using hashes here.

Supported by

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