Backend Paging with Filtering and Multi-Column Sorting Example is not working with version 0.39.0
Open
Nobody has claimed this yet.
bug
P3
- Dominant language
- Python
- Stars
- 24.4k
- Forks
- 2.3k
- Avg merge
- 2d 7h
- Merged PRs (30d)
- 13
Description
import dash
from dash.dependencies import Input, Output
import dash_table
import pandas as pd
app = dash.Dash(__name__)
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminder2007.csv')
PAGE_SIZE = 5
app.layout = dash_table.DataTable(
id='table-sorting-filtering',
columns=[
{'name': i, 'id': i, 'deletable': True} for i in sorted(df.columns)
],
pagination_settings={
'current_page': 0,
'page_size': PAGE_SIZE
},
pagination_mode='be',
filtering='be',
filtering_settings='',
sorting='be',
sorting_type='multi',
sorting_settings=[]
)
@app.callback(
Output('table-sorting-filtering', 'data'),
[Input('table-sorting-filtering', 'pagination_settings'),
Input('table-sorting-filtering', 'sorting_settings'),
Input('table-sorting-filtering', 'filtering_settings')])
def update_graph(pagination_settings, sorting_settings, filtering_settings):
filtering_expressions = filtering_settings.split(' && ')
dff = df
for filter in filtering_expressions:
if ' eq ' in filter:
col_name = filter.split(' eq ')[0]
filter_value = filter.split(' eq ')[1]
dff = dff.loc[dff[col_name] == filter_value]
if ' > ' in filter:
col_name = filter.split(' > ')[0]
filter_value = float(filter.split(' > ')[1])
dff = dff.loc[dff[col_name] > filter_value]
if ' < ' in filter:
col_name = filter.split(' < ')[0]
filter_value = float(filter.split(' < ')[1])
dff = dff.loc[dff[col_name] < filter_value]
if len(sorting_settings):
dff = dff.sort_values(
[col['column_id'] for col in sorting_settings],
ascending=[
col['direction'] == 'asc'
for col in sorting_settings
],
inplace=False
)
return dff.iloc[
pagination_settings['current_page']*pagination_settings['page_size']:
(pagination_settings['current_page'] + 1)*pagination_settings['page_size']
].to_dict('rows')
if __name__ == '__main__':
app.run_server(debug=True)
This example is not working for new version. I have to add replace for col_name to make it work.
filtering_expressions = filtering_settings.split(' && ')
dff = df
for filter in filtering_expressions:
if ' eq ' in filter:
col_name = filter.split(' eq ')[0].replace("\"","")
print(col_name)
filter_value = filter.split(' eq ')[1]
dff = dff.loc[dff[col_name] == filter_value]
if ' > ' in filter:
col_name = filter.split(' > ')[0].replace("\"","")
filter_value = float(filter.split(' > ')[1])
dff = dff.loc[dff[col_name] > filter_value]
if ' < ' in filter:
col_name = filter.split(' < ')[0].replace("\"","")
filter_value = float(filter.split(' < ')[1])
dff = dff.loc[dff[col_name] < filter_value]
if len(sorting_settings):
dff = dff.sort_values(
[col['column_id'] for col in sorting_settings],
ascending=[
col['direction'] == 'asc'
for col in sorting_settings
],
inplace=False
)
return dff.iloc[
pagination_settings['current_page'] * pagination_settings['page_size']:
(pagination_settings['current_page'] + 1) * pagination_settings['page_size']
].to_dict('rows')
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Run the Backend Paging with Filtering and Multi-Column Sorting example against version 0.39.0 and inspect the filtering_settings values passed to update_graph. Compare them with the update_table workaround; done when filtering works without manually stripping quotes from column names.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- pandas, python
- Domain
- data-visualization
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100