From 6380d894865d60c95cee53784dd1d8b5051bbd9c Mon Sep 17 00:00:00 2001 From: betolink Date: Mon, 20 Mar 2023 17:22:59 -0500 Subject: [PATCH 1/3] fix observe anotation --- packages/vaex-jupyter/vaex/jupyter/widgets.py | 326 +++++++++++------- 1 file changed, 205 insertions(+), 121 deletions(-) diff --git a/packages/vaex-jupyter/vaex/jupyter/widgets.py b/packages/vaex-jupyter/vaex/jupyter/widgets.py index 283981a4dd..a88db9d77a 100644 --- a/packages/vaex-jupyter/vaex/jupyter/widgets.py +++ b/packages/vaex-jupyter/vaex/jupyter/widgets.py @@ -1,12 +1,15 @@ from __future__ import absolute_import + +import os + import ipyvuetify as v import ipywidgets as widgets +import vaex.jupyter + import traitlets from traitlets import * # noqa -from . import traitlets as vt -import os -import vaex.jupyter +from . import traitlets as vt def load_template(filename): @@ -21,12 +24,13 @@ def component(name): def wrapper(cls): vaex_components[name] = cls return cls + return wrapper # mixin class class UsesVaexComponents(traitlets.HasTraits): - @traitlets.default('components') + @traitlets.default("components") def _components(self): return vaex_components @@ -34,7 +38,7 @@ def _components(self): class PlotTemplate(v.VuetifyTemplate): show_output = traitlets.Bool(False).tag(sync=True) new_output = traitlets.Bool(False).tag(sync=True) - title = traitlets.Unicode('Vaex').tag(sync=True) + title = traitlets.Unicode("Vaex").tag(sync=True) drawer = traitlets.Bool(True).tag(sync=True) clipped = traitlets.Bool(False).tag(sync=True) @@ -42,13 +46,18 @@ class PlotTemplate(v.VuetifyTemplate): floating = traitlets.Bool(False).tag(sync=True) dark = traitlets.Bool(False).tag(sync=True) mini = traitlets.Bool(False).tag(sync=True) - components = traitlets.Dict(None, allow_none=True).tag(sync=True, **widgets.widget.widget_serialization) + components = traitlets.Dict(None, allow_none=True).tag( + sync=True, **widgets.widget.widget_serialization + ) items = traitlets.Any([]).tag(sync=True) - type = traitlets.Unicode('temporary').tag(sync=True) - items = traitlets.List(['red', 'green', 'purple']).tag(sync=True) - button_text = traitlets.Unicode('menu').tag(sync=True) - drawers = traitlets.Any(['Default (no property)', 'Permanent', 'Temporary']).tag(sync=True) - template = traitlets.Unicode(''' + type = traitlets.Unicode("temporary").tag(sync=True) + items = traitlets.List(["red", "green", "purple"]).tag(sync=True) + button_text = traitlets.Unicode("menu").tag(sync=True) + drawers = traitlets.Any(["Default (no property)", "Permanent", "Temporary"]).tag( + sync=True + ) + template = traitlets.Unicode( + """ -''').tag(sync=True) +""" + ).tag(sync=True) -@component('vaex-counter') +@component("vaex-counter") class Counter(v.VuetifyTemplate): characters = traitlets.List(traitlets.Unicode()).tag(sync=True) value = traitlets.Integer(None, allow_none=True) - format = traitlets.Unicode('{: 14,d}') - prefix = traitlets.Unicode('').tag(sync=True) - postfix = traitlets.Unicode('').tag(sync=True) + format = traitlets.Unicode("{: 14,d}") + prefix = traitlets.Unicode("").tag(sync=True) + postfix = traitlets.Unicode("").tag(sync=True) - @traitlets.observe('value') + @traitlets.observe("value") def _value(self, change): text = self.format.format(self.value) - self.characters = [k.replace(' ', ' ') for k in text] + self.characters = [k.replace(" ", " ") for k in text] - template = traitlets.Unicode(''' + template = traitlets.Unicode( + """
{{ prefix }} @@ -128,42 +139,48 @@ def _value(self, change): {{ postfix }}
- ''').tag(sync=True) + """ + ).tag(sync=True) -@component('vaex-status') +@component("vaex-status") class Status(v.VuetifyTemplate): value = traitlets.Unicode().tag(sync=True) - template = traitlets.Unicode(''' + template = traitlets.Unicode( + """ - ''').tag(sync=True) + """ + ).tag(sync=True) -@component('vaex-progress-circular') +@component("vaex-progress-circular") class ProgressCircularNoAnimation(v.VuetifyTemplate): """v-progress-circular that avoids animations""" + parts = traitlets.List(traitlets.Unicode()).tag(sync=True) width = traitlets.Integer().tag(sync=True) size = traitlets.Integer().tag(sync=True) value = traitlets.Float().tag(sync=True) - color = traitlets.Unicode('{: 14,d}').tag(sync=True) - text = traitlets.Unicode('{: 14,d}').tag(sync=True) + color = traitlets.Unicode("{: 14,d}").tag(sync=True) + text = traitlets.Unicode("{: 14,d}").tag(sync=True) hidden = traitlets.Bool(False).tag(sync=True) - template = traitlets.Unicode(''' + template = traitlets.Unicode( + """ {{ text }} {{ text }} - ''').tag(sync=True) + """ + ).tag(sync=True) -@component('vaex-expression') +@component("vaex-expression") class Expression(v.TextField): df = traitlets.Any() valid = traitlets.Bool(True) value = vt.Expression(None, allow_none=True) - @traitlets.default('v_model') + @traitlets.default("v_model") def _v_model(self): columns = self.df.get_column_names(strings=False) if columns: @@ -174,27 +191,27 @@ def _v_model(self): columns = self.df.get_column_names() return columns[0] - @traitlets.default('value') + @traitlets.default("value") def _value(self): self.value = None if self.v_model is None else self.df[self.v_model] - @traitlets.default('label') + @traitlets.default("label") def _label(self): return "Custom expression" - @traitlets.default('placeholder') + @traitlets.default("placeholder") def _placeholder(self): return "Enter a custom expression" - @traitlets.default('prepend_icon') + @traitlets.default("prepend_icon") def _prepend_icon(self): - return 'functions' + return "functions" - @traitlets.observe('v_model') + @traitlets.observe("v_model") def _on_update_v_model(self, change): self.check_expression() - @traitlets.observe('value') + @traitlets.observe("value") def _on_update_value(self, change): self.v_model = None if self.value is None else str(self.value) @@ -223,30 +240,30 @@ def _clear_succes(self): class ExpressionSelectionTextArea(ExpressionTextArea): # selection is v_model - selection_name = traitlets.Any('default') + selection_name = traitlets.Any("default") def __init__(self, **kwargs): super().__init__(**kwargs) # self.update_selection() - @traitlets.default('v_model') + @traitlets.default("v_model") def _v_model(self): columns = self.df.get_column_names(strings=False) - return columns[0] + ' == 0' + return columns[0] + " == 0" - @traitlets.default('label') + @traitlets.default("label") def _label(self): return "Filter by custom expression" - @traitlets.default('placeholder') + @traitlets.default("placeholder") def _placeholder(self): return "Enter a custom (boolean) expression" - @traitlets.default('prepend_icon') + @traitlets.default("prepend_icon") def _prepend_icon(self): - return 'filter_list' + return "filter_list" - @traitlets.observe('v_model') + @traitlets.observe("v_model") def update_custom_selection(self, change): if self.check_expression(): self.update_selection() @@ -257,9 +274,12 @@ def update_selection(self): class ColumnPicker(v.VuetifyTemplate): df = traitlets.Any() - items = traitlets.List(['foo', 'bar']).tag(sync=True) - tooltip = traitlets.Unicode('Add example expression based on column...').tag(sync=True) - template = traitlets.Unicode(''' + items = traitlets.List(["foo", "bar"]).tag(sync=True) + tooltip = traitlets.Unicode("Add example expression based on column...").tag( + sync=True + ) + template = traitlets.Unicode( + """