import math import pandas as pd import warnings from datetime import datetime, timedelta def build_title_banner(text: str, menu_items): banner_html = f"""
" return banner_html def build_projection_card(server, table_name, curr_subscribers, channel_name, timezone = "Pacific Standard Time"): def get_next_milestone(subscriber_count): num_digits = len(str(subscriber_count)) if num_digits <= 4: milestone_interval = 10000 else: milestone_interval = 10 ** (num_digits - 1) next_milestone = math.ceil( subscriber_count / milestone_interval) * milestone_interval return next_milestone warnings.filterwarnings('ignore') # Ignore pandas warning regarding pyodbc def create_milestone_card(time_until_milestone, next_milestone, not_enough_data = False, declining = False): now = datetime.now() milestone_date = ( now + timedelta(seconds = time_until_milestone)).strftime('%Y-%m-%d') relative_time = now + timedelta(seconds = time_until_milestone) - now next_milestone_str = "{:,}".format(next_milestone) if relative_time.days > 1: relative_time_str = f"In {relative_time.days} days" elif relative_time.days == 1: relative_time_str = f"In {relative_time.days} day" elif relative_time.days < 0: relative_time_str = f"{-relative_time.days} days ago" elif not_enough_data: relative_time_str = "Not enough data" elif declining: relative_time_str = "Declining" else: relative_time_str = "Today" card = f"""