Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import io | |
| import sys | |
| # Inventory data | |
| Inventory = [ | |
| (1, "Apples", 250), | |
| (2, "Cherry", 650), | |
| (3, "Chickoo", 50), | |
| (4, "Grapes", 90), | |
| (5, "Mangoes", 150), | |
| ] | |
| # Existing functions (ensure these are defined or imported in your final app.py) | |
| # get_inventory_string | |
| # get_cart_string | |
| # add_item_to_cart | |
| # remove_item_from_cart | |
| def get_inventory_string(inventory_list): | |
| output_buffer = io.StringIO() | |
| print_func = lambda *args, **kwargs: print(*args, file=output_buffer, **kwargs) | |
| print_func(" | |
| " + "=" * 50) | |
| print_func(" " * 15 + "PRODUCT INVENTORY (PRICES)") | |
| print_func("=" * 50) | |
| print_func(f"{'ID':<5}{'Product Name':<20}{'Price/Kg':>15}") | |
| print_func("-" * 50) | |
| for item_id, product_name, price_per_kg in inventory_list: | |
| print_func(f"{item_id:<5}{product_name:<20}{price_per_kg:>15.2f}") | |
| print_func("=" * 50) | |
| return output_buffer.getvalue() | |
| def get_cart_string(cart_dict): | |
| output_buffer = io.StringIO() | |
| print_func = lambda *args, **kwargs: print(*args, file=output_buffer, **kwargs) | |
| print_func(" | |
| " + "=" * 50) | |
| print_func(" " * 18 + "SHOPPING CART") | |
| print_func("=" * 50) | |
| print_func(f"{'Product Name':<15}{'Quantity(Kg)':>12}{'Price/Kg':>12}{'Subtotal':>11}") | |
| print_func("-" * 50) | |
| total_bill = 0 | |
| if not cart_dict: | |
| print_func(" " * 18 + "Cart is empty!") | |
| else: | |
| for product_name, details in cart_dict.items(): | |
| qty = details['quantity'] | |
| price_per_kg = details['price_per_kg'] | |
| item_total = qty * price_per_kg | |
| total_bill += item_total | |
| print_func(f"{product_name:<15}{qty:>12.2f}{price_per_kg:>12.2f}{item_total:>11.2f}") | |
| print_func("=" * 50) | |
| print_func(f"{'Total Bill:':<38}{total_bill:>11.2f}") | |
| print_func("=" * 50) | |
| return output_buffer.getvalue() | |
| def add_item_to_cart(cart, item_id_to_add, quantity_to_add, inventory_list): | |
| found_in_inventory = False | |
| for item_id, product_name, price_per_kg in inventory_list: | |
| if item_id == item_id_to_add: | |
| found_in_inventory = True | |
| if product_name in cart: | |
| cart[product_name]['quantity'] += quantity_to_add | |
| else: | |
| cart[product_name] = {'quantity': quantity_to_add, 'price_per_kg': price_per_kg} | |
| return True, f"Added {quantity_to_add} Kg of {product_name} (ID: {item_id_to_add}) to cart. Price/Kg: ${price_per_kg:.2f}" | |
| if not found_in_inventory: | |
| return False, f"Error: Product with ID '{item_id_to_add}' not found in inventory." | |
| def remove_item_from_cart(cart, item_id_to_remove, quantity_to_remove, inventory_list): | |
| product_name_to_remove = None | |
| for item_id, product_name, _ in inventory_list: | |
| if item_id == item_id_to_remove: | |
| product_name_to_remove = product_name | |
| break | |
| if not product_name_to_remove: | |
| return False, f"Error: Product with ID '{item_id_to_remove}' not found in inventory." | |
| if product_name_to_remove not in cart: | |
| return False, f"Error: '{product_name_to_remove}' (ID: {item_id_to_remove}) is not in the cart." | |
| current_quantity = cart[product_name_to_remove]['quantity'] | |
| if quantity_to_remove >= current_quantity: | |
| del cart[product_name_to_remove] | |
| return True, f"Removed all {current_quantity} Kg of '{product_name_to_remove}' (ID: {item_id_to_remove}) from cart." | |
| else: | |
| cart[product_name_to_remove]['quantity'] -= quantity_to_remove | |
| return True, f"Removed {quantity_to_remove} Kg of '{product_name_to_remove}' (ID: {item_id_to_remove}) from cart. Remaining: {cart[product_name_to_remove]['quantity']} Kg." | |
| def gradio_add_item(cart, item_id_to_add, quantity_to_add): | |
| success, message = add_item_to_cart(cart, item_id_to_add, quantity_to_add, Inventory) | |
| return cart, message, get_cart_string(cart) | |
| def gradio_remove_item(cart, item_id_to_remove, quantity_to_remove): | |
| success, message = remove_item_from_cart(cart, item_id_to_remove, quantity_to_remove, Inventory) | |
| return cart, message, get_cart_string(cart) | |
| def gradio_display_cart_wrapper(cart): | |
| return get_cart_string(cart) | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# Shopping Cart Management System") | |
| cart_state = gr.State(value={}) | |
| with gr.Tab("Add/Remove Items"): | |
| gr.Markdown("## Inventory") | |
| gr.Textbox(value=get_inventory_string(Inventory), label="Available Products", interactive=False, lines=10) | |
| with gr.Row(): | |
| with gr.Column(): | |
| gr.Markdown("### Add Item to Cart") | |
| add_id = gr.Number(label="Product ID to Add", value=1) | |
| add_qty = gr.Number(label="Quantity (Kg)", value=1.0) | |
| add_btn = gr.Button("Add to Cart") | |
| add_output = gr.Textbox(label="Status", interactive=False) | |
| with gr.Column(): | |
| gr.Markdown("### Remove Item from Cart") | |
| remove_id = gr.Number(label="Product ID to Remove", value=1) | |
| remove_qty = gr.Number(label="Quantity (Kg)", value=1.0) | |
| remove_btn = gr.Button("Remove from Cart") | |
| remove_output = gr.Textbox(label="Status", interactive=False) | |
| current_cart_display = gr.Textbox(label="Current Shopping Cart", interactive=False, lines=None) | |
| add_btn.click( | |
| gradio_add_item, | |
| inputs=[cart_state, add_id, add_qty], | |
| outputs=[cart_state, add_output, current_cart_display] | |
| ) | |
| remove_btn.click( | |
| gradio_remove_item, | |
| inputs=[cart_state, remove_id, remove_qty], | |
| outputs=[cart_state, remove_output, current_cart_display] | |
| ) | |
| demo.load(gradio_display_cart_wrapper, inputs=cart_state, outputs=current_cart_display) | |
| with gr.Tab("View Cart"): | |
| gr.Markdown("## Your Shopping Cart") | |
| view_cart_display = gr.Textbox(label="Shopping Cart Contents", interactive=False, lines=None) | |
| cart_state.change( | |
| gradio_display_cart_wrapper, | |
| inputs=cart_state, | |
| outputs=view_cart_display | |
| ) | |
| # Initial load for the View Cart tab | |
| demo.load(gradio_display_cart_wrapper, inputs=cart_state, outputs=view_cart_display) | |
| demo.launch(share=True) | |