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'${price}/mo'
# Action area - only show hint when not logged in
if not username:
action_html = '''
Sign in to subscribe
'''
else:
action_html = ''
cards_html += f"""
"""
# 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