Esempio n. 1
0
def update_column_selector(schema_name, provider):
    if provider and schema_name:
        schema = get_schema_by_name(name=schema_name)
        cols = get_schema_columns(schema=schema)

        return dcc.Dropdown(
            id='schema-column-selector',
            options=[
                {'label': col, 'value': col} for col in cols
            ],
            value=get_schema_by_name(name=schema_name).important_cols(),
            multi=True
        )
    raise dash.exceptions.PreventUpdate()
Esempio n. 2
0
def properties_to_readers(properties, codes, start_date,
                          end_date) -> List[DataReader]:
    provider_schema_map_cols = {}

    for prop in properties:
        provider = prop['provider']
        schema_name = prop['schema']
        key = (provider, schema_name)
        if key not in provider_schema_map_cols:
            provider_schema_map_cols[key] = []

        provider_schema_map_cols[key].append(prop['column'])

    readers = []
    for item, columns in provider_schema_map_cols.items():
        provider = item[0]
        schema_name = item[1]

        schema = get_schema_by_name(schema_name)

        readers.append(
            DataReader(data_schema=schema,
                       provider=provider,
                       codes=codes,
                       columns=columns,
                       start_timestamp=start_date,
                       end_timestamp=end_date,
                       time_field=schema.time_field()))

    return readers
Esempio n. 3
0
def update_data_table(n_clicks, provider, schema_name, columns, codes: str, start_date, end_date):
    if n_clicks and provider and columns and schema_name:
        # TODO:better way to get time_field
        if has_report_period(schema_name=schema_name):
            time_field = 'report_date'
        else:
            time_field = 'timestamp'

        data_reader = DataReader(data_schema=get_schema_by_name(schema_name), provider=provider, codes=codes,
                                 columns=columns, start_timestamp=start_date, end_timestamp=end_date,
                                 time_field=time_field)
        if data_reader.is_empty():
            return 'no data,please reselect!', '', [{'label': 'compare_self', 'value': 'compare_self'}], 'compare_self'

        data_table = data_reader.data_drawer().draw_data_table(id='data_table_content')

        intents = data_reader.normal_data.get_intents()

        intent_options = [
            {'label': intent.value, 'value': intent.value} for intent in intents
        ]

        intent_value = intents[0].value

        return data_table, data_reader.normal_data.get_table_type(), intent_options, intent_value

    raise dash.exceptions.PreventUpdate()
Esempio n. 4
0
def update_table_and_graph(page_current, page_size, filter, chart, provider, schema_name, columns, codes, start_date,
                           end_date):
    if provider and columns and schema_name and chart:

        if has_report_period(schema_name=schema_name):
            time_field = 'report_date'
        else:
            time_field = 'timestamp'

        schema = get_schema_by_name(schema_name)
        # <class 'list'>: ['{report_period} = year']
        filters = None

        if filter:
            filters = []
            print(filter)
            filtering_expressions = filter.split(' && ')

            for filter_part in filtering_expressions:
                col_name, operator, filter_value = split_filter_part(filter_part)
                s = f'schema.{col_name} {operator} "{filter_value}"'
                filter = eval(s)
                filters.append(filter)

        data_reader = DataReader(data_schema=schema, provider=provider, codes=codes,
                                 columns=columns, start_timestamp=start_date, end_timestamp=end_date,
                                 time_field=time_field, filters=filters)

        dff = data_reader.data_df.reset_index()

        graph_data, graph_layout = data_reader.data_drawer().draw(chart=chart, render=None)

        return dff.to_dict('records'), dcc.Graph(
            id='chart-content',
            figure={
                'data': graph_data,
                'layout': graph_layout
            }
        )

    raise dash.exceptions.PreventUpdate()