Skip to content

Commit

Permalink
modifications from select_behavior branch
Browse files Browse the repository at this point in the history
  • Loading branch information
xavArtley committed Oct 29, 2019
1 parent ae82510 commit d5d7fff
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 32 deletions.
22 changes: 11 additions & 11 deletions panel/tests/test_param.py
Original file line number Diff line number Diff line change
Expand Up @@ -291,32 +291,32 @@ class Test(param.Parameterized):
test_pane = Pane(test)
model = test_pane.get_root(document, comm=comm)

slider = model.children[1]
assert isinstance(slider, Select)
assert slider.options == ['1', 'b', 'c']
assert slider.value == 'b'
assert slider.disabled == False
select = model.children[1]
assert isinstance(select, Select)
assert select.options == [('1','1'), ('b','b'), ('c','c')]
assert select.value == 'b'
assert select.disabled == False

# Check changing param value updates widget
test.a = 1
assert slider.value == '1'
assert select.value == '1'

# Check changing param attribute updates widget
a_param = test.param['a']
a_param.objects = ['c', 'd', 1]
assert slider.options == ['c', 'd', '1']
assert select.options == [('c','c'), ('d','d'), ('1','1')]

a_param.constant = True
assert slider.disabled == True
assert select.disabled == True

# Ensure cleanup works
test_pane._cleanup(model)
a_param.constant = False
a_param.objects = [1, 'c', 'd']
test.a = 'd'
assert slider.value == '1'
assert slider.options == ['c', 'd', '1']
assert slider.disabled == True
assert select.value == '1'
assert select.options == [('c','c'), ('d','d'), ('1','1')]
assert select.disabled == True


def test_list_selector_param(document, comm):
Expand Down
37 changes: 19 additions & 18 deletions panel/tests/widgets/test_select.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import pytest

from panel.widgets import Select, MultiSelect, CrossSelector, ToggleGroup
from panel.util import as_unicode


def test_select_list_constructor():
Expand Down Expand Up @@ -45,18 +46,18 @@ def test_select(document, comm):

assert isinstance(widget, select._widget_type)
assert widget.title == 'Select'
assert widget.value == '1'
assert widget.options == ['A', '1']
assert widget.value == as_unicode(opts['1'])
assert widget.options == [(as_unicode(v),k) for k,v in opts.items()]

select._comm_change({'value': 'A'})
select._comm_change({'value': as_unicode(opts['A'])})
assert select.value == opts['A']

widget.value = '1'
select._comm_change({'value': '1'})
widget.value = as_unicode(opts['1'])
select.value = opts['1']
assert select.value == opts['1']

select.value = opts['A']
assert widget.value == 'A'
assert widget.value == as_unicode(opts['A'])


def test_select_change_options(document, comm):
Expand All @@ -67,7 +68,7 @@ def test_select_change_options(document, comm):

select.options = {'A': 'a'}
assert select.value == opts['A']
assert widget.value == 'A'
assert widget.value == as_unicode(opts['A'])

select.options = {}
assert select.value == None
Expand All @@ -82,12 +83,12 @@ def test_select_non_hashable_options(document, comm):

select.value = opts['A']
assert select.value is opts['A']
assert widget.value == 'A'
assert widget.value == as_unicode(opts['A'])

opts.pop('A')
select.options = opts
assert select.value is opts['1']
assert widget.value == '1'
assert widget.value == as_unicode(opts['1'])


def test_select_mutables(document, comm):
Expand All @@ -98,19 +99,19 @@ def test_select_mutables(document, comm):

assert isinstance(widget, select._widget_type)
assert widget.title == 'Select'
assert widget.value == 'B'
assert widget.options == ['A', 'B', 'C']
assert widget.value == as_unicode(opts['B'])
assert widget.options == [(as_unicode(v),k) for k,v in opts.items()]

widget.value = 'B'
select._comm_change({'value': 'A'})
widget.value = as_unicode(opts['B'])
select._comm_change({'value': as_unicode(opts['A'])})
assert select.value == opts['A']

widget.value = 'B'
select._comm_change({'value': 'B'})
widget.value = as_unicode(opts['B'])
select._comm_change({'value': as_unicode(opts['B'])})
assert select.value == opts['B']

select.value = opts['A']
assert widget.value == 'A'
assert widget.value == as_unicode(opts['A'])


def test_select_change_options_on_watch(document, comm):
Expand All @@ -125,8 +126,8 @@ def set_options(event):
model = select.get_root(document, comm=comm)

select.value = 1
assert model.value == 'D'
assert model.options == ['D', 'E']
assert model.value == as_unicode(list(select.options.values())[0])
assert model.options == [(as_unicode(v),k) for k,v in select.options.items()]


def test_multi_select(document, comm):
Expand Down
13 changes: 10 additions & 3 deletions panel/widgets/select.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,17 @@ def _process_param_change(self, msg):
if 'value' in msg:
val = msg['value']
if isIn(val, values):
msg['value'] = labels[indexOf(val, values)]
msg['value'] = self.unicode_values[indexOf(val, values)]
elif values:
self.value = self.values[0]
elif self.value is not None:
self.value = None

if 'options' in msg:
msg['options'] = labels
if isinstance(self.options, dict):
msg['options'] = [(v,l) for l,v in zip(labels, self.unicode_values)]
else:
msg['options'] = self.unicode_values
val = self.value
if values:
if not isIn(val, values):
Expand All @@ -82,6 +85,10 @@ def _process_param_change(self, msg):
self.value = None
return msg

@property
def unicode_values(self):
return [as_unicode(v) for v in self.values]

def _process_property_change(self, msg):
msg = super(Select, self)._process_property_change(msg)
if 'value' in msg:
Expand All @@ -90,7 +97,7 @@ def _process_property_change(self, msg):
elif msg['value'] is None:
msg['value'] = self.values[0]
else:
msg['value'] = self._items[msg['value']]
msg['value'] = self._items[self.labels[indexOf(msg['value'],self.unicode_values)]]
msg.pop('options', None)
return msg

Expand Down

0 comments on commit d5d7fff

Please sign in to comment.