Skip to content

Commit

Permalink
Add View variable integration test
Browse files Browse the repository at this point in the history
  • Loading branch information
philippjfr committed Feb 16, 2022
1 parent a5a2778 commit af0db2f
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 7 deletions.
3 changes: 0 additions & 3 deletions lumen/sources/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,11 +171,9 @@ def _recursive_resolve(cls, spec, source_type):
}
if 'source' in source_type.param and 'source' in spec:
resolved_spec['source'] = cls.from_spec(spec.pop('source'))
print(spec)
for k, v in spec.items():
if isinstance(v, str) and v.startswith('@'):
refs[k] = v
print(k, v, state.resolve_reference(v))
v = state.resolve_reference(v)
elif isinstance(v, dict):
v, subrefs = cls._recursive_resolve(v, source_type)
Expand Down Expand Up @@ -543,7 +541,6 @@ def _load_table(self, table, dask=True):

@cached()
def get(self, table, **query):
print('>>>>>>', table)
dask = query.pop('__dask', self.dask)
df = self._load_table(table)
df = self._filter_dataframe(df, **query)
Expand Down
4 changes: 2 additions & 2 deletions lumen/target.py
Original file line number Diff line number Diff line change
Expand Up @@ -454,8 +454,8 @@ def _update_views(self, invalidate_cache=True, update_views=True, init=False, ev
rerender_cache = partial(self._rerender, invalidate_cache=True)
transforms = []
for view in linked_views:
if view.controls:
view.param.watch(rerender, view.controls)
if view.refs:
view.param.watch(rerender_cache, view.refs)
for transform in view.transforms:
if transform.refs and not transform in transforms:
transforms.append(transform)
Expand Down
17 changes: 17 additions & 0 deletions lumen/tests/sample_dashboard/view_variable.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
variables:
page_size:
type: constant
default: 20
sources:
test:
type: 'file'
tables: ['../sources/test.csv']
kwargs:
parse_dates: ['D']
targets:
- title: "Test"
source: test
views:
- type: table
table: test
page_size: "@variables.page_size"
16 changes: 16 additions & 0 deletions lumen/tests/test_dashboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,19 @@ def test_dashboard_with_source_variable(set_root, document):
state.variables.tables = {'test': '../sources/test2.csv'}

pd.testing.assert_frame_equal(table.value, expected.iloc[::-1].reset_index(drop=True))

def test_dashboard_with_view_variable(set_root, document):
root = pathlib.Path(__file__).parent / 'sample_dashboard'
set_root(str(root))
dashboard = Dashboard(str(root / 'view_variable.yml'))
dashboard._render_dashboard()
target = dashboard.targets[0]
target.update()

table = target._cards[0][0][0]

assert table.page_size == 20

state.variables.page_size = 10

assert table.page_size == 10
12 changes: 11 additions & 1 deletion lumen/variables/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ def __getitem__(self, key):
def from_spec(cls, spec):
vars = {}
for name, var_spec in spec.items():
if not isinstance(var_spec, dict):
var_spec = {
'type': 'constant',
'default': var_spec
}
vars[name] = Variable.from_spec(dict(var_spec, name=name), vars)
return cls(**vars)

Expand Down Expand Up @@ -138,7 +143,12 @@ def __init__(self, **params):
widget_type = getattr(pn.widgets, kind)
if 'value' not in params:
params['default'] = default
self._widget = widget_type(**params)
deserialized = {}
for k, v in params.items():
if k in widget_type.param:
v = widget_type.param[k].deserialize(v)
deserialized[k] = v
self._widget = widget_type(**deserialized)
self._widget.link(self, value='value', bidirectional=True)

@property
Expand Down
6 changes: 5 additions & 1 deletion lumen/views/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -609,6 +609,9 @@ class Table(View):
Renders a Source table using a Panel Table widget.
"""

page_size = param.Integer(default=20, bounds=(1, None), doc="""
Number of rows to render per page, if pagination is enabled.""")

view_type = 'table'

_extension = 'tabulator'
Expand All @@ -617,7 +620,8 @@ def get_panel(self):
return pn.widgets.tables.Tabulator(**self._get_params())

def _get_params(self):
return dict(value=self.get_data(), disabled=True, **self.kwargs)
return dict(value=self.get_data(), disabled=True, page_size=self.page_size,
**self.kwargs)


class DownloadView(View):
Expand Down

0 comments on commit af0db2f

Please sign in to comment.