You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.4 KiB
Python
98 lines
2.4 KiB
Python
# Copyright (c) Jupyter Development Team.
|
|
# Distributed under the terms of the Modified BSD License.
|
|
|
|
from ipywidgets import Widget
|
|
import ipywidgets.widgets.widget
|
|
|
|
# The new comm package is not available in our Python 3.7 CI (older ipykernel version)
|
|
try:
|
|
import comm
|
|
NEW_COMM_PACKAGE = True
|
|
except ImportError:
|
|
NEW_COMM_PACKAGE = False
|
|
|
|
import ipykernel.comm
|
|
import pytest
|
|
|
|
class DummyComm():
|
|
comm_id = 'a-b-c-d'
|
|
kernel = 'Truthy'
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__()
|
|
self.messages = []
|
|
|
|
def open(self, *args, **kwargs):
|
|
pass
|
|
|
|
def on_msg(self, *args, **kwargs):
|
|
pass
|
|
|
|
def send(self, *args, **kwargs):
|
|
self.messages.append((args, kwargs))
|
|
|
|
def close(self, *args, **kwargs):
|
|
pass
|
|
|
|
|
|
def dummy_create_comm(**kwargs):
|
|
return DummyComm()
|
|
|
|
|
|
def dummy_get_comm_manager(**kwargs):
|
|
return {}
|
|
|
|
|
|
_widget_attrs = {}
|
|
undefined = object()
|
|
|
|
if NEW_COMM_PACKAGE:
|
|
orig_comm = ipykernel.comm.comm.BaseComm
|
|
else:
|
|
orig_comm = ipykernel.comm.Comm
|
|
orig_create_comm = None
|
|
orig_get_comm_manager = None
|
|
|
|
if NEW_COMM_PACKAGE:
|
|
orig_create_comm = comm.create_comm
|
|
orig_get_comm_manager = comm.get_comm_manager
|
|
|
|
def setup_test_comm():
|
|
if NEW_COMM_PACKAGE:
|
|
comm.create_comm = dummy_create_comm
|
|
comm.get_comm_manager = dummy_get_comm_manager
|
|
ipykernel.comm.comm.BaseComm = DummyComm
|
|
else:
|
|
ipykernel.comm.Comm = DummyComm
|
|
Widget.comm.klass = DummyComm
|
|
ipywidgets.widgets.widget.Comm = DummyComm
|
|
_widget_attrs['_repr_mimebundle_'] = Widget._repr_mimebundle_
|
|
def raise_not_implemented(*args, **kwargs):
|
|
raise NotImplementedError()
|
|
Widget._repr_mimebundle_ = raise_not_implemented
|
|
|
|
def teardown_test_comm():
|
|
if NEW_COMM_PACKAGE:
|
|
comm.create_comm = orig_create_comm
|
|
comm.get_comm_manager = orig_get_comm_manager
|
|
ipykernel.comm.comm.BaseComm = orig_comm
|
|
else:
|
|
ipykernel.comm.Comm = orig_comm
|
|
Widget.comm.klass = orig_comm
|
|
ipywidgets.widgets.widget.Comm = orig_comm
|
|
for attr, value in _widget_attrs.items():
|
|
if value is undefined:
|
|
delattr(Widget, attr)
|
|
else:
|
|
setattr(Widget, attr, value)
|
|
_widget_attrs.clear()
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def setup():
|
|
setup_test_comm()
|
|
yield
|
|
teardown_test_comm()
|
|
|
|
def call_method(method, *args, **kwargs):
|
|
method(*args, **kwargs)
|