SCMS_colab / app.py
walepavan's picture
Upload 2 files
4f40895 verified
Raw
History Blame Contribute Delete
6.32 kB
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)