def test_embed_select_str_link_two_steps(document, comm): select = Select(options=['A', 'B', 'C']) string1 = Str() select.link(string1, value='object') string2 = Str() string1.link(string2, object='object') panel = Row(select, string1, string2) with config.set(embed=True): model = panel.get_root(document, comm) embed_state(panel, model, document) _, state = document.roots assert set(state.state) == {'A', 'B', 'C'} for k, v in state.state.items(): content = json.loads(v['content']) assert 'events' in content events = content['events'] assert len(events) == 2 event = events[0] assert event['kind'] == 'ModelChanged' assert event['attr'] == 'text' assert event['model'] == model.children[1].ref assert event['new'] == '<pre>%s</pre>' % k event = events[1] assert event['kind'] == 'ModelChanged' assert event['attr'] == 'text' assert event['model'] == model.children[2].ref assert event['new'] == '<pre>%s</pre>' % k
def test_save_embed_json(tmpdir): checkbox = Checkbox() string = Str() checkbox.link(string, value='object') panel = Row(checkbox, string) filename = os.path.join(str(tmpdir), 'test.html') panel.save(filename, embed=True, embed_json=True, save_path=str(tmpdir)) assert os.path.isfile(filename) paths = glob.glob(os.path.join(str(tmpdir), '*')) paths.remove(filename) assert len(paths) == 1 json_files = sorted(glob.glob(os.path.join(paths[0], '*.json'))) assert len(json_files) == 2 for jf, v in zip(json_files, ('False', 'True')): with open(jf) as f: state = json.load(f) assert 'content' in state assert 'events' in state['content'] events = json.loads(state['content'])['events'] assert len(events) == 1 event = events[0] assert event['kind'] == 'ModelChanged' assert event['attr'] == 'text' assert event['new'] == '<pre>%s</pre>' % v
def test_embed_float_slider_explicit_values(document, comm): select = FloatSlider() string = Str() def link(target, event): target.object = event.new select.link(string, callbacks={'value': link}) panel = Row(select, string) with config.set(embed=True): model = panel.get_root(document, comm) embed_state(panel, model, document, states={select: [0.1, 0.7, 1]}) _, state = document.roots assert set(state.state) == {0, 1, 2} states = {0: 0.1, 1: 0.7, 2: 1} for (k, v) in state.state.items(): content = json.loads(v['content']) assert 'events' in content events = content['events'] assert len(events) == 1 event = events[0] assert event['kind'] == 'ModelChanged' assert event['attr'] == 'text' assert event['model'] == model.children[1].ref assert event['new'] == '<pre>%s</pre>' % states[k]
def test_ipywidget(): pane = Str('A') widget = ipywidget(pane) assert widget._view_count == 0 assert len(pane._models) == 1 init_id = list(pane._models)[0] widget._view_count = 1 assert widget._view_count == 1 assert init_id in pane._models widget._view_count = 0 assert len(pane._models) == 0 widget._view_count = 1 assert len(pane._models) == 1 prev_id = list(pane._models)[0] widget.notify_change({'new': 1, 'old': 1, 'name': '_view_count', 'type': 'change', 'model': widget}) assert prev_id in pane._models assert len(pane._models) == 1 widget._view_count = 2 assert prev_id in pane._models assert len(pane._models) == 1
def test_embed_slider_str_link(document, comm): slider = FloatSlider(start=0, end=10) string = Str() def link(target, event): target.object = event.new slider.link(string, callbacks={'value': link}) panel = Row(slider, string) with config.set(embed=True): model = panel.get_root(document, comm) embed_state(panel, model, document) _, state = document.roots assert set(state.state) == {0, 1, 2} values = [0, 5, 10] for k, v in state.state.items(): content = json.loads(v['content']) assert 'events' in content events = content['events'] assert len(events) == 1 event = events[0] assert event['kind'] == 'ModelChanged' assert event['attr'] == 'text' assert event['model'] == model.children[1].ref assert event['new'] == '<pre>%.1f</pre>' % values[k]
def test_save_embed(tmpdir): checkbox = Checkbox() string = Str() checkbox.link(string, value='object') panel = Row(checkbox, string) filename = os.path.join(str(tmpdir), 'test.html') panel.save(filename, embed=True) assert os.path.isfile(filename)
def test_save_embed_bytesio(): checkbox = Checkbox() string = Str() checkbox.link(string, value='object') panel = Row(checkbox, string) stringio = StringIO() panel.save(stringio, embed=True) stringio.seek(0) utf = stringio.read() assert "<pre>False<" in utf assert "<pre>True<" in utf
def test_string_pane(document, comm): pane = Str("<h1>Test</h1>") # Create pane row = pane._get_root(document, comm=comm) assert isinstance(row, BkRow) assert len(row.children) == 1 model = row.children[0] assert row.ref['id'] in pane._callbacks assert pane._models[row.ref['id']] is model div = get_div(model) assert div.text == "<pre><h1>Test</h1></pre>" # Replace Pane.object pane.object = "<h2>Test</h2>" model = row.children[0] assert div is get_div(model) assert row.ref['id'] in pane._callbacks assert pane._models[row.ref['id']] is model assert div.text == "<pre><h2>Test</h2></pre>" # Cleanup pane._cleanup(row) assert pane._callbacks == {} assert pane._models == {}
def test_embed_select_str_explicit_values_not_found(document, comm): select = Select(options=['A', 'B', 'C']) string = Str() def link(target, event): target.object = event.new select.link(string, callbacks={'value': link}) panel = Row(select, string) with config.set(embed=True): model = panel.get_root(document, comm) with pytest.raises(ValueError): embed_state(panel, model, document, states={select: ['A', 'D']})
def test_embed_float_slider_explicit_values_out_of_bounds(document, comm): select = FloatSlider() string = Str() def link(target, event): target.object = event.new select.link(string, callbacks={'value': link}) panel = Row(select, string) with config.set(embed=True): model = panel.get_root(document, comm) with pytest.raises(ValueError): embed_state(panel, model, document, states={select: [0.1, 0.7, 2]})
def test_save_embed_bytesio(): checkbox = Checkbox() string = Str() def link(target, event): target.object = event.new checkbox.link(string, callbacks={'value': link}) panel = Row(checkbox, string) stringio = StringIO() panel.save(stringio, embed=True) stringio.seek(0) utf = stringio.read() assert "&lt;pre&gt;False&lt;/pre&gt;" in utf assert "&lt;pre&gt;True&lt;/pre&gt;" in utf
def test_embed_discrete(document, comm): select = Select(options=['A', 'B', 'C']) string = Str() select.link(string, value='object') panel = Row(select, string) with config.set(embed=True): model = panel.get_root(document, comm) embed_state(panel, model, document) _, state = document.roots assert set(state.state) == {'A', 'B', 'C'} for k, v in state.state.items(): content = json.loads(v['content']) assert 'events' in content events = content['events'] assert len(events) == 1 event = events[0] assert event['kind'] == 'ModelChanged' assert event['attr'] == 'text' assert event['model'] == model.children[1].ref assert event['new'] == '<pre>%s</pre>' % k
def test_embed_checkbox(document, comm): checkbox = Checkbox() string = Str() checkbox.link(string, value='object') panel = Row(checkbox, string) with config.set(embed=True): model = panel.get_root(document, comm) embed_state(panel, model, document) _, state = document.roots assert set(state.state) == {'false', 'true'} for k, v in state.state.items(): content = json.loads(v['content']) assert 'events' in content events = content['events'] assert len(events) == 1 event = events[0] assert event['kind'] == 'ModelChanged' assert event['attr'] == 'text' assert event['model'] == model.children[1].ref assert event['new'] == '<pre>%s</pre>' % k.title()
def test_embed_continuous(document, comm): select = FloatSlider(start=0, end=10) string = Str() select.link(string, value='object') panel = Row(select, string) with config.set(embed=True): model = panel.get_root(document, comm) embed_state(panel, model, document) _, state = document.roots assert set(state.state) == {0, 1, 2} values = [0, 5, 10] for k, v in state.state.items(): content = json.loads(v['content']) assert 'events' in content events = content['events'] assert len(events) == 1 event = events[0] assert event['kind'] == 'ModelChanged' assert event['attr'] == 'text' assert event['model'] == model.children[1].ref assert event['new'] == '<pre>%.1f</pre>' % values[k]
def test_string_pane(document, comm): pane = Str("<h1>Test</h1>") # Create pane model = pane.get_root(document, comm=comm) assert pane._models[model.ref['id']][0] is model assert model.text == "<pre><h1>Test</h1></pre>" # Replace Pane.object pane.object = "<h2>Test</h2>" assert pane._models[model.ref['id']][0] is model assert model.text == "<pre><h2>Test</h2></pre>" # Cleanup pane._cleanup(model) assert pane._models == {}
def test_embed_slider_str_jslink(document, comm): slider = FloatSlider(start=0, end=10) string = Str() slider.link(string, value='object') panel = Row(slider, string) with config.set(embed=True): model = panel.get_root(document, comm) embed_state(panel, model, document) assert len(document.roots) == 1 assert model is document.roots[0] ref = model.ref['id'] cbs = list(model.select({'type': CustomJS})) assert len(cbs) == 2 cb1, cb2 = cbs cb1, cb2 = (cb1, cb2) if slider._models[ref][0] is cb1.args['source'] else (cb2, cb1) assert cb1.code == """ var value = source['value']; value = value; value = JSON.stringify(value).replace(/,/g, ", ").replace(/:/g, ": "); try { var property = target.properties['text']; if (property !== undefined) { property.validate(value); } } catch(err) { console.log('WARNING: Could not set text on target, raised error: ' + err); return; } try { target['text'] = value; } catch(err) { console.log(err) } """ assert cb2.code == """
def test_embed_select_str_link(document, comm): select = Select(options=['A', 'B', 'C']) string = Str() def link(target, event): target.object = event.new select.link(string, callbacks={'value': link}) panel = Row(select, string) with config.set(embed=True): model = panel.get_root(document, comm) embed_state(panel, model, document) _, state = document.roots assert set(state.state) == {'A', 'B', 'C'} for k, v in state.state.items(): content = json.loads(v['content']) assert 'events' in content events = content['events'] assert len(events) == 1 event = events[0] assert event['kind'] == 'ModelChanged' assert event['attr'] == 'text' assert event['model'] == model.children[1].ref assert event['new'] == '<pre>%s</pre>' % k
def test_viewable_ipywidget(): pane = Str('A') with config.set(comms='ipywidgets'): data, metadata = pane._repr_mimebundle_() assert 'application/vnd.jupyter.widget-view+json' in data