from pkg.dash.func.info_func import * from pkg.tool import format_time_str, get_time_since_last_tweet from pkg.dash.app_init import app from dash.dependencies import Input, Output from dash import html @app.callback( [Output('info-tooltip', 'children')], [Input('clock-interval', 'n_intervals'), Input('target-input', 'value'), Input('predict-tweets-input', 'value'), Input('hour-input', 'value')] ) def update_info(n, target_value, increment_value, hour_value): pace = calculate_tweet_pace() decline_rates = calculate_pace_decline_rate() pace_increases = calculate_pace_increase_in_hour(increment_value, hour_value) tweet_count, days_to_next_friday = get_pace_params() remain_hours = days_to_next_friday * 24 now = tweet_count table_style_border = {'textAlign': 'center', 'border': '1px solid white'} table_style_c = {'textAlign': 'center'} table_style_l = {'textAlign': 'left'} target = int(target_value) if target_value is not None else None avg_tweets_per_day = calculate_avg_tweets_per_day(target, now, remain_hours) if target is not None else "TBD" days_passed = 7 - days_to_next_friday avg_tweets = round(tweet_count / days_passed, 2) if days_passed > 0 else 0 custom_increment = pace_increases.get('custom_increment') if custom_increment is None: custom_header = "[TBD]" custom_value = "TBD" else: increment = pace_increases['custom_increment_key'] hours = int(hour_value) custom_header = f"{increment}({hours}h)" custom_value = f"{custom_increment:.2f}" pace_table_rows = [ html.Tr([ html.Th('Pace', style=table_style_border), html.Th('DCL', style=table_style_border), html.Th('0(1h)', style=table_style_border), html.Th('1(1h)', style=table_style_border), html.Th('5(1h)', style=table_style_border), html.Th('10(1h)', style=table_style_border), html.Th('20(1h)', style=table_style_border), html.Th(custom_header, style=table_style_border) ]), html.Tr([ html.Td(f"{pace:.2f}", style=table_style_border), html.Td(decline_rates, style=table_style_border), html.Td(f"{pace_increases['increase_0']:.2f}", style=table_style_border), html.Td(f"{pace_increases['increase_1']:.2f}", style=table_style_border), html.Td(f"{pace_increases['increase_5']:.2f}", style=table_style_border), html.Td(f"{pace_increases['increase_10']:.2f}", style=table_style_border), html.Td(f"{pace_increases['increase_20']:.2f}", style=table_style_border), html.Td(custom_value, style=table_style_border) ]), html.Tr([ html.Td(f"Remain", colSpan=4, style=table_style_c), html.Td(format_time_str(days_to_next_friday), colSpan=4, style=table_style_l) ]), html.Tr([ html.Td(f"Last Tweet", colSpan=4, style=table_style_c), html.Td(format_time_str(get_time_since_last_tweet()), colSpan=4, style=table_style_l) ]), html.Tr([ html.Th("Target", colSpan=2, style=table_style_border), html.Th("Need's Avg Tweets Per Day", colSpan=4, style=table_style_border), html.Th("Avg Tweets", colSpan=2, style=table_style_border), ]), html.Tr([ html.Td(f"{target if target else '[TBD]'}", colSpan=2, style=table_style_border), html.Td(f"{avg_tweets_per_day}", colSpan=4, style=table_style_border), html.Td(f"{avg_tweets}", colSpan=2, style=table_style_border), ]) ] pace_table = html.Table(pace_table_rows, style={ 'width': '100%', 'textAlign': 'left', 'borderCollapse': 'collapse' }) return [pace_table]