def create_catalog_html(datasets, username=None): """Creates HTML string for the dataset catalog with improved card design.""" if not datasets: return """
📦
No datasets available
Check back soon for new data products.
""" cards_html = "" for i, dataset in enumerate(datasets): dataset_id = dataset.get('dataset_id', '') display_name = dataset.get('display_name', dataset_id) description = dataset.get('description', 'No description available.') # Determine pricing display plans = dataset.get("plans", []) is_free = False price = "10" trial_days = 1 if plans: plan = plans[0] price_id = plan.get("stripe_price_id", "") if price_id in ["free", "0", 0]: is_free = True trial_days = plan.get("access_duration_days", 1) else: price = plan.get("price", "10") # Price badge if is_free: trial_text = "24h" if trial_days == 1 else f"{trial_days}-day" price_badge = f'{trial_text} Free Trial' else: price_badge = f'' # Action area - only show hint when not logged in if not username: action_html = '''
Sign in to subscribe
''' else: action_html = '' cards_html += f"""
📊

{display_name}

{dataset_id}

{description}

""" # Wrap in container with improved styles html = f"""
{cards_html}
""" return html def get_dataset_choices(datasets, username=None): """Returns list of (label, dataset_id) tuples for dropdown.""" if not datasets or not username: return [] choices = [] for dataset in datasets: plans = dataset.get("plans", []) if plans: plan = plans[0] price_id = plan.get("stripe_price_id", "") if price_id in ["free", "0", 0]: trial_days = plan.get("access_duration_days", 1) trial_text = "24h" if trial_days == 1 else f"{trial_days}-day" label = f"{dataset.get('display_name', dataset.get('dataset_id'))} ({trial_text} Trial)" else: price = plan.get("price", "10") label = f"{dataset.get('display_name', dataset.get('dataset_id'))} (${price}/mo)" choices.append((label, dataset.get('dataset_id'))) return choices