Skip to content

Instantly share code, notes, and snippets.

@nicain
Last active June 14, 2017 18:40
Show Gist options
  • Save nicain/c8c926285c7bd69b70347a95064ca645 to your computer and use it in GitHub Desktop.
Save nicain/c8c926285c7bd69b70347a95064ca645 to your computer and use it in GitHub Desktop.
bokeh JS download columndatasource
from bokeh.io import curdoc
from bokeh.models.widgets import Button, DataTable, TableColumn
from bokeh.layouts import column, widgetbox
from bokeh.models import ColumnDataSource, CustomJS
import pandas as pd
data_df = pd.DataFrame(dict(A=[0,1,2], B=[3,4,5]))
table_source = ColumnDataSource(data=data_df)
data_table = DataTable(source=table_source, width=200, height=200)
column_list = [TableColumn(field=key, title=key) for key in ['A', 'B']]
data_table.columns = column_list
button = Button(label = 'Dowload')
dowload_source = ColumnDataSource(data=dict())
jscb = CustomJS(args=dict(source=dowload_source), code='''
var txt = source.data['data'][0];
if ((txt != "_begin") && (txt != "_end")) {
var filename = 'data.csv';
var blob = new Blob([txt], { type: 'text/csv;charset=utf-8;' });
//addresses IE
if (navigator.msSaveBlob) {
navigator.msSaveBlob(blob, filename);
}
else {
var link = document.createElement("a");
link = document.createElement('a')
link.href = URL.createObjectURL(blob);
link.download = filename
link.target = "_blank";
link.style.visibility = 'hidden';
link.dispatchEvent(new MouseEvent('click'))
}
}
''')
dowload_source.js_on_change('data', jscb)
def send_data():
dowload_source.data = {'data': ['_begin']}
dowload_source.data = {'data': [data_df.to_csv()]}
dowload_source.data = {'data': ['_end']}
button.on_click(send_data)
curdoc().add_root(column(data_table, widgetbox(button)))
curdoc().add_root(dowload_source)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment