# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # Shopping cart implementation import uuid import sys # Convert a particular host and user email to a cart id def cartid(host, email): return ("cart", host.eval(), email.eval()) # Get the shopping cart from the cache # Return an empty cart if not found def getcart(id, cache): cart = cache.get(id) if cart is None: return () return cart # Post a new item to the cart, create a new cart if necessary def post(collection, item, cache, host, email): id = str(uuid.uuid1()) cart = (("'entry", item[0][1], ("'id", id), item[0][3]),) + getcart(cartid(host, email), cache) cache.put(cartid(host, email), cart) return (id,) # Find an item in the cart def find(id, cart): if cart == (): return (("'entry", ("'title", "Item"), ("'id", 0)),) elif id == cart[0][2][1]: return (cart[0],) else: return find(id, cart[1:]) # Get items from the cart def get(id, cache, host, email): if id == (): return ((("'feed", ("'title", "Your Cart"), ("'id", email.eval())) + getcart(cartid(host,email), cache)),) return find(id[0], getcart(cartid(host, email), cache)) # Delete items from the cart def delete(id, cache, host, email): if id == (): return cache.delete(cartid(host, email)) return True # Return the price of an item def price(item): return float(filter(lambda x: x[0] == "'price", item[3][1][1:])[0][1]) # Sum the prices of a list of items def sum(items): if items == (): return 0 return price(items[0]) + sum(items[1:]) # Return the total price of the items in the cart def total(cache, host, email): return sum(getcart(cartid(host, email), cache))