示例#1
0
        def link(change, watchers=[watcher]):
            updates = {}
            if change.what == 'constant':
                updates['disabled'] = change.new
            elif change.what == 'precedence':
                if (change.new < self.display_threshold
                        and widget in self._widget_box.objects):
                    self._widget_box.pop(widget)
                elif change.new >= self.display_threshold:
                    precedence = lambda k: self.object.param[
                        'name' if k == '_title' else k].precedence
                    params = self._ordered_params
                    if self.show_name:
                        params.insert(0, '_title')
                    widgets = []
                    for k in params:
                        if precedence(k) is None or precedence(
                                k) >= self.display_threshold:
                            widgets.append(self._widgets[k])
                    self._widget_box.objects = widgets
                return
            elif change.what == 'objects':
                updates['options'] = p_obj.get_range()
            elif change.what == 'bounds':
                start, end = p_obj.get_soft_bounds()
                updates['start'] = start
                updates['end'] = end
            elif change.what == 'step':
                updates['step'] = p_obj.step
            elif change.what == 'label':
                updates['name'] = p_obj.label
            elif p_name in self._updating:
                return
            elif hasattr(param, 'Event') and isinstance(p_obj, param.Event):
                return
            elif isinstance(p_obj, param.Action):
                prev_watcher = watchers[0]
                widget.param.unwatch(prev_watcher)

                def action(event):
                    change.new(self.object)

                watchers[0] = widget.param.watch(action, 'clicks')
                idx = self._callbacks.index(prev_watcher)
                self._callbacks[idx] = watchers[0]
                return
            else:
                updates['value'] = change.new

            try:
                self._updating.append(p_name)
                if change.type == 'triggered':
                    with discard_events(widget):
                        widget.param.set_param(**updates)
                    widget.param.trigger(*updates)
                else:
                    widget.param.set_param(**updates)
            finally:
                self._updating.remove(p_name)
示例#2
0
        def link(change, watchers=[watcher]):
            updates = {}
            widget = self._widgets[p_name]
            if change.what == 'constant':
                updates['disabled'] = change.new
            elif change.what == 'precedence':
                if (change.new < self.display_threshold and
                    widget in self._widget_box.objects):
                    self._widget_box.pop(widget)
                elif change.new >= self.display_threshold:
                    self._rerender()
                return
            elif change.what == 'objects':
                updates['options'] = p_obj.get_range()
            elif change.what == 'bounds':
                start, end = p_obj.get_soft_bounds()
                supports_bounds = hasattr(widget, 'start')
                if start is None or end is None:
                    rerender = supports_bounds
                else:
                    rerender = not supports_bounds
                if supports_bounds:
                    updates['start'] = start
                    updates['end'] = end
                if rerender:
                    self._rerender_widget(p_name)
                    return
            elif change.what == 'step':
                updates['step'] = p_obj.step
            elif change.what == 'label':
                updates['name'] = p_obj.label
            elif p_name in self._updating:
                return
            elif hasattr(param, 'Event') and isinstance(p_obj, param.Event):
                return
            elif isinstance(p_obj, param.Action):
                prev_watcher = watchers[0]
                widget.param.unwatch(prev_watcher)
                def action(event):
                    change.new(self.object)
                watchers[0] = widget.param.watch(action, 'clicks')
                idx = self._callbacks.index(prev_watcher)
                self._callbacks[idx] = watchers[0]
                return
            elif kw_widget.get('throttled', False) and hasattr(widget, 'value_throttled'):
                updates['value_throttled'] = change.new
            else:
                updates['value'] = change.new

            try:
                self._updating.append(p_name)
                if change.type == 'triggered':
                    with discard_events(widget):
                        widget.param.set_param(**updates)
                    widget.param.trigger(*updates)
                else:
                    widget.param.set_param(**updates)
            finally:
                self._updating.remove(p_name)
示例#3
0
    def test_discard_events_decorator(self):
        def accumulator(change):
            self.accumulator += change.new

        obj = SimpleWatchExample()
        obj.param.watch(accumulator, 'a')
        with discard_events(obj):
            obj.a = 1
        self.assertEqual(self.accumulator, 0)
        obj.a = 2
        self.assertEqual(self.accumulator, 3)