Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-ipywidgets for openSUSE:Factory checked in at 2023-04-04 21:27:33 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-ipywidgets (Old) and /work/SRC/openSUSE:Factory/.python-ipywidgets.new.19717 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ipywidgets" Tue Apr 4 21:27:33 2023 rev:13 rq:1077249 version:8.0.6 Changes: -------- --- /work/SRC/openSUSE:Factory/python-ipywidgets/python-ipywidgets.changes 2022-12-26 23:28:10.768974086 +0100 +++ /work/SRC/openSUSE:Factory/.python-ipywidgets.new.19717/python-ipywidgets.changes 2023-04-04 21:27:57.135758369 +0200 @@ -1,0 +2,17 @@ +Tue Apr 4 15:32:43 UTC 2023 - Ben Greiner <c...@bnavigator.de> + +- Update to 8.0.6 + * Fix: revert removing ipykernel dependency #3749 + * Fix: structuredClone broke default serializer that depended on + JSON/toJSON #3738 + * Fix: comm/ipykernel/manager runtime issues: #3740, #3737 +- Release 8.0.5 + * Fix: propertly typed Comm interface #3722 + * Fix: support the comm package #3533 + * Fix: use of structuredClone allows for binary traits out of the + box #3689 + * Fix: combobox update issue #3681 + * Fix: add grey as valid color #3671 + * Fix: deprecation warning when using interact #3669 + +------------------------------------------------------------------- Old: ---- ipywidgets-8.0.4.tar.gz New: ---- ipywidgets-8.0.6.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-ipywidgets.spec ++++++ --- /var/tmp/diff_new_pack.AvhXue/_old 2023-04-04 21:27:57.615761093 +0200 +++ /var/tmp/diff_new_pack.AvhXue/_new 2023-04-04 21:27:57.623761139 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-ipywidgets # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: python-ipywidgets -Version: 8.0.4 +Version: 8.0.6 Release: 0 Summary: IPython HTML widgets for Jupyter License: BSD-3-Clause @@ -33,23 +33,21 @@ BuildRequires: unzip Requires: python-ipykernel >= 4.5.1 Requires: python-ipython >= 6.1.0 -Requires: python-ipython_genutils >= 0.2 Requires: python-traitlets >= 4.3.1 -Requires: (python-jupyterlab_widgets >= 3.0 with python-jupyterlab_widgets < 4) -Requires: (python-widgetsnbextension >= 4.0 with python-widgetsnbextension < 5) +Requires: (python-jupyterlab_widgets >= 3.0.7 with python-jupyterlab_widgets < 4) +Requires: (python-widgetsnbextension >= 4.0.7 with python-widgetsnbextension < 5) Provides: python-jupyter_ipywidgets = %{version} Obsoletes: python-jupyter_ipywidgets < %{version} BuildArch: noarch # SECTION test requirements BuildRequires: %{python_module ipykernel >= 4.5.1} BuildRequires: %{python_module ipython >= 6.1.0} -BuildRequires: %{python_module ipython_genutils >= 0.2} BuildRequires: %{python_module jsonschema} -BuildRequires: %{python_module jupyterlab_widgets >= 3 with %python-jupyterlab_widgets < 4} +BuildRequires: %{python_module jupyterlab_widgets >= 3.0.7 with %python-jupyterlab_widgets < 4} BuildRequires: %{python_module pytest >= 3.6.0} BuildRequires: %{python_module pytz} BuildRequires: %{python_module traitlets >= 4.3.1} -BuildRequires: %{python_module widgetsnbextension >= 4.0 with %python-widgetsnbextension < 5} +BuildRequires: %{python_module widgetsnbextension >= 4.0.7 with %python-widgetsnbextension < 5} # /SECTION %if "%{python_flavor}" == "python3" || "%{?python_provides}" == "python3" Provides: jupyter-ipywidgets = %{version} ++++++ ipywidgets-8.0.4.tar.gz -> ipywidgets-8.0.6.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/PKG-INFO new/ipywidgets-8.0.6/PKG-INFO --- old/ipywidgets-8.0.4/PKG-INFO 2022-12-22 10:14:32.496301000 +0100 +++ new/ipywidgets-8.0.6/PKG-INFO 2023-03-28 17:16:38.152982000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: ipywidgets -Version: 8.0.4 +Version: 8.0.6 Summary: Jupyter interactive widgets Home-page: http://jupyter.org Author: Jupyter Development Team @@ -31,7 +31,7 @@ # ipywidgets: Interactive HTML Widgets **ipywidgets**, also known as jupyter-widgets or simply widgets, are -[interactive HTML widgets](https://github.com/jupyter-widgets/ipywidgets/blob/master/docs/source/examples/Index.ipynb) +[interactive HTML widgets](https://github.com/jupyter-widgets/ipywidgets/blob/main/docs/source/examples/Index.ipynb) for Jupyter notebooks and the IPython kernel. This package contains the python implementation of the core interactive widgets bundled in ipywidgets. @@ -39,7 +39,7 @@ ## Core Interactive Widgets The fundamental widgets provided by this library are called core interactive -widgets. A [demonstration notebook](https://github.com/jupyter-widgets/ipywidgets/blob/master/docs/source/examples/Index.ipynb) +widgets. A [demonstration notebook](https://github.com/jupyter-widgets/ipywidgets/blob/main/docs/source/examples/Index.ipynb) provides an overview of the core interactive widgets, including: - sliders @@ -49,7 +49,4 @@ - display areas - and more - For more information, see the main [documentation](https://github.com/jupyter-widgets/ipywidgets#readme). - - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/README.md new/ipywidgets-8.0.6/README.md --- old/ipywidgets-8.0.4/README.md 2022-12-22 09:55:44.000000000 +0100 +++ new/ipywidgets-8.0.6/README.md 2023-03-28 17:07:31.000000000 +0200 @@ -1,7 +1,7 @@ # ipywidgets: Interactive HTML Widgets **ipywidgets**, also known as jupyter-widgets or simply widgets, are -[interactive HTML widgets](https://github.com/jupyter-widgets/ipywidgets/blob/master/docs/source/examples/Index.ipynb) +[interactive HTML widgets](https://github.com/jupyter-widgets/ipywidgets/blob/main/docs/source/examples/Index.ipynb) for Jupyter notebooks and the IPython kernel. This package contains the python implementation of the core interactive widgets bundled in ipywidgets. @@ -9,7 +9,7 @@ ## Core Interactive Widgets The fundamental widgets provided by this library are called core interactive -widgets. A [demonstration notebook](https://github.com/jupyter-widgets/ipywidgets/blob/master/docs/source/examples/Index.ipynb) +widgets. A [demonstration notebook](https://github.com/jupyter-widgets/ipywidgets/blob/main/docs/source/examples/Index.ipynb) provides an overview of the core interactive widgets, including: - sliders @@ -19,7 +19,4 @@ - display areas - and more - For more information, see the main [documentation](https://github.com/jupyter-widgets/ipywidgets#readme). - - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/ipywidgets/__init__.py new/ipywidgets-8.0.6/ipywidgets/__init__.py --- old/ipywidgets-8.0.4/ipywidgets/__init__.py 2022-12-22 09:55:44.000000000 +0100 +++ new/ipywidgets-8.0.6/ipywidgets/__init__.py 2023-03-28 17:07:35.000000000 +0200 @@ -21,28 +21,40 @@ from ._version import __version__, __protocol_version__, __jupyter_widgets_controls_version__, __jupyter_widgets_base_version__ import os + +from traitlets import link, dlink from IPython import get_ipython +try: + from comm import get_comm_manager +except ImportError: + def get_comm_manager(): + ip = get_ipython() + + if ip is not None and getattr(ip, "kernel", None) is not None: + return get_ipython().kernel.comm_manager + from .widgets import * -from traitlets import link, dlink + def load_ipython_extension(ip): """Set up Jupyter to work with widgets""" if not hasattr(ip, 'kernel'): return - register_comm_target(ip.kernel) + register_comm_target() def register_comm_target(kernel=None): """Register the jupyter.widget comm target""" - if kernel is None: - kernel = get_ipython().kernel - kernel.comm_manager.register_target('jupyter.widget', Widget.handle_comm_opened) - kernel.comm_manager.register_target('jupyter.widget.control', Widget.handle_control_comm_opened) + comm_manager = get_comm_manager() + if comm_manager is None: + return + comm_manager.register_target('jupyter.widget', Widget.handle_comm_opened) + comm_manager.register_target('jupyter.widget.control', Widget.handle_control_comm_opened) def _handle_ipython(): """Register with the comm target at import if running in Jupyter""" ip = get_ipython() if ip is None: return - load_ipython_extension(ip) + register_comm_target() _handle_ipython() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/ipywidgets/_version.py new/ipywidgets-8.0.6/ipywidgets/_version.py --- old/ipywidgets-8.0.4/ipywidgets/_version.py 2022-12-22 10:14:04.000000000 +0100 +++ new/ipywidgets-8.0.6/ipywidgets/_version.py 2023-03-28 17:15:08.000000000 +0200 @@ -1,7 +1,7 @@ # Copyright (c) Jupyter Development Team. # Distributed under the terms of the Modified BSD License. -__version__ = '8.0.4' +__version__ = '8.0.6' __protocol_version__ = '2.1.0' __control_protocol_version__ = '1.0.0' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/ipywidgets/tests/test_embed.py new/ipywidgets-8.0.6/ipywidgets/tests/test_embed.py --- old/ipywidgets-8.0.4/ipywidgets/tests/test_embed.py 2022-12-22 09:55:44.000000000 +0100 +++ new/ipywidgets-8.0.6/ipywidgets/tests/test_embed.py 2023-03-28 17:07:31.000000000 +0200 @@ -9,6 +9,9 @@ import traitlets +# This has a byproduct of setting up the comms +import ipykernel.ipkernel + from ..widgets import IntSlider, IntText, Text, Widget, jslink, HBox, widget_serialization, widget as widget_module from ..embed import embed_data, embed_snippet, embed_minimal_html, dependency_state diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/ipywidgets/widgets/interaction.py new/ipywidgets-8.0.6/ipywidgets/widgets/interaction.py --- old/ipywidgets-8.0.4/ipywidgets/widgets/interaction.py 2022-12-22 09:55:44.000000000 +0100 +++ new/ipywidgets-8.0.6/ipywidgets/widgets/interaction.py 2023-03-28 17:07:31.000000000 +0200 @@ -208,7 +208,8 @@ # invoke execution. for w in self.kwargs_widgets: if isinstance(w, Text): - w.on_submit(self.update) + w.continuous_update = False + w.observe(self.update, names='value') else: for widget in self.kwargs_widgets: widget.observe(self.update, names='value') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/ipywidgets/widgets/tests/test_interaction.py new/ipywidgets-8.0.6/ipywidgets/widgets/tests/test_interaction.py --- old/ipywidgets-8.0.4/ipywidgets/widgets/tests/test_interaction.py 2022-12-22 09:55:44.000000000 +0100 +++ new/ipywidgets-8.0.6/ipywidgets/widgets/tests/test_interaction.py 2023-03-28 17:07:31.000000000 +0200 @@ -624,4 +624,3 @@ with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), '../../', 'state.schema.json')) as f: schema = json.load(f) jsonschema.validate(state, schema) - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/ipywidgets/widgets/tests/test_widget_output.py new/ipywidgets-8.0.6/ipywidgets/widgets/tests/test_widget_output.py --- old/ipywidgets-8.0.4/ipywidgets/widgets/tests/test_widget_output.py 2022-12-22 09:55:44.000000000 +0100 +++ new/ipywidgets-8.0.6/ipywidgets/widgets/tests/test_widget_output.py 2023-03-28 17:07:31.000000000 +0200 @@ -202,14 +202,14 @@ # Now try appending an Image. image_data = b"foobar" - image_data_b64 = 'Zm9vYmFy\n' widget.append_display_data(Image(image_data, width=123, height=456)) - expected += ( + # Old ipykernel/IPython + expected1 = expected + ( { 'output_type': 'display_data', 'data': { - 'image/png': image_data_b64, + 'image/png': 'Zm9vYmFy\n', 'text/plain': '<IPython.core.display.Image object>' }, 'metadata': { @@ -220,4 +220,20 @@ } }, ) - assert widget.outputs == expected, repr(widget.outputs) + # Latest ipykernel/IPython + expected2 = expected + ( + { + 'output_type': 'display_data', + 'data': { + 'image/png': 'Zm9vYmFy', + 'text/plain': '<IPython.core.display.Image object>' + }, + 'metadata': { + 'image/png': { + 'width': 123, + 'height': 456 + } + } + }, + ) + assert widget.outputs == expected1 or widget.outputs == expected2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/ipywidgets/widgets/tests/test_widget_templates.py new/ipywidgets-8.0.6/ipywidgets/widgets/tests/test_widget_templates.py --- old/ipywidgets-8.0.4/ipywidgets/widgets/tests/test_widget_templates.py 2022-12-22 09:55:45.000000000 +0100 +++ new/ipywidgets-8.0.6/ipywidgets/widgets/tests/test_widget_templates.py 2023-03-28 17:07:31.000000000 +0200 @@ -229,7 +229,7 @@ assert box.layout.grid_template_areas == ('"top-left top-right"\n' + '"bottom-left bottom-right"') # check whether frontend was informed - send_state.assert_called_once_with(key="grid_template_areas") + send_state.assert_called_with(key="grid_template_areas") box = widgets.TwoByTwoLayout(top_left=button1, top_right=button3, bottom_left=None, bottom_right=button4) @@ -240,7 +240,7 @@ box.merge = False assert box.layout.grid_template_areas == ('"top-left top-right"\n' + '"bottom-left bottom-right"') - send_state.assert_called_once_with(key="grid_template_areas") + send_state.assert_called_with(key="grid_template_areas") class TestAppLayout(TestCase): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/ipywidgets/widgets/tests/test_widget_upload.py new/ipywidgets-8.0.6/ipywidgets/widgets/tests/test_widget_upload.py --- old/ipywidgets-8.0.4/ipywidgets/widgets/tests/test_widget_upload.py 2022-12-22 09:55:45.000000000 +0100 +++ new/ipywidgets-8.0.6/ipywidgets/widgets/tests/test_widget_upload.py 2023-03-28 17:07:31.000000000 +0200 @@ -76,8 +76,8 @@ from ipykernel.comm import Comm uploader = FileUpload() mock_comm = MagicMock(spec=Comm) - mock_comm.kernel = 'does not matter' mock_comm.send = MagicMock() + mock_comm.kernel = 'does not matter' uploader.comm = mock_comm message = {'value': [FILE_UPLOAD_FRONTEND_CONTENT]} uploader.set_state(message) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/ipywidgets/widgets/tests/utils.py new/ipywidgets-8.0.6/ipywidgets/widgets/tests/utils.py --- old/ipywidgets-8.0.4/ipywidgets/widgets/tests/utils.py 2022-12-22 09:55:45.000000000 +0100 +++ new/ipywidgets-8.0.6/ipywidgets/widgets/tests/utils.py 2023-03-28 17:07:31.000000000 +0200 @@ -1,31 +1,69 @@ # Copyright (c) Jupyter Development Team. # Distributed under the terms of the Modified BSD License. -from ipykernel.comm import Comm from ipywidgets import Widget import ipywidgets.widgets.widget -class DummyComm(Comm): +# 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 + + +class DummyComm(): comm_id = 'a-b-c-d' kernel = 'Truthy' def __init__(self, *args, **kwargs): - super().__init__(*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_ @@ -34,8 +72,14 @@ Widget._repr_mimebundle_ = raise_not_implemented def teardown_test_comm(): - Widget.comm.klass = Comm - ipywidgets.widgets.widget.Comm = 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) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/ipywidgets/widgets/trait_types.py new/ipywidgets-8.0.6/ipywidgets/widgets/trait_types.py --- old/ipywidgets-8.0.4/ipywidgets/widgets/trait_types.py 2022-12-22 09:55:45.000000000 +0100 +++ new/ipywidgets-8.0.6/ipywidgets/widgets/trait_types.py 2023-03-28 17:07:31.000000000 +0200 @@ -10,7 +10,7 @@ import datetime as dt -_color_names = ['aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beige', 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'fuchsia', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'honeydew', 'hotpink', 'indianred ', 'indigo ', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lights teelblue', 'lightyellow', 'lime', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy', 'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple', 'rebeccapurple', 'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue', 'slategray', 'snow', 'springgreen', 'steelblue', 'tan', 'teal', 'thistle', 'tomato', 'transparent', 'turquoise', 'violet', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen'] +_color_names = ['aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beiae', 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgrey', 'darkgreen', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'fuchsia', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'gray', 'grey', 'green', 'greenyellow', 'honeydew', 'hotpink', 'indianred ', 'indigo ', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgrey', 'lightgreen', 'lightpink', 'lightsalmon ', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'lime', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy', 'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple', 'rebeccapurple', 'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'teal', 'thistle', 'tomato', 'transparent', 'turquoise', 'violet', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen'] # Regex colors #fff and #ffffff _color_hex_re = re.compile(r'#[a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?$') @@ -367,11 +367,11 @@ # The regexp is taken -# from https://github.com/d3/d3-format/blob/master/src/formatSpecifier.js +# from https://github.com/d3/d3-format/blob/main/src/formatSpecifier.js _number_format_re = re.compile(r'^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$', re.I) # The valid types are taken from -# https://github.com/d3/d3-format/blob/master/src/formatTypes.js +# https://github.com/d3/d3-format/blob/main/src/formatTypes.js _number_format_types = { 'e', 'f', 'g', 'r', 's', '%', 'p', 'b', 'o', 'd', 'x', 'X', 'c', '' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/ipywidgets/widgets/widget.py new/ipywidgets-8.0.6/ipywidgets/widgets/widget.py --- old/ipywidgets-8.0.4/ipywidgets/widgets/widget.py 2022-12-22 09:55:45.000000000 +0100 +++ new/ipywidgets-8.0.6/ipywidgets/widgets/widget.py 2023-03-28 17:07:31.000000000 +0200 @@ -10,9 +10,8 @@ from contextlib import contextmanager from collections.abc import Iterable from IPython import get_ipython -from ipykernel.comm import Comm from traitlets import ( - HasTraits, Unicode, Dict, Instance, List, Int, Set, Bytes, observe, default, Container, + Any, HasTraits, Unicode, Dict, Instance, List, Int, Set, Bytes, observe, default, Container, Undefined) from json import loads as jsonloads, dumps as jsondumps @@ -480,7 +479,7 @@ _view_count = Int(None, allow_none=True, help="EXPERIMENTAL: The number of views of the model displayed in the frontend. This attribute is experimental and may change or be removed in the future. None signifies that views will not be tracked. Set this to 0 to start tracking view creation/deletion.").tag(sync=True) - comm = Instance('ipykernel.comm.Comm', allow_none=True) + comm = Any(allow_none=True) keys = List(help="The traits which are synced.") @@ -525,7 +524,15 @@ if self._model_id is not None: args['comm_id'] = self._model_id - self.comm = Comm(**args) + try: + from comm import create_comm + except ImportError: + def create_comm(**kwargs): + from ipykernel.comm import Comm + + return Comm(**kwargs) + + self.comm = create_comm(**args) @observe('comm') def _comm_changed(self, change): @@ -686,7 +693,7 @@ # Send the state to the frontend before the user-registered callbacks # are called. name = change['name'] - if self.comm is not None and self.comm.kernel is not None: + if self.comm is not None and getattr(self.comm, 'kernel', True) is not None: # Make sure this isn't information that the front-end just sent us. if name in self.keys and self._should_send_property(name, getattr(self, name)): # Send new state to front-end @@ -814,7 +821,7 @@ def _send(self, msg, buffers=None): """Sends a message to the model in the front-end.""" - if self.comm is not None and self.comm.kernel is not None: + if self.comm is not None and (self.comm.kernel is not None if hasattr(self.comm, "kernel") else True): self.comm.send(data=msg, buffers=buffers) def _repr_keys(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/ipywidgets/widgets/widget_output.py new/ipywidgets-8.0.6/ipywidgets/widgets/widget_output.py --- old/ipywidgets-8.0.4/ipywidgets/widgets/widget_output.py 2022-12-22 09:55:45.000000000 +0100 +++ new/ipywidgets-8.0.6/ipywidgets/widgets/widget_output.py 2023-03-28 17:07:35.000000000 +0200 @@ -111,9 +111,9 @@ kernel = None if ip and getattr(ip, "kernel", None) is not None: kernel = ip.kernel - elif self.comm is not None and self.comm.kernel is not None: + elif self.comm is not None and getattr(self.comm, 'kernel', None) is not None: kernel = self.comm.kernel - + if kernel: parent = None if hasattr(kernel, "get_parent"): @@ -134,7 +134,10 @@ if ip: kernel = ip ip.showtraceback((etype, evalue, tb), tb_offset=0) - elif self.comm is not None and self.comm.kernel is not None: + elif (self.comm is not None and + getattr(self.comm, "kernel", None) is not None and + # Check if it's ipykernel + getattr(self.comm.kernel, "send_response", None) is not None): kernel = self.comm.kernel kernel.send_response(kernel.iopub_socket, u'error', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/ipywidgets.egg-info/PKG-INFO new/ipywidgets-8.0.6/ipywidgets.egg-info/PKG-INFO --- old/ipywidgets-8.0.4/ipywidgets.egg-info/PKG-INFO 2022-12-22 10:14:32.000000000 +0100 +++ new/ipywidgets-8.0.6/ipywidgets.egg-info/PKG-INFO 2023-03-28 17:16:38.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: ipywidgets -Version: 8.0.4 +Version: 8.0.6 Summary: Jupyter interactive widgets Home-page: http://jupyter.org Author: Jupyter Development Team @@ -31,7 +31,7 @@ # ipywidgets: Interactive HTML Widgets **ipywidgets**, also known as jupyter-widgets or simply widgets, are -[interactive HTML widgets](https://github.com/jupyter-widgets/ipywidgets/blob/master/docs/source/examples/Index.ipynb) +[interactive HTML widgets](https://github.com/jupyter-widgets/ipywidgets/blob/main/docs/source/examples/Index.ipynb) for Jupyter notebooks and the IPython kernel. This package contains the python implementation of the core interactive widgets bundled in ipywidgets. @@ -39,7 +39,7 @@ ## Core Interactive Widgets The fundamental widgets provided by this library are called core interactive -widgets. A [demonstration notebook](https://github.com/jupyter-widgets/ipywidgets/blob/master/docs/source/examples/Index.ipynb) +widgets. A [demonstration notebook](https://github.com/jupyter-widgets/ipywidgets/blob/main/docs/source/examples/Index.ipynb) provides an overview of the core interactive widgets, including: - sliders @@ -49,7 +49,4 @@ - display areas - and more - For more information, see the main [documentation](https://github.com/jupyter-widgets/ipywidgets#readme). - - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/ipywidgets.egg-info/requires.txt new/ipywidgets-8.0.6/ipywidgets.egg-info/requires.txt --- old/ipywidgets-8.0.4/ipywidgets.egg-info/requires.txt 2022-12-22 10:14:32.000000000 +0100 +++ new/ipywidgets-8.0.6/ipywidgets.egg-info/requires.txt 2023-03-28 17:16:38.000000000 +0200 @@ -1,11 +1,12 @@ ipykernel>=4.5.1 ipython>=6.1.0 traitlets>=4.3.1 -widgetsnbextension~=4.0 -jupyterlab_widgets~=3.0 +widgetsnbextension~=4.0.7 +jupyterlab_widgets~=3.0.7 [test] jsonschema +ipykernel pytest>=3.6.0 pytest-cov pytz diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipywidgets-8.0.4/setup.cfg new/ipywidgets-8.0.6/setup.cfg --- old/ipywidgets-8.0.4/setup.cfg 2022-12-22 10:14:32.496613500 +0100 +++ new/ipywidgets-8.0.6/setup.cfg 2023-03-28 17:16:38.153421400 +0200 @@ -3,7 +3,7 @@ version = attr: ipywidgets._version.__version__ author = Jupyter Development Team author_email = jupy...@googlegroups.com -license_file = LICENSE +license_files = LICENSE description = Jupyter interactive widgets long_description = file: README.md long_description_content_type = text/markdown @@ -34,12 +34,13 @@ ipykernel>=4.5.1 ipython>=6.1.0 traitlets>=4.3.1 - widgetsnbextension~=4.0 - jupyterlab_widgets~=3.0 + widgetsnbextension~=4.0.7 + jupyterlab_widgets~=3.0.7 [options.extras_require] test = jsonschema + ipykernel pytest>=3.6.0 pytest-cov pytz