Source code for covid19_data_analyzer.dashboard.components.data_selection

from dash.dependencies import Input, Output
import dash_core_components as dcc
import dash_html_components as html


from covid19_data_analyzer.dashboard.app import app
from covid19_data_analyzer.dashboard.utils.controls import (
    generate_dropdown_options,
    generate_selector,
    get_available_subsets,
)

from covid19_data_analyzer.dashboard.utils.data_loader import DASHBOARD_DATA
from covid19_data_analyzer.data_functions.scrapers import ALLOWED_SOURCES

from covid19_data_analyzer.data_functions.analysis import IMPLEMENTED_FIT_MODELS


SOURCE_SELECTION = html.Label(
    [
        "Data source",
        dcc.Dropdown(
            id="source_select",
            placeholder="Select a data source",
            options=generate_dropdown_options(ALLOWED_SOURCES),
            multi=False,
            clearable=False,
        ),
    ]
)
PARENT_REGION_SELECTION = html.Label(
    [
        "Parent region",
        dcc.Dropdown(
            id="parent_regions",
            placeholder="Select a parent region of the data",
            options=[],
            value=None,
            multi=True,
            clearable=False,
            disabled=True,
        ),
    ]
)
REGION_SELECTION = html.Label(
    [
        "Regions",
        dcc.Dropdown(
            id="regions",
            placeholder="Select a region of the data",
            options=[],
            value=None,
            multi=True,
            disabled=True,
        ),
    ]
)
SUBSET_SELECTION = html.Label(
    [
        "Data Subsets",
        dcc.Dropdown(
            id="subsets",
            placeholder="Select data subset",
            options=[],
            value=None,
            multi=True,
            disabled=True,
        ),
    ]
)
FITMODEL_SELECTION = html.Label(
    [
        "Fitmodel",
        dcc.Dropdown(
            id="fit_model",
            placeholder="Select fit model",
            options=generate_dropdown_options(IMPLEMENTED_FIT_MODELS),
            value=None,
            multi=False,
            disabled=True,
            clearable=True,
        ),
    ]
)

DATA_SELECTION = html.Div(
    [
        SOURCE_SELECTION,
        PARENT_REGION_SELECTION,
        REGION_SELECTION,
        SUBSET_SELECTION,
        FITMODEL_SELECTION,
    ],
    className="data_selection",
)


[docs]@app.callback( [ Output("parent_regions", "options"), Output("parent_regions", "disabled"), Output("dl_format", "disabled"), Output("subsets", "disabled"), ], [Input("source_select", "value")], ) def update_parent_regions(data_source): if data_source: covid19_data = DASHBOARD_DATA[data_source] parent_regions = covid19_data.parent_region.sort_values().unique() return (generate_dropdown_options(parent_regions), *[False] * 3) else: return ([], *[True] * 3)
[docs]@app.callback( [ Output("regions", "options"), Output("regions", "disabled"), Output("fit_model", "disabled"), ], [Input("source_select", "value"), Input("parent_regions", "value")], ) def update_regions(data_source, values): if data_source and values: covid19_data = DASHBOARD_DATA[data_source] selector = generate_selector(covid19_data.parent_region, values) regions = covid19_data[selector].region.sort_values().unique() return (generate_dropdown_options(regions), *[False] * 2) else: return ([], *[True] * 2)
[docs]@app.callback( [Output("subsets", "options"), Output("subsets", "value")], [Input("source_select", "value")], ) def update_subsets(data_source): if data_source: covid19_data = DASHBOARD_DATA[data_source] subsets = get_available_subsets(covid19_data) return generate_dropdown_options(subsets), subsets else: return ([],) * 2