plugin for deephaven
Project description
deephaven_plugin_notebook
This is a Python plugin for Deephaven generated from a deephaven-plugin template.
This is an experimental plugin that can create and embed simple jupyter notebooks within deephaven. It cannot show more complex resources like ipywidgets at this time.
Plugin Structure
The src
directory contains the Python and JavaScript code for the plugin.
Within the src
directory, the deephaven_plugin_notebook directory contains the Python code, and the js
directory contains the JavaScript code.
The Python files have the following structure:
deephaven_plugin_notebook_object.py
defines a simple Python class that can wrap a notebook
deephaven_plugin_notebook_type.py
defines the Python type for the plugin (which is used for registration) and a simple message stream.
js_plugin.py
defines the Python class that will be used to setup the JavaScript side of the plugin.
register.py
registers the plugin with Deephaven.
The JavaScript files have the following structure:
DeephavenPluginNotebookPlugin.ts
registers the plugin with Deephaven.
DeephavenPluginNotebookView.tsx
defines the plugin panel and loads the notebook.
Additionally, the test
directory contains Python tests for the plugin. This demonstrates how the embedded Deephaven server can be used in tests.
It's recommended to use tox
to run the tests, and the tox.ini
file is included in the project.
Building the Plugin
To build the plugin, you will need npm
and python
installed, as well as the build
package for Python.
nvm
is also strongly recommended, and an .nvmrc
file is included in the project.
The python venv can be created and the recommended packages installed with the following commands:
cd deephaven_plugin_notebook
python -m venv .venv
source .venv/bin/activate
pip install --upgrade -r requirements.txt
Build the JavaScript plugin from the src/js
directory:
cd src/js
nvm install
npm install
npm run build
Then, build the Python plugin from the top-level directory:
cd ../..
python -m build --wheel
The built wheel file will be located in the dist
directory.
If you modify the JavaScript code, remove the build
and dist
directories before rebuilding the wheel:
rm -rf build dist
Installing the Plugin
The plugin can be installed into a Deephaven instance with pip install <wheel file>
.
The wheel file is stored in the dist
directory after building the plugin.
Exactly how this is done will depend on how you are running Deephaven.
If using the venv created above, the plugin and server can be created with the following commands:
pip install deephaven-server
pip install dist/deephaven_plugin_notebook-0.0.1.dev0-py3-none-any.whl
deephaven server
See the plug-in documentation for more information.
After the initial setup, you can call
./rebuild.sh
which will reinstall and run the server.
Using the Plugin
Once the Deephaven server is running, the plugin should be available to use.
from deephaven_plugin_notebook import DeephavenPluginNotebookObject
obj = DeephavenPluginNotebookObject()
Here is a simple example that uses dh.ui to make a simple notebook with input.
There are two cell types that reflect the two main jupyter cell types. Any "code"
blocks are ran automatically, sequentially.
from deephaven_plugin_notebook import DeephavenPluginNotebookObject
from ipywidgets import IntSlider
import deephaven.ui as ui
def render_notebook(text):
notebook = [
{
"type": "markdown",
"source": "Hello, World!"
},
{
"type": "code",
"source": f"print('{text}')"
}
]
return DeephavenPluginNotebookObject(notebook)
@ui.component
def demo():
text, set_text = ui.use_state("Hello, World!")
print_input = ui.text_field(value=text, on_change=set_text)
rendered_notebook = ui.use_memo(lambda: render_notebook(text), [text])
return ui.flex(print_input, rendered_notebook, direction="column", width="100%")
notebook_input = demo()
The function render_notebook
could also be ran on it's own if not using dh.ui
Distributing the Plugin
To distribute the plugin, you can upload the wheel file to a package repository, such as PyPI.
The version of the plugin can be updated in the setup.cfg
file.
There is a separate instance of PyPI for testing purposes. Start by creating an account at TestPyPI. Then, get an API token from account management, setting the “Scope” to “Entire account”.
To upload to the test instance, use the following commands:
python -m pip install --upgrade twine
python -m twine upload --repository testpypi dist/*
Now, you can install the plugin from the test instance. The extra index is needed to find dependencies:
pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ deephaven_plugin_notebook
For a production release, create an account at PyPI. Then, get an API token from account management, setting the “Scope” to “Entire account”.
To upload to the production instance, use the following commands.
Note that --repository
is the production instance by default, so it can be omitted:
python -m pip install --upgrade twine
python -m twine upload dist/*
Now, you can install the plugin from the production instance:
pip install deephaven_plugin_notebook
See the Python packaging documentation for more information.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file deephaven_plugin_notebook-0.0.1-py3-none-any.whl
.
File metadata
- Download URL: deephaven_plugin_notebook-0.0.1-py3-none-any.whl
- Upload date:
- Size: 14.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.11
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c21bff45b87c2a0bebb13045e9ed5d2dd601cc86f750c2aa1c58b188aa08d6e6 |
|
MD5 | 8d7fb8359b71e0b17e4f2664279eb5c2 |
|
BLAKE2b-256 | 6efd9a926678abf5c76dba77e1b960199dca103a31eb68a45d95e0426ac3994b |