From f3b2c2f0456a17c485e418640f07acca08f6a227 Mon Sep 17 00:00:00 2001 From: Devin Stein Date: Sat, 31 Dec 2022 18:02:57 -0800 Subject: [PATCH 1/4] feat: support ipywidgets>8 by passing tuples to dropdown instead of dict --- .../tests/test_encodingwidget.py | 47 +++++++++++-------- .../autovizwidget/widget/encodingwidget.py | 25 +++++----- .../controllerwidget/addendpointwidget.py | 8 ++-- .../magicscontrollerwidget.py | 3 +- 4 files changed, 46 insertions(+), 37 deletions(-) diff --git a/autovizwidget/autovizwidget/tests/test_encodingwidget.py b/autovizwidget/autovizwidget/tests/test_encodingwidget.py index 4a485c0b..ccd881c6 100644 --- a/autovizwidget/autovizwidget/tests/test_encodingwidget.py +++ b/autovizwidget/autovizwidget/tests/test_encodingwidget.py @@ -55,16 +55,23 @@ def test_encoding_with_all_none_doesnt_throw(): EncodingWidget(df, encoding, change_hook, ipywidget_factory, testing=True) + # call(options=[('-', None), ('buildingID', 'buildingID'), ('date', 'date'), ('temp_diff', 'temp_diff')], description='X', value=None), + # call().on_trait_change(,))>, 'value'), + # call(options=[('-', None), ('buildingID', 'buildingID'), ('date', 'date'), ('temp_diff', 'temp_diff')], description='Y', value=None), + # call().on_trait_change(,))>, 'value'), + # call(options=[('-', 'None'), ('Avg', 'Avg'), ('Min', 'Min'), ('Max', 'Max'), ('Sum', 'Sum'), ('Count', 'Count')], description='Func.', value='none'), + # call().on_trait_change(,))>, 'value') + assert ( call( description="X", value=None, - options={ - "date": "date", - "temp_diff": "temp_diff", - "-": None, - "buildingID": "buildingID", - }, + options=[ + ("-", None), + ("buildingID", "buildingID"), + ("date", "date"), + ("temp_diff", "temp_diff"), + ], ) in ipywidget_factory.get_dropdown.mock_calls ) @@ -72,12 +79,12 @@ def test_encoding_with_all_none_doesnt_throw(): call( description="Y", value=None, - options={ - "date": "date", - "temp_diff": "temp_diff", - "-": None, - "buildingID": "buildingID", - }, + options=[ + ("-", None), + ("buildingID", "buildingID"), + ("date", "date"), + ("temp_diff", "temp_diff"), + ], ) in ipywidget_factory.get_dropdown.mock_calls ) @@ -85,14 +92,14 @@ def test_encoding_with_all_none_doesnt_throw(): call( description="Func.", value="none", - options={ - "Max": "Max", - "Sum": "Sum", - "Avg": "Avg", - "-": "None", - "Min": "Min", - "Count": "Count", - }, + options=[ + ("-", "None"), + ("Avg", "Avg"), + ("Min", "Min"), + ("Max", "Max"), + ("Sum", "Sum"), + ("Count", "Count"), + ], ) in ipywidget_factory.get_dropdown.mock_calls ) diff --git a/autovizwidget/autovizwidget/widget/encodingwidget.py b/autovizwidget/autovizwidget/widget/encodingwidget.py index 38bb0af6..6fecd95d 100644 --- a/autovizwidget/autovizwidget/widget/encodingwidget.py +++ b/autovizwidget/autovizwidget/widget/encodingwidget.py @@ -43,8 +43,8 @@ def __init__( ) # X view - options_x_view = {text(i): text(i) for i in self.df.columns} - options_x_view["-"] = None + options_x_view = [(text(i), text(i)) for i in self.df.columns] + options_x_view.insert(0, ("-", None)) self.x_view = self.ipywidget_factory.get_dropdown( options=options_x_view, description="X", value=self.encoding.x ) @@ -52,8 +52,8 @@ def __init__( self.x_view.layout.width = "200px" # Y - options_y_view = {text(i): text(i) for i in self.df.columns} - options_y_view["-"] = None + options_y_view = [(text(i), text(i)) for i in self.df.columns] + options_y_view.insert(0, ("-", None)) y_column_view = self.ipywidget_factory.get_dropdown( options=options_y_view, description="Y", value=self.encoding.y ) @@ -62,15 +62,16 @@ def __init__( # Y aggregator value_for_view = self._get_value_for_aggregation(self.encoding.y_aggregation) + options_y_agg_view = [ + ("-", Encoding.y_agg_none), + (Encoding.y_agg_avg, Encoding.y_agg_avg), + (Encoding.y_agg_min, Encoding.y_agg_min), + (Encoding.y_agg_max, Encoding.y_agg_max), + (Encoding.y_agg_sum, Encoding.y_agg_sum), + (Encoding.y_agg_count, Encoding.y_agg_count), + ] self.y_agg_view = self.ipywidget_factory.get_dropdown( - options={ - "-": Encoding.y_agg_none, - Encoding.y_agg_avg: Encoding.y_agg_avg, - Encoding.y_agg_min: Encoding.y_agg_min, - Encoding.y_agg_max: Encoding.y_agg_max, - Encoding.y_agg_sum: Encoding.y_agg_sum, - Encoding.y_agg_count: Encoding.y_agg_count, - }, + options=options_y_agg_view, description="Func.", value=value_for_view, ) diff --git a/sparkmagic/sparkmagic/controllerwidget/addendpointwidget.py b/sparkmagic/sparkmagic/controllerwidget/addendpointwidget.py index c795c80a..39af7b80 100644 --- a/sparkmagic/sparkmagic/controllerwidget/addendpointwidget.py +++ b/sparkmagic/sparkmagic/controllerwidget/addendpointwidget.py @@ -33,8 +33,9 @@ def __init__( auth_class = getattr(events_handler_module, class_name) self.auth_instances[auth] = auth_class() + dropdown_options = [(k, v) for k, v in conf.authenticators()] self.auth_type = self.ipywidget_factory.get_dropdown( - options=conf.authenticators(), description="Auth type:" + options=dropdown_options, description="Auth type:" ) # combine all authentication instance's widgets into one list to pass to self.children. @@ -89,9 +90,8 @@ def run(self): raise def _update_auth(self): - """ - Create an instance of the chosen auth type maps to in the config file. - """ + """Create an instance of the chosen auth type maps to in the config + file.""" for widget in self.auth.widgets: widget.layout.display = "none" self.auth = self.auth_instances.get(self.auth_type.value) diff --git a/sparkmagic/sparkmagic/controllerwidget/magicscontrollerwidget.py b/sparkmagic/sparkmagic/controllerwidget/magicscontrollerwidget.py index 9e990ce5..c4b2f667 100644 --- a/sparkmagic/sparkmagic/controllerwidget/magicscontrollerwidget.py +++ b/sparkmagic/sparkmagic/controllerwidget/magicscontrollerwidget.py @@ -61,8 +61,9 @@ def _get_default_endpoints(): return default_endpoints def _refresh(self): + dropdown_options = [(k, v) for k, v in self.endpoints.items()] self.endpoints_dropdown_widget = self.ipywidget_factory.get_dropdown( - description="Endpoint:", options=self.endpoints + description="Endpoint:", options=dropdown_options ) self.manage_session = ManageSessionWidget( From fae29c4cfbcd04bf263dd34701f1398ee2e5aacf Mon Sep 17 00:00:00 2001 From: Devin Stein Date: Sat, 31 Dec 2022 18:10:24 -0800 Subject: [PATCH 2/4] chore: update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6361497..1f3be024 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ ### Updates * Add official support for Python 3.10 and 3.11 +### Bug Fixes +* Support `ipywidgets==8.0.0` + ## 0.20.1 ### Bug Fixes From 96b09f3f797fe74c079cabd23938d8d7653bc3e2 Mon Sep 17 00:00:00 2001 From: Devin Stein Date: Sat, 31 Dec 2022 18:12:00 -0800 Subject: [PATCH 3/4] fix: remove comments --- autovizwidget/autovizwidget/tests/test_encodingwidget.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/autovizwidget/autovizwidget/tests/test_encodingwidget.py b/autovizwidget/autovizwidget/tests/test_encodingwidget.py index ccd881c6..1d4c59c2 100644 --- a/autovizwidget/autovizwidget/tests/test_encodingwidget.py +++ b/autovizwidget/autovizwidget/tests/test_encodingwidget.py @@ -55,13 +55,6 @@ def test_encoding_with_all_none_doesnt_throw(): EncodingWidget(df, encoding, change_hook, ipywidget_factory, testing=True) - # call(options=[('-', None), ('buildingID', 'buildingID'), ('date', 'date'), ('temp_diff', 'temp_diff')], description='X', value=None), - # call().on_trait_change(,))>, 'value'), - # call(options=[('-', None), ('buildingID', 'buildingID'), ('date', 'date'), ('temp_diff', 'temp_diff')], description='Y', value=None), - # call().on_trait_change(,))>, 'value'), - # call(options=[('-', 'None'), ('Avg', 'Avg'), ('Min', 'Min'), ('Max', 'Max'), ('Sum', 'Sum'), ('Count', 'Count')], description='Func.', value='none'), - # call().on_trait_change(,))>, 'value') - assert ( call( description="X", From a7d4aa4d5532271e06a118d769a4162c3f13edd1 Mon Sep 17 00:00:00 2001 From: Devin Stein Date: Sat, 31 Dec 2022 18:14:23 -0800 Subject: [PATCH 4/4] fix: add missing .items() --- sparkmagic/sparkmagic/controllerwidget/addendpointwidget.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sparkmagic/sparkmagic/controllerwidget/addendpointwidget.py b/sparkmagic/sparkmagic/controllerwidget/addendpointwidget.py index 39af7b80..471cdb8e 100644 --- a/sparkmagic/sparkmagic/controllerwidget/addendpointwidget.py +++ b/sparkmagic/sparkmagic/controllerwidget/addendpointwidget.py @@ -33,7 +33,7 @@ def __init__( auth_class = getattr(events_handler_module, class_name) self.auth_instances[auth] = auth_class() - dropdown_options = [(k, v) for k, v in conf.authenticators()] + dropdown_options = [(k, v) for k, v in conf.authenticators().items()] self.auth_type = self.ipywidget_factory.get_dropdown( options=dropdown_options, description="Auth type:" )