Description
Hi! I've been trying to track down an issue with my usage of ipywidgets
, described on discourse. The basic gist is:
- I'm attempting to create a widget from the client by using a
model.widget_manager
's methodnew_widget
. In previous versions, this worked, but now, it doesn't. - The issue seems to stem from the kernel attempting to create a new comm instance for a widget, but supplying to that widget a
BaseComm
rather than aComm
, which throws a validation error.
After digging through this, it looks to me like ipywidgets
declares comm = Instance('ipykernel.comm.Comm', allow_none=True)
, but ipykernel.ipkernel.create_comm
explicitly creates a BaseComm
, so the traitlet doesn't validate, and the comm fails to properly initialize. This results in the widgets not being synced back to the kernel from the frontend.
I confess that while I've spent time going through the code, I'm not entirely sure if this could potentially be a version mismatch, or if this is an oversight for a use case that may not come up terribly frequently.
My versions:
ipywidgets
- 8.0.4ipykernel
- 6.21.1comm
- 0.1.2
I was able to address the problem I was having by changing the import and usage of BaseComm
to Comm
in ipkernel.py
, and so if this is an acceptable solution I'd be happy to issue a pull request. (My hesitance is that there may be unexpected downstream effects of a change to something so deep in the kernel code, and so I wanted to open the issue as possible first step.)