outputs icon indicating copy to clipboard operation
outputs copied to clipboard

_get_comm_info() is needed for jupyter-widget set_state() but nteract doesn't have it implemented yet.

Open kjcho-msft opened this issue 3 years ago • 2 comments

Looking for a way to add the functionality to save/restore ipywidget state using nteract widget manager.

See the following implementation of set_state() in jupyter-widget and it needs _get_comm_info() but _get_comm_info() is not implemented in nteract.

My question is, can nteract add _get_comm_info implementation?

<set_state() in jupyter-widget> set_state(state: IManagerState): Promise<WidgetModel[]> { // Check to make sure that it's the same version we are parsing. if (!(state.version_major && state.version_major <= 2)) { throw 'Unsupported widget state format'; } const models = state.state as any; // Recreate all the widget models for the given widget manager state. const all_models = this._get_comm_info().then((live_comms) => { /* Note: It is currently safe to just loop over the models in any order, given that the following holds (does at the time of writing): 1: any call to new_model with state registers the model promise (e.g. with register_model) synchronously (before it's first await statement). 2: any calls to a model constructor or the set_state method on a model, happens asynchronously (in a then clause, or after an await statement). Without these assumptions, one risks trying to set model state with a reference to another model that doesn't exist yet! */

<_get_comm_info() in nteract> _get_comm_info(): Promise<{}> { throw new Error("_get_comm_info is not implemented!"); }

kjcho-msft avatar Mar 08 '22 02:03 kjcho-msft

This felt oddly familiar so I took a look at this and noticed we had previously filed https://github.com/nteract/nteract/issues/4675.

It looks like the lack of a __get_comm_info implementation was intentional based on the previous design and the way that that the ipywidgets implementation interacts with the state.

Was there a particular motivation for filing this issue?

cc: @miduncan

captainsafia avatar Mar 17 '22 04:03 captainsafia

I found _get_comm_info implementation is needed for restoring ipywidget state feature based on set_state() API in jupyter-widget manager-base.

You said you didn't add it intentionally. Does it mean there is a way to get the feature enabled without implementing get_comm_info?

@captainsafia, please provide some guidance on what would be right way to add support for restoring ipywidget state using nteract.

kjcho-msft avatar May 05 '22 23:05 kjcho-msft