示例#1
0
def itemsold():
    if 'username' not in session:
        username = CASClient().authenticate().strip()
        check_user(username)
    else:
        username = session.get('username').strip()

    #username = '******'
    itemid = request.args.get('itemid')

    database = Database()
    database.connect()

    if not str(itemid).isnumeric() or not (
            database.check_exists_solditem(itemid)):
        errormsg = 'Sorry, this item does not exist.'
        html = render_template('error.html', errormsg=errormsg)
        response = make_response(html)
        return response

    entry = database.get_solditem(itemid)
    database.disconnect()
    html = render_template('itemsold.html', entry=entry[0], errormsg='')
    response = make_response(html)
    return response
示例#2
0
def home_control():
    if 'username' not in session:
        username = CASClient().authenticate().strip()
        check_user(username)
        # send_purchase_mail("*****@*****.**", "*****@*****.**", "an item", str(235))
    else:
        username = session.get('username').strip()

    #username = '******'

    try:
        database = Database()
        database.connect()
        results = database.get_available_db()
        database.disconnect()

        html = render_template('index.html',
                               results=results,
                               lastSearch='',
                               maxPrice='',
                               minPrice='',
                               tags=[])
        # html = render_template('index.html')
        response = make_response(html)

        # NOTE: deal with cookies
        response.set_cookie('lastSearch', '')
        response.set_cookie('maxPrice', '')
        response.set_cookie('minPrice', '')
        response.set_cookie('ntags', '0')
        return response

    except Exception as e:
        print("error" + str(e), file=stderr)
        exit(1)
示例#3
0
def check_user(netid):
    database = Database()
    database.connect()

    if not database.user_exists(netid):
        database.add_user(netid)

    database.disconnect()
示例#4
0
def history():
    if 'username' not in session:
        username = CASClient().authenticate().strip()
        check_user(username)
    else:
        username = session.get('username').strip()

    #username = '******'

    database = Database()
    database.connect()
    netid_results = database.get_solditems_from_netid(username)
    bought_results = database.get_boughtitems_from_netid(username)
    database.disconnect()

    html = render_template('history.html',
                           netid_results=netid_results,
                           bought_results=bought_results)
    response = make_response(html)
    return response
 def create_widgets(self):
     d_b = Database("test.db")
     print(d_b)
示例#6
0
def search():
    if 'username' not in session:
        username = CASClient().authenticate().strip()
        check_user(username)
    else:
        username = session.get('username').strip()

    #username = '******'

    try:
        query = request.args.get('query')
        # print ("query: " + str(query))
        query = query.strip()
        maxP = request.args.get('maxprice')
        minP = request.args.get('minprice')
        tags = request.args.getlist('tag')

        set_max_cookie = True
        set_min_cookie = True

        if (query is None) or (query.strip() == ''):
            query = ''

        # setting it to a number larger than all possible entries on the site
        if (maxP is None) or (maxP.strip() == ''):
            maxP = '99999999999'
            set_max_cookie = False
        # setting it to lowest possible entry
        if (minP is None) or (minP.strip() == ''):
            minP = '0'
            set_min_cookie = False

        database = Database()
        database.connect()
        print('pre search')

        nlp_nouns = []
        if query != '':
            nlp_nouns = search_helper(query)

        results = database.search(query, maxP, minP, tags, nlp_nouns)
        database.disconnect()
        print('post search')

        if not set_max_cookie:
            maxP = ''

        if not set_min_cookie:
            minP = ''

        html = render_template('index.html',
                               results=results,
                               lastSearch=query,
                               maxPrice=maxP,
                               minPrice=minP,
                               tags=tags)
        # html = prep_results(results)
        response = make_response(html)
        print('post response')

        # NOTE: deal with cookies
        response.set_cookie('lastSearch', query)
        response.set_cookie('maxPrice', maxP)
        response.set_cookie('minPrice', minP)
        response.set_cookie('ntags', str(len(tags)))
        for i in range(len(tags)):
            response.set_cookie(f'tag{i + 1}', tags[i])
        return response

    except Exception as e:
        print('error-search(): ' + str(e), file=stderr)
        exit(1)
示例#7
0
def track():
    bidconsistency = True
    print("arriveddddddddddddddddddd!!!!!!!!!!!!!!!!!!!")
    if 'username' not in session:
        username = CASClient().authenticate().strip()
        check_user(username)
    else:
        username = session.get('username').strip()

    #username = '******'
    database = Database()
    database.connect()

    if request.method == 'POST':
        print(
            "arrived at POSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT"
        )
        if (request.form.get('deletebid') is not None):
            delete_bid_itemid = request.form.get('deletebid')

            database.remove_bid(delete_bid_itemid, username)

        elif (request.form.get('deleteitem') is not None):
            delete_item_itemid = request.form.get('deleteitem')

            if (len(database.get_item(delete_item_itemid)) > 0):
                delete_item_filename = (
                    database.get_item(delete_item_itemid)[0])[4]
                if (delete_item_filename != ''):

                    os.remove(
                        os.path.join(IMAGE_DIR_AVAILABLE,
                                     delete_item_filename))
                    database.delete_image(delete_item_itemid)

            database.delete_from_db(delete_item_itemid)
            database.delete_from_bids(delete_item_itemid)
            if str(delete_item_itemid) in itemid_hashset:
                itemid_hashset.remove(str(delete_item_itemid))

        else:
            # print("accepted bid!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1")
            itemid = request.form['accept']
            price = request.form['seller_sees']

            selldate = datetime.date.today()

            entry = database.get_item(itemid)[0]
            max_bid_user = entry[7]
            print("itemid: " + str(itemid))
            current_max_bid = database.get_max_bid(itemid)
            print("current max bid: " + str(current_max_bid[2]))
            print("price: " + str(price))
            current_max_bidder = current_max_bid[1]
            print("max bid user: "******"current max bidder: " + str(current_max_bidder))

            print("tttttttttttttttttttttttttttttttttttttttt")
            print(str(current_max_bid[2]))
            print(price)

            if (max_bid_user != None and str(current_max_bid[2]) == price):
                # print("yes!!!!----------------------------------------------")
                database.copy_to_purchased(itemid, selldate, max_bid_user)
                delete_item_filename = (database.get_item(itemid)[0])[4]
                database.delete_from_db(itemid)
                database.delete_from_bids(itemid)
                # print("222222222222222222222222222222222222222!!!!----------------------------------------------")
                send_purchase_mail(
                    str(current_max_bidder).strip() + '@princeton.edu',
                    str(username).strip() + '@princeton.edu', str(entry[6]),
                    str(current_max_bid[2]))
                if (delete_item_filename != ''):
                    os.rename(
                        os.path.join(IMAGE_DIR_AVAILABLE,
                                     delete_item_filename),
                        os.path.join(IMAGE_DIR_PURCHASED,
                                     delete_item_filename))
                    database.copy_image_to_purchased_images(itemid)
                    database.delete_image(itemid)

                if str(itemid) in itemid_hashset:
                    itemid_hashset.remove(str(itemid))

                bidconsistency = True

            else:
                print("elsssssseeeeeeeeeeeeee!!!!!!!!!!!!!!!")
                bidconsistency = False
                print("elsebid:", bidconsistency)
                errormsg = "The bid you were trying to accept was removed by the bidder right before you hit accept, so we could not process the transaction. Sorry for the inconvenience."
                html = render_template('track.html', errormsg=errormsg)
                response = make_response(html)
                return response

    if request.args.get('action') == None:
        print("first arrivalllllllllll")
        html = render_template('track.html', errormsg='')
        response = make_response(html)
        return response
    else:

        netid_results = database.get_all_items_from_netid(username)
        bidder_results = database.get_all_items_from_maxbidder(username)

        database.disconnect()

        results = []
        sell_list = []
        for item in netid_results:
            item_dict = {
                "item_id": str(item[0]),
                "price": str(item[3]),
                "item_title": str(item[6]),
                "max_bidder": str(item[7])
            }
            sell_list.append(item_dict)
        results.append(sell_list)

        bid_list = []
        for item in bidder_results:
            item_dict = {
                "item_id": str(item[0]),
                "price": str(item[3]),
                "item_title": str(item[6])
            }
            bid_list.append(item_dict)
        results.append(bid_list)

        print("secondbid:", bidconsistency)
        # if (bidconsistency is False):
        #     print("notttttttt")
        #     results.append("f")
        # else:
        #     print("trueeee")
        #     results.append("t")

        print("results: " + str(results))

        bidconsistency = True

        jsonStr = dumps(results)
        response = make_response(jsonStr)
        response.headers['Content-Type'] = 'application/json'
        return response
示例#8
0
def sell():
    if 'username' not in session:
        username = CASClient().authenticate().strip()
        check_user(username)
    else:
        username = session.get('username').strip()

    #username = '******'

    # parse user input for item upload details
    # ***** need to handle other info still *****
    if request.method == 'POST':
        print("sell: " + str(request))
        if 'image' not in request.files:
            print("err")
        image = request.files['image']
        title = request.form['title']
        description = request.form['description']
        price = request.form['price']
        tag = request.form['tag']

        if title is None:
            title = ''
        if description is None:
            description = ''
        if price is None:
            price = ''

        # generate a random itemid until you get one that isn't
        # in the itemdid_hashet, meaning that it isn't already being
        # used by an item in available_items
        itemid = int(random.uniform(100, 1000000))
        while str(itemid) in itemid_hashset:
            itemid = int(random.uniform(100, 1000000))
        itemid_hashset.append(str(itemid))

        #if postdate is None:
        postdate = datetime.date.today()
        #if netid is None:
        netid = username

        # connect to database
        database = Database()
        database.connect()

        if (image.filename == ''):
            print("none")
            image = ''
            image_read = None
            safefilename = ''
        else:
            print(image)
            safefilename = secure_filename(randstr() + '-' + image.filename)
            imgpath = '{}/{}'.format(IMAGE_DIR_AVAILABLE, safefilename)
            image.save(imgpath)
            image.seek(0)
            image_read = image.read()
            database.add_image(itemid, image_read, safefilename)
            print(database.image_table_size())

        database.add_to_db(itemid, postdate, netid, price, safefilename,
                           description, title, tag)

        # add to bid database with null bidder netid
        database.bid(itemid, price, None)

        database.disconnect()

        html = render_template('confirmation.html')
        response = make_response(html)
        return response

    else:
        try:
            html = render_template('sell.html')
            response = make_response(html)
            return response
        except Exception as e:
            print("error" + str(e), file=stderr)
            exit(1)
示例#9
0
def item():
    if 'username' not in session:
        username = CASClient().authenticate().strip()
        check_user(username)
    else:
        username = session.get('username').strip()

    #username = '******'
    itemid = request.args.get('itemid')

    string = request.cookies.get('lastSearch')
    if string is None:
        string = ''
    maxP = request.cookies.get('maxPrice')
    if maxP is None:
        maxP = ''
    minP = request.cookies.get('minPrice')
    if minP is None:
        minP = ''
    ntags = request.cookies.get('ntags')

    tags = []
    for i in range(int(ntags)):
        tags.append(request.cookies.get(f'tag{i + 1}'))

    database = Database()
    database.connect()

    # check if item still exists in available database
    # if not, check if it was sold
    if not str(itemid).isnumeric():
        errormsg = 'Sorry, this item does not exist.'
        html = render_template('error.html', errormsg=errormsg)
        response = make_response(html)
        return response

    if not (database.check_exists_item(itemid)):
        if not (database.check_exists_solditem(itemid)):
            errormsg = 'Sorry, this item does not exist.'
            html = render_template('error.html', errormsg=errormsg)
            response = make_response(html)
            return response
        else:
            entry = database.get_solditem(itemid)
            database.disconnect()
            errormsg = 'Sorry, this item has already been sold.'
            html = render_template('itemsold.html',
                                   entry=entry[0],
                                   errormsg=errormsg)
            response = make_response(html)
            return response

    if request.method == 'POST':
        bid = request.form['bid']

        # check if bid is numeric
        try:
            bid = float(bid)
        except Exception as e:
            database = Database()
            database.connect()
            entry = database.get_item(itemid)
            database.disconnect()
            msg = 'Please enter a valid bid.'
            html = render_template('item.html',
                                   entry=entry[0],
                                   msg=msg,
                                   lastSearch=string,
                                   maxPrice=maxP,
                                   minPrice=minP,
                                   tags=tags)
            response = make_response(html)
            return response

        # round bid to nearest 0.5
        bid = math.floor(bid)

        #if netid is None:
        netid = username

        database = Database()
        database.connect()

        # add bid to database
        entry = database.get_item(itemid)
        seller_id = (entry[0])[2]
        print(seller_id)
        if (seller_id == netid):
            database.disconnect()
            msg = 'Sorry, you may not bid on an item you are selling.'
            html = render_template('item.html',
                                   entry=entry[0],
                                   msg=msg,
                                   lastSearch=string,
                                   maxPrice=maxP,
                                   minPrice=minP,
                                   tags=tags)
            response = make_response(html)
            return response

        entry = database.get_item(itemid)
        current_price = (entry[0])[3]
        if (float(bid) <= current_price):
            database.disconnect()
            msg = 'Please enter a bid higher than the current price.'
            html = render_template('item.html',
                                   entry=entry[0],
                                   msg=msg,
                                   lastSearch=string,
                                   maxPrice=maxP,
                                   minPrice=minP,
                                   tags=tags)
            response = make_response(html)
            return response

        database.bid(itemid, bid, netid)
        entry = database.get_item(itemid)
        database.disconnect()
        msg = 'Your bid has been processed. Thank you!'
        html = render_template('item.html',
                               entry=entry[0],
                               msg=msg,
                               lastSearch=string,
                               maxPrice=maxP,
                               minPrice=minP,
                               tags=tags)
        response = make_response(html)
        return response
    else:
        try:
            database = Database()
            database.connect()
            entry = database.get_item(itemid)
            database.disconnect()
            html = render_template('item.html',
                                   entry=entry[0],
                                   lastSearch=string,
                                   maxPrice=maxP,
                                   minPrice=minP,
                                   tags=tags)
            response = make_response(html)
            return response
        except Exception as e:
            print("error" + str(e), file=stderr)
            exit(1)
示例#10
0
def modify_item():
    print("server reached")
    print(request)
    if 'username' not in session:
        username = CASClient().authenticate().strip()
        check_user(username)
    else:
        username = session.get('username').strip()

    database = Database()
    database.connect()
    itemid = None

    if (request.method == "GET" and request.args.get('modify') != None):
        print("get reached")
        itemid = request.args.get('modify')
        print("itemid: " + str(itemid))
        print(request)
        entry = (database.get_item(itemid))[0]
        html = render_template('modify_item.html', entry=entry)
        response = make_response(html)
        return response
        # a confirm_change button (let them know it will reset bids), a cancel button (redirect to track page)
        # confirm_change redirects back here, with a get_request
    elif (request.method == "POST" and request.form['item_id'] != None):
        print("post reached")
        title = request.form['title']
        print("title")
        image = request.files['image']
        print(image)
        print("img")
        description = request.form['description']
        print("desc")
        price = request.form['price']
        print("pr")
        tag = request.form['tag']
        print("tag")
        postdate = datetime.date.today()
        netid = username
        old_item_id = request.form['item_id']
        print("id")
        # new_item_id = int(random.uniform(100, 1000000))
        # error handling on the above in case it comes from a non web browser source
        print("getting stuff reached")

        prev_info = (database.get_item(old_item_id))[0]

        # send e-mail to bidders before deleting the bids
        item_bids = database.get_item_bids(old_item_id)
        send_modify_mail(item_bids, prev_info[6], old_item_id)
        database.delete_from_bids(old_item_id)

        # delete the old item entry data
        database.delete_from_db(old_item_id)

        new_img_bool = True

        # if new image is null and previous image is not null
        if image.filename == '' and prev_info[4] != '':
            safefilename = prev_info[4]
            new_img_bool = False

        print("db stuff")
        # insert the new image into the db
        if new_img_bool == True:
            # delete the old image if there was one
            if (prev_info[4] != ''):
                os.remove(os.path.join(IMAGE_DIR_AVAILABLE, prev_info[4]))
                database.delete_image(old_item_id)

            if (image.filename == ''):
                image = ''
                image_read = None
                safefilename = ''
            else:
                # print(image)
                safefilename = secure_filename(randstr() + '-' +
                                               image.filename)
                imgpath = '{}/{}'.format(IMAGE_DIR_AVAILABLE, safefilename)
                image.save(imgpath)
                image.seek(0)
                image_read = image.read()
                database.add_image(old_item_id, image_read, safefilename)
            # print(database.image_table_size())

        # add new db info for the item
        database.add_to_db(old_item_id, postdate, netid, price, safefilename,
                           description, title, tag)

        # add to bid database with null bidder netid
        database.bid(old_item_id, price, None)
        print("work done")
        return redirect("/item?itemid={}".format(old_item_id))

    else:
        return redirect('/index')
示例#11
0
IMAGE_DIR_PURCHASED = 'static/images/purchased'

# a list used to store randomly generated itemids while they
# are being used by listings in available_items
# once listing is deleted or sold, the id is removed
itemid_hashset = []

# session objects to speed up remote API calls
s1 = requests.Session()
s2 = requests.Session()

# merriam webster api_key
# change b4 deploying
key = "9d189356-f47f-4545-b25c-63ed4d894d25"

database = Database()
database.connect()

all_items = database.get_available_db()
for item in all_items:
    if item[0] not in itemid_hashset:
        itemid_hashset.append(item[0])

stored_images = database.get_available_images()
purchased_images = database.get_purchased_images()
# retail_images = database.get_retail_images()

print("Retrieving available images...")
for entry in stored_images:
    image_data = entry[1]
    im = Image.open(io.BytesIO(image_data))