MyShoppingCart / app.py
bparekh99's picture
Update app.py
7f05403 verified
"""
Create a Gradio interface for the complete code of the above case study.
The interface should allow users to add items to the cart, remove items, display the cart, and calculate the total cost interactively.
"""
import gradio as gr
from gradio import Blocks, Number, Button, Textbox
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} '{item[1]}' has been added to the cart. {'<'*10} \n\n"
except IndexError:
return f"Invalid item ID: {item_id}"
def remove_item(cart_index, cart_items):
"""
Removes an item from the shopping cart.
"""
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:
return "Invalid cart index or cart is empty."
def display_cart(Your_Cart):
"""
Displays the items in the shopping cart.
"""
if Your_Cart:
cart_str = "" # Initialize an empty string to store the cart display
cart_str += "+" * 50 + "\n"
cart_str += f"{'Your Cart'.center(40)}" + "\n"
cart_str += "+" * 50 + "\n"
cart_str += f"{'Index':<10} {'Name':<20} {'Quantity':<10} {'Price Per KG':<10}" + "\n"
cart_str += "-" * 50 + "\n"
unique_items = set(Your_Cart) # Get unique items in the cart
total_cost = 0
for index, item in enumerate(unique_items):
quantity = Your_Cart.count(item)
price_per_kg = item[2]
total_price = price_per_kg * quantity
cart_str += f"{index+1:<10} {item[1]:<20} {quantity:<10} ${total_price:<10.2f}" + "\n"
total_cost += total_price
cart_str += "-" * 50 + "\n"
cart_str += f"{'Total Cost':<40} ${total_cost:<10.2f}" # Display grand total
return cart_str # Return the string representation of the cart
else:
return f"{'>'*10} Your cart is empty ! Buy something! {'<'*10} \n\n"
def total_cost(cart_items):
"""
Calculates the total cost of all items in the shopping cart.
"""
total = 0
for item in cart_items:
total += item[2] # Assuming quantity is 1 for now
return f"~"*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 the total cost.
Args:
item_id (int): The product ID to add to the cart (if any).
cart_index (int): The product ID to remove from the cart (if any).
Returns:
tuple: A tuple containing the updated cart display, add message, remove message, and total cost.
"""
# Add item
add_msg = ""
if item_id:
add_msg = add_item_to_cart(item_id, Inventory)
# Remove item
remove_msg = ""
if cart_index:
remove_msg = remove_item(cart_index, Your_Cart)
# Display the cart and calculate total cost
cart_display = display_cart(Your_Cart)
cost_msg = total_cost(Your_Cart)
return cart_display, add_msg, remove_msg, cost_msg
# Gradio interface creation
def launch_gradio():
"""
Launches the Gradio interface for the fruit shopping cart system.
"""
with gr.Blocks() as demo:
gr.Markdown("### Fruit Shopping Cart System")
with gr.Row():
item_id_input = gr.Number(label="Enter Product ID to Add to Cart", interactive=True)
cart_index_input = gr.Number(label="Enter Index ID to Remove from Cart", interactive=True)
with gr.Row():
add_button = gr.Button("Add to Cart")
remove_button = gr.Button("Remove from Cart")
cart_display_output = gr.Textbox(label="Your Cart", interactive=False)
add_message_output = gr.Textbox(label="Add Item Message", interactive=False)
remove_message_output = gr.Textbox(label="Remove Item Message", interactive=False)
total_cost_output = gr.Textbox(label="Total Cost", interactive=False)
# Add item button click behavior
add_button.click(
gradio_interface,
inputs=[item_id_input, gr.Number(visible=False, value=0)], # Pass a hidden Number component for cart_index
outputs=[cart_display_output, add_message_output, remove_message_output, total_cost_output]
)
# Remove item button click behavior
remove_button.click(
gradio_interface,
inputs=[gr.Number(visible=False, value=0), cart_index_input], # Pass a hidden Number component for item_id
outputs=[cart_display_output, add_message_output, remove_message_output, total_cost_output]
)
demo.launch()
# Run the Gradio interface
if __name__ == "__main__":
launch_gradio()