From d4bd1180b613b27da36728abfb35e6bb0c90d819 Mon Sep 17 00:00:00 2001 From: maximlt Date: Tue, 5 Oct 2021 20:26:18 +0200 Subject: [PATCH 1/5] Expose disabled property --- lumen/views/base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lumen/views/base.py b/lumen/views/base.py index 121eb5ef4..87e898fd9 100644 --- a/lumen/views/base.py +++ b/lumen/views/base.py @@ -222,6 +222,7 @@ def get_data(self): query = { filt.field: filt.query for filt in self.filters if filt.query is not None and + not filt.disabled and (filt.table is None or filt.table == self.table) } data = self.source.get(self.table, **query) From 701147c59af48502b9052b8a4d778c6451a547e9 Mon Sep 17 00:00:00 2001 From: maximlt Date: Tue, 5 Oct 2021 20:26:51 +0200 Subject: [PATCH 2/5] Ignore filter if disabled in get_data --- lumen/filters/base.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lumen/filters/base.py b/lumen/filters/base.py index d835b0c6d..de2ce8871 100644 --- a/lumen/filters/base.py +++ b/lumen/filters/base.py @@ -164,13 +164,16 @@ class BaseWidgetFilter(Filter): visible = param.Boolean(default=True, doc=""" Whether the filter should be visible.""") + + disabled = param.Boolean(default=True, doc=""" + Whether the filter should be disabled.""") __abstract__ = True @property def panel(self): widget = self.widget.clone() - self.widget.link(widget, value='value', visible='visible', bidirectional=True) + self.widget.link(widget, value='value', visible='visible', disabled='disabled', bidirectional=True) return widget @@ -204,7 +207,8 @@ def __init__(self, **params): self.widget.value = ' ' self.widget.name = self.label self.widget.visible = self.visible - self.widget.link(self, value='value', visible='visible', bidirectional=True) + self.widget.disabled = self.disabled + self.widget.link(self, value='value', visible='visible', disabled='disabled', bidirectional=True) if self.default is not None: self.widget.value = self.default @@ -257,7 +261,7 @@ def __init__(self, **params): else: value = tuple(self.default) self.widget = widget(name=self.label, options=options, value=value) - self.widget.link(self, value='value', visible='visible', bidirectional=True) + self.widget.link(self, value='value', visible='visible', disabled='disabled', bidirectional=True) @property def query(self): From 216bb4398532cb1fd3ecf91596a7cee57f24b5bc Mon Sep 17 00:00:00 2001 From: maximlt Date: Wed, 6 Oct 2021 13:05:17 +0200 Subject: [PATCH 3/5] use getattr to retrieve disabled --- lumen/views/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lumen/views/base.py b/lumen/views/base.py index 87e898fd9..8b55e7406 100644 --- a/lumen/views/base.py +++ b/lumen/views/base.py @@ -222,7 +222,7 @@ def get_data(self): query = { filt.field: filt.query for filt in self.filters if filt.query is not None and - not filt.disabled and + not getattr(filt, 'disabled', None) and (filt.table is None or filt.table == self.table) } data = self.source.get(self.table, **query) From 6f4dbf0842dbc1a2634260f5343b212652b734a6 Mon Sep 17 00:00:00 2001 From: maximlt Date: Wed, 6 Oct 2021 13:06:13 +0200 Subject: [PATCH 4/5] add some tests --- lumen/tests/filters/test_base.py | 8 +++++++ lumen/tests/views/test_base.py | 38 +++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/lumen/tests/filters/test_base.py b/lumen/tests/filters/test_base.py index 4f843b3d7..9fc07dbd9 100644 --- a/lumen/tests/filters/test_base.py +++ b/lumen/tests/filters/test_base.py @@ -27,3 +27,11 @@ def test_widget_filter_link(): wfilter.value = (2, 2) assert widget.value == (2, 2) + + widget.visible = False + + assert wfilter.visible == False + + widget.disabled = False + + assert widget.disabled == False diff --git a/lumen/tests/views/test_base.py b/lumen/tests/views/test_base.py index e6fd3d304..464ac8dad 100644 --- a/lumen/tests/views/test_base.py +++ b/lumen/tests/views/test_base.py @@ -1,5 +1,41 @@ -from lumen.views import View +from pathlib import Path + +import pandas as pd + +from lumen.sources import FileSource +from lumen.views import View, hvPlotView def test_resolve_module_type(): assert View._get_type('lumen.views.base.View') is View + + +def test_view_hvplot_basis(set_root): + set_root(str(Path(__file__).parent.parent)) + source = FileSource(tables={'test': 'sources/test.csv'}) + view = { + 'type': 'hvplot', + 'table': 'test', + 'x': 'A', + 'y': 'B', + 'kind': 'scatter', + } + + view = View.from_spec(view, source, []) + + assert isinstance(view, hvPlotView) + assert view.kind == 'scatter' + assert view.source == source + assert view.filters == [] + assert view.transforms == [] + assert view.controls == [] + + df = view.get_data() + + assert isinstance(df, pd.DataFrame) + assert df.shape == (5, 4) + + plot = view.get_plot(df) + + assert plot.kdims == ['A'] + assert plot.vdims == ['B'] From bc9fba4785e66373cdab6cbf6cd65ba4908832fc Mon Sep 17 00:00:00 2001 From: maximlt Date: Wed, 6 Oct 2021 14:51:45 +0200 Subject: [PATCH 5/5] Defaulf of disabled is False and reorder parameters --- lumen/filters/base.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lumen/filters/base.py b/lumen/filters/base.py index de2ce8871..d582377c9 100644 --- a/lumen/filters/base.py +++ b/lumen/filters/base.py @@ -161,12 +161,12 @@ class BaseWidgetFilter(Filter): default = param.Parameter(doc=""" The default value to use on the widget.""") + + disabled = param.Boolean(default=False, doc=""" + Whether the filter should be disabled.""") visible = param.Boolean(default=True, doc=""" Whether the filter should be visible.""") - - disabled = param.Boolean(default=True, doc=""" - Whether the filter should be disabled.""") __abstract__ = True