elon_py/pkg/dash/func/info.py
2025-03-14 15:08:29 +08:00

88 lines
3.8 KiB
Python

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]