FruitAPP / app.py
desolo-2918's picture
Update app.py
ef344fe verified
# If running in a notebook:
# !pip install gradio
import gradio as gr
Inventory = [
(1, "Apples", 250),
(2, "Cherry", 650),
(3, "Chickoo", 50),
(4, "Grapes", 90),
(5, "Mangoes", 150),
]
Your_Cart = []
def add_item_to_cart(item_id, inventory):
"""Adds an item from the inventory to the shopping cart."""
try:
item = inventory[item_id - 1]
Your_Cart.append(item)
return f"{'>'*10} The item '{item[1]}' has been added to the cart. {'<'*10}\n\n"
except (IndexError, TypeError):
return f"Invalid item ID: {item_id}\n\n"
def remove_item(cart_index, cart_items):
"""Removes an item from the shopping cart by displayed index."""
try:
removed_item = cart_items.pop(cart_index - 1)
return f"{'>'*10} The item '{removed_item[1]}' has been removed from the cart, and your shopping cart has been updated. {'<'*10}\n\n"
except (IndexError, TypeError):
return "Invalid cart index or cart is empty.\n\n"
def display_cart(cart_items):
"""Displays the items in the shopping cart (stable, one line per item in cart order)."""
if not cart_items:
return f"{'>'*10} Your cart is empty !!!, Why not buy Fruits from us ... {'<'*10}\n\n"
cart_str = ""
cart_str += "+" * 70 + "\n"
cart_str += f"{'Your Cart'.center(60)}\n"
cart_str += "+" * 70 + "\n"
cart_str += f"{'Index':<10} {'Name':<20} {'Price Per KG':<15}\n"
cart_str += "-" * 70 + "\n"
total = 0
for idx, item in enumerate(cart_items, start=1):
cart_str += f"{idx:<10} {item[1]:<20} ${item[2]:<15.2f}\n"
total += item[2]
cart_str += "-" * 70 + "\n"
cart_str += f"{'Total Cost':<32} ${total:<10.2f}\n"
return cart_str
def total_cost(cart_items):
"""Calculates total cost of all items in the cart."""
total = sum(item[2] for item in cart_items)
return "~" * 40 + "\n" + f"Total cost: {total}".center(40) + "\n" + "~" * 40 + "\n\n"
def gradio_interface(item_id, cart_index):
"""
Handles adding/removing items, displaying the cart, and calculating total cost.
"""
# Convert inputs (Gradio Numbers are floats)
def to_int(x):
try:
if x is None:
return 0
return int(x)
except (ValueError, TypeError):
return 0
item_id = to_int(item_id)
cart_index = to_int(cart_index)
add_msg = ""
if item_id > 0:
add_msg = add_item_to_cart(item_id, Inventory)
remove_msg = ""
if cart_index > 0:
remove_msg = remove_item(cart_index, Your_Cart)
cart_display = display_cart(Your_Cart)
cost_msg = total_cost(Your_Cart)
return cart_display, add_msg, remove_msg, cost_msg
def launch_gradio():
with gr.Blocks() as demo:
gr.Markdown("### Fruit Shopping Cart System")
gr.Markdown(
"Inventory:\n"
+ "\n".join([f"- {pid}: {name} (${price}/kg)" for pid, name, price in Inventory])
)
with gr.Row():
item_id_input = gr.Number(label="Enter Product ID to Add to Cart", precision=0)
cart_index_input = gr.Number(label="Enter Cart Index to Remove", precision=0)
# Hidden zero inputs created ONCE (don’t create components inside .click)
zero_item = gr.Number(value=0, visible=False, precision=0)
zero_cart = gr.Number(value=0, visible=False, precision=0)
with gr.Row():
add_button = gr.Button("Add to Cart")
remove_button = gr.Button("Remove from Cart")
refresh_button = gr.Button("Refresh Cart View")
cart_display_output = gr.Textbox(label="Your Cart", interactive=False, lines=12)
add_message_output = gr.Textbox(label="Add Item Message", interactive=False, lines=2)
remove_message_output = gr.Textbox(label="Remove Item Message", interactive=False, lines=2)
total_cost_output = gr.Textbox(label="Total Cost", interactive=False, lines=4)
add_button.click(
fn=gradio_interface,
inputs=[item_id_input, zero_cart],
outputs=[cart_display_output, add_message_output, remove_message_output, total_cost_output]
)
remove_button.click(
fn=gradio_interface,
inputs=[zero_item, cart_index_input],
outputs=[cart_display_output, add_message_output, remove_message_output, total_cost_output]
)
refresh_button.click(
fn=gradio_interface,
inputs=[zero_item, zero_cart],
outputs=[cart_display_output, add_message_output, remove_message_output, total_cost_output]
)
demo.launch()
if __name__ == "__main__":
launch_gradio()