def test_directory_with_server_lifecycle(self): doc = Document() result = {} def load(filename): handler = bahd.DirectoryHandler(filename=filename) result['handler'] = handler handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) with_directory_contents( { 'main.py': script_adds_two_roots( 'SomeModelInTestDirectoryWithLifecycle', 'AnotherModelInTestDirectoryWithLifecycle'), 'server_lifecycle.py': script_has_lifecycle_handlers }, load) assert len(doc.roots) == 2 handler = result['handler'] assert "on_server_loaded" == handler.on_server_loaded(None) assert "on_server_unloaded" == handler.on_server_unloaded(None) assert "on_session_created" == handler.on_session_created(None) assert "on_session_destroyed" == handler.on_session_destroyed(None)
def test_basic_script_with_output_after(capsys): def run(dirname): with WorkingDir(dirname): main(["bokeh", "html", "scatter.py", "--output", "foo.html"]) out, err = capsys.readouterr() assert err == "" assert out == "" assert set(["foo.html", "scatter.py"]) == set(os.listdir(dirname)) with_directory_contents({'scatter.py': basic_scatter_script}, run)
def test_basic_script(capsys): def run(dirname): with WorkingDir(dirname): main(["bokeh", "svg", "scatter.py"]) out, err = capsys.readouterr() assert err == "" assert out == "" assert set(["scatter.svg", "scatter.py"]) == set(os.listdir(dirname)) with_directory_contents({'scatter.py': basic_svg_scatter_script}, run)
def test_directory_empty_mainpy(): doc = Document() def load(filename): handler = DirectoryHandler(filename=filename) handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) with_directory_contents({'main.py': "# This script does nothing"}, load) assert not doc.roots
def test_basic_script(capsys): def run(dirname): with WorkingDir(dirname): main(["bokeh", "svg", "scatter.py"]) out, err = capsys.readouterr() assert err == "" assert out == "" assert set(["scatter.svg", "scatter.py"]) == set(os.listdir(dirname)) with_directory_contents({ 'scatter.py' : basic_svg_scatter_script }, run)
def test_basic_script_with_output_after(capsys): def run(dirname): with WorkingDir(dirname): main(["bokeh", "html", "scatter.py", "--output", "foo.html"]) out, err = capsys.readouterr() assert err == "" assert out == "" assert set(["foo.html", "scatter.py"]) == set(os.listdir(dirname)) with_directory_contents({ 'scatter.py' : basic_scatter_script }, run)
def test_directory_empty_mainpy(self): doc = Document() def load(filename): handler = DirectoryHandler(filename=filename) handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) with_directory_contents({ 'main.py' : "# This script does nothing" }, load) assert not doc.roots
def test_directory_mainpy_adds_roots(self): doc = Document() def load(filename): handler = bahd.DirectoryHandler(filename=filename) handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) with_directory_contents({ 'main.py' : script_adds_two_roots('SomeModelInTestDirectory', 'AnotherModelInTestDirectory') }, load) assert len(doc.roots) == 2
def test_basic_script_with_multiple_png_plots(capsys): def run(dirname): with WorkingDir(dirname): main(["bokeh", "png", "scatter1.py", "scatter2.py", "scatter3.py"]) out, err = capsys.readouterr() assert err == "" assert out == "" assert set(["scatter1.png", "scatter2.png", "scatter3.png", "scatter1.py", "scatter2.py", "scatter3.py"]) == set(os.listdir(dirname)) with_directory_contents({ 'scatter1.py' : basic_scatter_script, 'scatter2.py' : basic_scatter_script, 'scatter3.py' : basic_scatter_script, }, run)
def test_directory_mainpy_adds_roots(self): doc = Document() def load(filename): handler = DirectoryHandler(filename=filename) handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) with_directory_contents({ 'main.py' : script_adds_two_roots('SomeModelInTestDirectory', 'AnotherModelInTestDirectory') }, load) assert len(doc.roots) == 2
def test_safe_to_fork(self): doc = Document() result = {} def load(filename): handler = bahd.DirectoryHandler(filename=filename) assert handler.safe_to_fork result['handler'] = handler handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) assert not handler.safe_to_fork with_directory_contents({ 'main.py' : "# This script does nothing", }, load)
def test_directory_without_template(self): doc = Document() result = {} def load(filename): handler = DirectoryHandler(filename=filename) result['handler'] = handler handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) with_directory_contents({ 'main.py' : "# This script does nothing", }, load) assert not doc.roots assert doc.template is FILE
def test_directory_without_template(self): doc = Document() result = {} def load(filename): handler = bahd.DirectoryHandler(filename=filename) result['handler'] = handler handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) with_directory_contents({ 'main.py' : "# This script does nothing", }, load) assert not doc.roots assert doc.template is FILE
def test_directory_has_theme_file(self): doc = Document() def load(filename): handler = bahd.DirectoryHandler(filename=filename) handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) custom_theme = """ attrs: AnotherModelInTestDirectoryTheme: bar: 42 SomeModelInTestDirectoryTheme: foo: 14 """ with_directory_contents( { 'main.py': script_adds_two_roots('SomeModelInTestDirectoryTheme', 'AnotherModelInTestDirectoryTheme') + """ # we're testing that the script can override the theme some = next(m for m in curdoc().roots if isinstance(m, SomeModelInTestDirectoryTheme)) some.foo = 57 """, 'theme.yaml': custom_theme }, load) assert len(doc.roots) == 2 some_model = next( m for m in doc.roots if m.__class__.__name__ == 'SomeModelInTestDirectoryTheme') another_model = next( m for m in doc.roots if m.__class__.__name__ == 'AnotherModelInTestDirectoryTheme') assert another_model.bar == 42 assert some_model.foo == 57 # test that we use the theme if we delete our explicit-set value del some_model.foo assert some_model.foo == 14 # test that removing the theme gets us back to the base doc.theme = None assert some_model.foo == 2 assert another_model.bar == 1
def test_directory_with_template(self): doc = Document() result = {} def load(filename): handler = DirectoryHandler(filename=filename) result['handler'] = handler handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) with_directory_contents({ 'main.py' : "# This script does nothing", 'templates/index.html' : "<div>some HTML</div>" }, load) assert not doc.roots assert isinstance(doc.template, jinja2.Template)
def test_directory_without_static(self): doc = Document() result = {} def load(filename): handler = bahd.DirectoryHandler(filename=filename) result['handler'] = handler handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) with_directory_contents({ 'main.py' : "# This script does nothing", }, load) assert not doc.roots handler = result['handler'] assert handler.static_path() is None
def test_directory_with_template(self): doc = Document() result = {} def load(filename): handler = bahd.DirectoryHandler(filename=filename) result['handler'] = handler handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) with_directory_contents({ 'main.py' : "# This script does nothing", 'templates/index.html' : "<div>some HTML</div>" }, load) assert not doc.roots assert isinstance(doc.template, jinja2.Template)
def test_basic_script_with_multiple_png_plots(capsys): def run(dirname): with WorkingDir(dirname): main(["bokeh", "png", "scatter1.py", "scatter2.py", "scatter3.py"]) out, err = capsys.readouterr() assert err == "" assert out == "" assert set([ "scatter1.png", "scatter2.png", "scatter3.png", "scatter1.py", "scatter2.py", "scatter3.py" ]) == set(os.listdir(dirname)) with_directory_contents( { 'scatter1.py': basic_scatter_script, 'scatter2.py': basic_scatter_script, 'scatter3.py': basic_scatter_script, }, run)
def test_directory_without_static(self): doc = Document() result = {} def load(filename): handler = DirectoryHandler(filename=filename) result['handler'] = handler handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) with_directory_contents({ 'main.py': "# This script does nothing", }, load) assert not doc.roots handler = result['handler'] assert handler.static_path() is None
def test_url_path(self): doc = Document() result = {} def load(filename): handler = bahd.DirectoryHandler(filename=filename) assert handler.safe_to_fork result['handler'] = handler handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) assert not handler.safe_to_fork with_directory_contents({ 'main.py' : "# This script does nothing", }, load) h = result['handler'] assert h.url_path().startswith("/") h._main_handler._runner._failed = True assert h.url_path() is None
def test_directory_with_static(self): doc = Document() result = {} def load(filename): handler = bahd.DirectoryHandler(filename=filename) result['handler'] = handler handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) with_directory_contents({ 'main.py' : "# This script does nothing", 'static/js/foo.js' : "# some JS" }, load) assert not doc.roots handler = result['handler'] assert handler.static_path() is not None assert handler.static_path().endswith("static")
def test_directory_with_static(self): doc = Document() result = {} def load(filename): handler = DirectoryHandler(filename=filename) result['handler'] = handler handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) with_directory_contents({ 'main.py' : "# This script does nothing", 'static/js/foo.js' : "# some JS" }, load) assert not doc.roots handler = result['handler'] assert handler.static_path() is not None assert handler.static_path().endswith("static")
def test_directory_has_theme_file(self): doc = Document() def load(filename): handler = DirectoryHandler(filename=filename) handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) custom_theme = """ attrs: AnotherModelInTestDirectoryTheme: bar: 42 SomeModelInTestDirectoryTheme: foo: 14 """ with_directory_contents({ 'main.py' : script_adds_two_roots('SomeModelInTestDirectoryTheme', 'AnotherModelInTestDirectoryTheme') + """ # we're testing that the script can override the theme some = next(m for m in curdoc().roots if isinstance(m, SomeModelInTestDirectoryTheme)) some.foo = 57 """, 'theme.yaml' : custom_theme }, load) self.assertEqual(2, len(doc.roots)) some_model = next(m for m in doc.roots if m.__class__.__name__ == 'SomeModelInTestDirectoryTheme') another_model = next(m for m in doc.roots if m.__class__.__name__ == 'AnotherModelInTestDirectoryTheme') self.assertEqual(42, another_model.bar) self.assertEqual(57, some_model.foo) # test that we use the theme if we delete our explicit-set value del some_model.foo self.assertEqual(14, some_model.foo) # test that removing the theme gets us back to the base doc.theme = None self.assertEqual(2, some_model.foo) self.assertEqual(1, another_model.bar)
def test_directory_with_server_lifecycle(self): doc = Document() result = {} def load(filename): handler = DirectoryHandler(filename=filename) result['handler'] = handler handler.modify_document(doc) if handler.failed: raise RuntimeError(handler.error) with_directory_contents({ 'main.py' : script_adds_two_roots('SomeModelInTestDirectoryWithLifecycle', 'AnotherModelInTestDirectoryWithLifecycle'), 'server_lifecycle.py' : script_has_lifecycle_handlers }, load) assert len(doc.roots) == 2 handler = result['handler'] assert "on_server_loaded" == handler.on_server_loaded(None) assert "on_server_unloaded" == handler.on_server_unloaded(None) assert "on_session_created" == handler.on_session_created(None) assert "on_session_destroyed" == handler.on_session_destroyed(None)