| | import gradio as gr |
| | import json |
| | from Database.mongodb import DatabaseManager |
| | import traceback |
| |
|
| | def create_gradio_interface(): |
| |
|
| | db_manager = DatabaseManager() |
| |
|
| | def safe_execute(func, *args, **kwargs): |
| | """ |
| | Wrapper to handle exceptions gracefully |
| | """ |
| | try: |
| | return func(*args, **kwargs) |
| | except Exception as e: |
| | return f"Error occurred: {str(e)}\n\nTraceback:\n{traceback.format_exc()}" |
| | |
| |
|
| | def get_brand_records(filter_brand='', sort_by='timestamp', ascending=False): |
| | filter_criteria = {} |
| | if filter_brand: |
| | filter_criteria['brand'] = {'$regex': filter_brand, '$options': 'i'} |
| | |
| | return safe_execute(db_manager.get_brand_records, filter_criteria, sort_by, ascending) |
| | |
| | def get_freshness_records(filter_freshness='', sort_by='timestamp', ascending=False): |
| | filter_criteria = {} |
| | if filter_freshness: |
| | filter_criteria['Eatable'] = {'$regex': filter_freshness, '$options': 'i'} |
| | |
| | return safe_execute(db_manager.get_freshness_records, filter_criteria, sort_by, ascending) |
| | |
| |
|
| | |
| | def analyze_brand_trends(time_period): |
| | return safe_execute(db_manager.analyze_brand_trends, int(time_period)) |
| |
|
| | |
| | def perform_advanced_search(collection, search_criteria, projection): |
| | try: |
| | |
| | search_dict = json.loads(search_criteria) if search_criteria else {} |
| | proj_dict = json.loads(projection) if projection else {} |
| | |
| | return safe_execute(db_manager.advanced_search, collection, search_dict, proj_dict) |
| | except json.JSONDecodeError: |
| | return "Invalid JSON format for search criteria or projection" |
| |
|
| | |
| | def export_collection(collection_name): |
| | return safe_execute(db_manager.export_collection_to_json, collection_name) |
| |
|
| | |
| | with gr.Blocks(title="Database Management System", theme=gr.themes.Soft()) as demo: |
| | gr.Markdown("# π Advanced Database Management System") |
| | |
| | with gr.Tab("Brand Records"): |
| | with gr.Row(): |
| |
|
| | with gr.Column(): |
| | gr.Markdown("## π Get Brand Records") |
| | filter_brand = gr.Textbox(label="Filter by Brand (optional)") |
| | sort_by = gr.Dropdown( |
| | ["timestamp", "count"], |
| | label="Sort By", |
| | value="timestamp" |
| | ) |
| | ascending = gr.Checkbox(label="Ascending Order") |
| | get_brands_btn = gr.Button("Retrieve Brand Records") |
| | brand_records_output = gr.JSON(label="Brand Records") |
| |
|
| | |
| | get_brands_btn.click( |
| | get_brand_records, |
| | inputs=[filter_brand, sort_by, ascending], |
| | outputs=brand_records_output |
| | ) |
| |
|
| | |
| |
|
| | with gr.Tab("Freshness Records"): |
| | with gr.Row(): |
| | with gr.Column(): |
| | gr.Markdown("## π Get Freshness Record") |
| | filter_freshness = gr.Textbox(label="Filter by Freshness (optional)") |
| | sort_by = gr.Dropdown( |
| | ["timestamp", "count"], |
| | label="Sort By", |
| | value="timestamp" |
| | ) |
| | ascending = gr.Checkbox(label="Ascending Order") |
| | get_freshness_btn = gr.Button("Retrieve Freshness Records") |
| | freshness_records_output = gr.JSON(label="Freshness Records") |
| |
|
| | get_freshness_btn.click( |
| | get_freshness_records, |
| | inputs=[filter_freshness, sort_by, ascending], |
| | outputs=freshness_records_output |
| | ) |
| | |
| | |
| |
|
| | with gr.Tab("Analytics & Search"): |
| | with gr.Row(): |
| | with gr.Column(): |
| | gr.Markdown("## π Brand Trend Analysis") |
| | time_period = gr.Number(label="Time Period (Days)", value=30) |
| | analyze_trends_btn = gr.Button("Analyze Brand Trends") |
| | trends_output = gr.JSON(label="Brand Trends") |
| |
|
| | with gr.Column(): |
| | gr.Markdown("## π¬ Advanced Search") |
| | collection_dropdown = gr.Dropdown( |
| | ["brand", "ocr", "freshness"], |
| | label="Collection" |
| | ) |
| | search_criteria = gr.Textbox( |
| | label="Search Criteria (JSON)", |
| | placeholder='e.g., {"count": {"$gt": 100}}' |
| | ) |
| | projection = gr.Textbox( |
| | label="Projection (JSON)", |
| | placeholder='e.g., {"brand": 1, "count": 1}' |
| | ) |
| | search_btn = gr.Button("Perform Search") |
| | search_output = gr.JSON(label="Search Results") |
| |
|
| | |
| | analyze_trends_btn.click( |
| | analyze_brand_trends, |
| | inputs=time_period, |
| | outputs=trends_output |
| | ) |
| | search_btn.click( |
| | perform_advanced_search, |
| | inputs=[collection_dropdown, search_criteria, projection], |
| | outputs=search_output |
| | ) |
| |
|
| | with gr.Tab("Export"): |
| | with gr.Row(): |
| | with gr.Column(): |
| | gr.Markdown("## π€ Export Collections") |
| | export_collection_dropdown = gr.Dropdown( |
| | ["brand", "ocr", "freshness"], |
| | label="Select Collection to Export" |
| | ) |
| | export_btn = gr.Button("Export to JSON") |
| | export_output = gr.Textbox(label="Export Result") |
| |
|
| | |
| | export_btn.click( |
| | export_collection, |
| | inputs=export_collection_dropdown, |
| | outputs=export_output |
| | ) |
| |
|
| | return demo |
| |
|
| |
|
| | db_interface = create_gradio_interface() |