Merge branch 'application_abstraction' into 'master'
Fix the broken mask selection widget. See merge request cara/cara!5
This commit is contained in:
commit
d984866396
4 changed files with 13 additions and 5 deletions
|
|
@ -214,8 +214,7 @@ class WidgetView:
|
|||
mask_choice = widgets.Select(options=list(models.Mask.types.keys()), value=name)
|
||||
|
||||
def on_mask_change(change):
|
||||
mask = models.Mask.types[change['new']]
|
||||
node.dcs_update_from(mask)
|
||||
node.dcs_select(change['new'])
|
||||
mask_choice.observe(on_mask_change, names=['value'])
|
||||
|
||||
return widget_group(
|
||||
|
|
@ -322,6 +321,10 @@ class ExpertApplication:
|
|||
state_builder=CARAStateBuilder(),
|
||||
)
|
||||
self.model_state.dcs_update_from(baseline_model)
|
||||
# For the time-being, we have to initialise the select states. Careful
|
||||
# as values might not correspond to what the baseline model says.
|
||||
self.model_state.infected.mask.dcs_select('No mask')
|
||||
|
||||
self.view = WidgetView(self.model_state)
|
||||
|
||||
@property
|
||||
|
|
|
|||
|
|
@ -294,6 +294,7 @@ class DataclassStatePredefined(DataclassInstanceState):
|
|||
raise ValueError(f'The choice {name} is not valid. Possible options are {", ".join(self._choices)}')
|
||||
self._selected = name
|
||||
self._instance = self._choices[name]
|
||||
self._fire_observers()
|
||||
|
||||
def dcs_instance(self):
|
||||
return self._choices[self._selected]
|
||||
|
|
@ -351,7 +352,7 @@ class DataclassStateNamed(DataclassState):
|
|||
if name not in self._states:
|
||||
raise ValueError(f'The choice {name} is not valid. Possible options are {", ".join(self._states)}')
|
||||
self._selected = name
|
||||
self._selected_state()._fire_observers()
|
||||
self._fire_observers()
|
||||
|
||||
def _selected_state(self):
|
||||
return self._states[self._selected]
|
||||
|
|
|
|||
|
|
@ -158,6 +158,11 @@ def test_DCS_predefined():
|
|||
s.dcs_update_from(opt1)
|
||||
assert s.dcs_instance() == opt2
|
||||
|
||||
observer = Mock()
|
||||
s.dcs_observe(observer)
|
||||
s.dcs_select('option 1')
|
||||
observer.assert_called_once_with()
|
||||
|
||||
|
||||
def test_DCS_named():
|
||||
opt1 = DCSimpleSubclass('a', 1, 3.14)
|
||||
|
|
@ -201,7 +206,6 @@ def test_DCS_named():
|
|||
s.dcs_select('option 1')
|
||||
opt1_observer.reset_mock()
|
||||
|
||||
# ASDA
|
||||
with s.dcs_state_transaction():
|
||||
s.dcs_select('option 2')
|
||||
s.dcs_update_from(opt2)
|
||||
|
|
|
|||
Loading…
Reference in a new issue