"""Functions to manage a users shopping cart items.""" from re import fullmatch def add_item(current_cart, items_to_add): """Add items to shopping cart. :param current_cart: dict - the current shopping cart. :param items_to_add: iterable - items to add to the cart. :return: dict - the updated user cart dictionary. """ # create a new cart with items_to_add if current_cart is empty # if current_cart == {}: # current_cart = dict.fromkeys(items_to_add, 0) # for item in items_to_add: # current_cart[item] += 1 # return current_cart # (after doing this i realized that the bellow code also addresses the # concern of the current_cart being empty, so i commented out the code # above) # increment item by one if item already exists in current_cart, # otherwise add new item to current_cart with value of 1 for item in items_to_add: current_cart[item] = current_cart.get(item, 0) + 1 return current_cart def read_notes(notes): """Create user cart from an iterable notes entry. :param notes: iterable of items to add to cart. :return: dict - a user shopping cart dictionary. """ shopping_cart: dict = dict.fromkeys(notes, 0) for item in notes: shopping_cart[item] += 1 return shopping_cart def update_recipes(ideas, recipe_updates): """Update the recipe ideas dictionary. :param ideas: dict - The "recipe ideas" dict. :param recipe_updates: dict - dictionary with updates for the ideas section. :return: dict - updated "recipe ideas" dict. """ ideas |= recipe_updates return ideas def sort_entries(cart): """Sort a users shopping cart in alphabetically order. :param cart: dict - a users shopping cart dictionary. :return: dict - users shopping cart sorted in alphabetical order. """ sorted_cart: dict = dict(sorted(cart.items())) return sorted_cart def send_to_store(cart, aisle_mapping): """Combine users order to aisle and refrigeration information. :param cart: dict - users shopping cart dictionary. :param aisle_mapping: dict - aisle and refrigeration information dictionary. :return: dict - fulfillment dictionary ready to send to store. """ fulfillment: dict[str, list] = {} for item in cart: fulfillment[item] = [cart[item], aisle_mapping[item][0], aisle_mapping[item][1]] fulfillment = dict(sorted(fulfillment.items(), reverse=True)) return fulfillment def update_store_inventory(fulfillment_cart, store_inventory): """Update store inventory levels with user order. :param fulfillment cart: dict - fulfillment cart to send to store. :param store_inventory: dict - store available inventory :return: dict - store_inventory updated. """ for item in fulfillment_cart: new_stock = store_inventory[item][0] - fulfillment_cart[item][0] store_inventory[item] = [ "Out of Stock" if new_stock <= 0 else new_stock, store_inventory[item][1], store_inventory[item][2], ] return store_inventory