from __future__ import annotations import gradio as gr from tool import BrightDataDatasetTool, DATASET_CHOICES, DATASET_FIELDS tool = BrightDataDatasetTool() def toggle_fields(selected: str): inputs = ["url", "keyword", "first_name", "last_name", "days_limit", "num_of_reviews", "num_of_comments"] wanted = set(DATASET_FIELDS.get(selected, [])) def visibility(name: str): return gr.update(visible=name in wanted) return tuple(visibility(name) for name in inputs) def run(dataset: str, url: str, keyword: str, first_name: str, last_name: str, days_limit: str, num_of_reviews: str, num_of_comments: str) -> str: import sys print(f"[DEBUG app.run] Received url: {url!r} (type: {type(url).__name__})", file=sys.stderr) return tool( dataset=dataset, url=url, keyword=keyword, first_name=first_name, last_name=last_name, days_limit=days_limit, num_of_reviews=num_of_reviews, num_of_comments=num_of_comments, ) def create_demo() -> gr.Blocks: with gr.Blocks() as demo: gr.Markdown("# Bright Data dataset fetch") gr.Markdown("### [Signup here](https://brightdata.com/?utm_source=tech-partner&utm_medium=link&utm_campaign=huggingface&hs_signup=1)") dataset = gr.Dropdown(choices=DATASET_CHOICES, label="Dataset", value=DATASET_CHOICES[0]) url = gr.Textbox(label="URL", placeholder="https://...", visible=True) keyword = gr.Textbox(label="Keyword", visible=False) first_name = gr.Textbox(label="First name", visible=False) last_name = gr.Textbox(label="Last name", visible=False) days_limit = gr.Textbox(label="Days limit (e.g. 3)", visible=False) num_of_reviews = gr.Textbox(label="Number of reviews", visible=False) num_of_comments = gr.Textbox(label="Number of comments", visible=False) dataset.change( toggle_fields, inputs=[dataset], outputs=[url, keyword, first_name, last_name, days_limit, num_of_reviews, num_of_comments], ) run_btn = gr.Button("Run") output = gr.Textbox(label="Output", lines=12) run_btn.click( run, inputs=[dataset, url, keyword, first_name, last_name, days_limit, num_of_reviews, num_of_comments], outputs=output, ) return demo if __name__ == "__main__": create_demo().launch()