def rmfavor(brand, name): if 'account' not in session: table = get_table('Fragrances') key = {'brand': brand, 'name': name} try: response = table.get_item(Key=key) except ClientError as e: raise e else: item = response['Item'] return render_template('info.html', item=item, notLogin=True) else: table = get_table('Fragrances') key = {'brand': brand, 'name': name} try: response = table.get_item(Key=key) except ClientError as e: raise e else: item = response['Item'] if 'favors' not in item: favors = 1 if item['favors'] > 0: favors = item['favors'] - 1 response = table.update_item( Key={ 'brand': brand, 'name': name }, UpdateExpression="set favors = :f", ExpressionAttributeValues={':f': favors}, ReturnValues="UPDATED_NEW") account = session['account'] table = get_table('Users') try: response = table.get_item(Key={'account': account}) except ClientError as e: raise e else: user = response['Item'] favor = user['favor'] key = {'brand': brand, 'name': name} if key in favor: favor.remove({'brand': brand, 'name': name}) response = table.update_item( Key={'account': account}, UpdateExpression="set favor = :f", ExpressionAttributeValues={':f': favor}, ReturnValues="UPDATED_NEW") return redirect(url_for('info', brand=brand, name=name))
def search(keywords): keywords = keywords.strip().encode("utf-8") print keywords print len(keywords) print type(keywords) if type(keywords) != str: keywords = str(keywords) keywords = keywords.replace(",", " ") keywords = keywords.replace("/", " ") keywords = keywords.replace("\\", " ") keywords = keywords.replace(";", " ") keywords = keywords.replace("%", " ") keywords = keywords.replace("|", " ") keywords = keywords.split() table = get_table('Fragrances') try: response = table.scan() except ClientError as e: raise e else: items = response['Items'] for item in items: del item['properties']['description'] items = filterByKeywords(items, keywords) items = sort(items) num = len(items) if 'account' not in session: return render_template( 'search.html', items=items, num=num, keywords=" ".join(keywords), ) else: table = get_table('Users') account = session['account'] try: response = table.get_item(Key={'account': account}) except ClientError as e: raise e else: user = response['Item'] return render_template( 'search.html', name=user['name'], items=items, num=num, keywords=" ".join(keywords), )
def addreview(brand, name): title = request.form.get('title', "") content = request.form.get('content', "") date = datetime.datetime.utcnow().strftime('(UTC)%H:%M:%S, %B %d, %Y') if 'account' not in session: table = get_table('Fragrances') key = {'brand': brand, 'name': name} try: response = table.get_item(Key=key) except ClientError as e: raise e else: item = response['Item'] return render_template('info.html', item=item, notLogin=True) else: account = session['account'] table = get_table('Users') key = {'account': account} response = table.get_item(Key=key) user = response['Item'] table = get_table('Fragrances') key = {'brand': brand, 'name': name} response = table.get_item(Key=key) item = response['Item'] if 'comments' not in item: comments = [] else: comments = item['comments'] newComment = { 'name': user['name'], 'date': date, 'title': title, 'content': content } comments.insert(0, newComment) response = table.update_item( Key=key, UpdateExpression="set comments = :c, reviews=:r", ExpressionAttributeValues={ ':c': comments, ':r': len(comments) }, ReturnValues="UPDATED_NEW") return redirect(url_for('info', brand=brand, name=name))
def reSort(keywords): sortBy = request.form.get('sortBy', "correlation") if type(keywords) != str: keywords = str(keywords) keywords = keywords.replace(",", " ") keywords = keywords.replace("/", " ") keywords = keywords.replace("\\", " ") keywords = keywords.replace(";", " ") keywords = keywords.replace("%", " ") keywords = keywords.replace("|", " ") keywords = keywords.split() table = get_table('Fragrances') try: response = table.scan() except ClientError as e: raise e else: items = response['Items'] for item in items: del item['properties']['description'] items = sort(items, sortBy) items = filterByKeywords(items, keywords) num = len(items) if 'account' not in session: return render_template('search.html', items=items, num=num, keywords=" ".join(keywords), sortBy=sortBy) else: account = session['account'] table = get_table('Users') try: response = table.get_item(Key={'account': account}) except ClientError as e: raise e else: user = response['Item'] return render_template('search.html', name=user['name'], items=items, num=num, keywords=" ".join(keywords), sortBy=sortBy)
def verify(email, code): print(email) print(code) table = get_table('UserInfo') try: response = table.get_item(Key={'email': email}) except Exception as e: raise e else: if 'Item' in response: user = response['Item'] if user['active'] == True: return 'Your Account is Active.' elif user['code'] == code: response = table.update_item( Key={'email': email}, UpdateExpression="set active = :a", ExpressionAttributeValues={':a': True}, ReturnValues="UPDATED_NEW") signUpMsg = [ "Congratulations!", "Your account has been successfully created!", "Please login with your email and have fun! " ] return render_template('index.html', clickSignUp=True, needSignUp=True, signUpMsg=signUpMsg) else: signUpMsg = ['Your must Sign Up before activation.'] return render_template('index.html', clickSignUp=True, signUpMsg=signUpMsg)
def login(): table = get_table('UserInfo') session['email'] = request.form.get('email', "") email = session['email'] password = request.form.get('password', "") try: response = table.get_item(Key={ 'email': email, }) except ClientError as e: session.pop('email', None) err_msg = [e.response['Error']['Message']] return render_template('index.html', login_err_msg=err_msg) else: if 'Item' not in response: session.pop('email', None) err_msg = ["Account does not exist."] return render_template('index.html', login_err_msg=err_msg) elif response['Item']['active']: user = response['Item'] if (password != user['password']): session.pop('email', None) err_msg = ["Incorrect password."] return render_template('index.html', login_err_msg=err_msg) else: return redirect(url_for('index')) else: session.pop('email', None) err_msg = [ "Your email hasn't been verified. You can register again if you lost the verification email. " ] return render_template('index.html', login_err_msg=err_msg)
def favorList(): if 'account' not in session: return redirect(url_for('index')) else: account = session['account'] table = get_table('Users') try: response = table.get_item(Key={'account': account}) except ClientError as e: raise e else: user = response['Item'] table = get_table('Fragrances') favors = [] for favor in user['favor']: try: response = table.get_item(Key={ 'brand': favor['brand'], 'name': favor['name'], }) except ClientError as e: raise e else: item = response['Item'] favors.append({ 'brand': item['brand'], 'name': item['name'], 'key': item['key'] }) return render_template( 'list.html', name=user['name'], items=favors, )
def list(): items = get_all_fragrances() items = sort(items, 'name') if 'account' in session: account = session['account'] table = get_table('Users') try: response = table.get_item(Key={'account': account}) except ClientError as e: raise e else: user = response['Item'] return render_template('list.html', name=user['name'], items=items, viewAll=True) else: return render_template('list.html', items=items, viewAll=True)
def list_sort(): sortBy = request.form.get('sortBy', "name") items = get_all_fragrances() items = sort(items, sortBy) if 'account' not in session: return render_template('list.html', items=items, sortBy=sortBy, viewAll=True) else: account = session['account'] table = get_table('Users') try: response = table.get_item(Key={'account': account}) except ClientError as e: raise e else: user = response['Item'] return render_template('list.html', name=user['name'], items=items, sortBy=sortBy, viewAll=True)
def sign_up(): table = get_table('Users') account = request.form.get('account', "") password = request.form.get('password', "") conf_pw = request.form.get('conf_pw', "") first_name = request.form.get('first_name', "") last_name = request.form.get('last_name', "") frags_most_reviews = get_most_reviews(5) frags_trend_favors = get_trend_favors(5) frags_top_rated = get_top_rated(5) if password != conf_pw: err_msg = "Passwords do not match." return render_template( 'index.html', clickSignUp=True, signup_err_msg=err_msg, frags_most_reviews=frags_most_reviews, frags_trend_favors=frags_trend_favors, frags_top_rated=frags_top_rated, ) try: response = table.get_item(Key={ 'account': account, }) except ClientError as e: err_msg = e.response['Error']['Message'] return render_template( 'index.html', clickSignUp=True, signup_err_msg=err_msg, frags_most_reviews=frags_most_reviews, frags_trend_favors=frags_trend_favors, frags_top_rated=frags_top_rated, ) else: if ('Item' in response) and response['Item']['active']: err_msg = "Account already exists." return render_template( 'index.html', clickSignUp=True, signup_err_msg=err_msg, frags_most_reviews=frags_most_reviews, frags_trend_favors=frags_trend_favors, frags_top_rated=frags_top_rated, ) else: src = account + password code = hashlib.md5(src).hexdigest() response = table.put_item( Item={ 'account': account, 'password': password, 'name': { 'first': first_name, 'last': last_name, }, 'favor': [], 'post': [], 'code': code, 'active': False }) ses = boto3.client('ses') name = first_name + " " + last_name link = request.url_root + 'sign_up/verify/' + account + '&' + code response = ses.send_email( Source=my_email, Destination={'ToAddresses': [ account, ]}, Message={ 'Subject': { 'Data': 'Welcome to the Fragrance Community' }, 'Body': { # 'Text': { # 'Data': 'string', # 'Charset': 'string' # }, 'Html': { 'Data': ''' <h2>Hi ''' + name + ''' !</h2> <p>Welcome to the <a href=" ''' + request.url_root + ''' ">Fragrance Community</a>.</p> <h3>Verify Your Account</h3> <p>To complete your registration, please verify your email address by clicking this <a href=" ''' + link + ''' "> Link </a>.</p> <p>Alternatively, you can copy and paste the following link into your browser's address window: </p> <p> ''' + link + ''' </p> ''' } } }) signUpMsg = [ "To complete the registration, check your emails.", "You'll get an email with a link to comfirm that the address is yours." ] return render_template( 'index.html', clickSignUp=True, signUpMsg=signUpMsg, frags_most_reviews=frags_most_reviews, frags_trend_favors=frags_trend_favors, frags_top_rated=frags_top_rated, )
def login(): table = get_table('Users') session['account'] = request.form['account'] account = session['account'] password = request.form.get('password', "") frags_most_reviews = get_most_reviews(5) frags_trend_favors = get_trend_favors(5) frags_top_rated = get_top_rated(5) try: response = table.get_item(Key={ 'account': account, }) except ClientError as e: session.pop('account', None) err_msg = e.response['Error']['Message'] return render_template( 'index.html', frags_most_reviews=frags_most_reviews, frags_trend_favors=frags_trend_favors, frags_top_rated=frags_top_rated, login_err_msg=err_msg, ) else: if 'Item' not in response: session.pop('account', None) err_msg = "Account does not exist." return render_template( 'index.html', frags_most_reviews=frags_most_reviews, frags_trend_favors=frags_trend_favors, frags_top_rated=frags_top_rated, login_err_msg=err_msg, ) elif response['Item']['active']: user = response['Item'] if (password != user['password']): session.pop('account', None) err_msg = "Incorrect password." return render_template( 'index.html', frags_most_reviews=frags_most_reviews, frags_trend_favors=frags_trend_favors, frags_top_rated=frags_top_rated, login_err_msg=err_msg, ) else: return redirect(url_for('index')) else: session.pop('account', None) err_msg = "Your email hasn't been verified. You can register again if you lost the verification email. " return render_template( 'index.html', frags_most_reviews=frags_most_reviews, frags_trend_favors=frags_trend_favors, frags_top_rated=frags_top_rated, login_err_msg=err_msg, )
def signup(): table = get_table('UserInfo') email = request.form.get('email', "") password = request.form.get('password', "") name = request.form.get("name", "") print("Before " + email) try: response = table.get_item(Key={ 'email': email, }) except ClientError as e: err_msg = e.response['Error']['Message'] print(err_msg) return render_template('index.html', err_msg=err_msg) if ('Item' in response) and response['Item']['active']: err_msg = ["Account already exists."] return render_template( 'index.html', clickSignUp=True, signup_err_msg=err_msg, ) else: src = email + password # code = hashlib.sha256(src.encode('utf-8')).hexdigest() code = 'Test' response = table.put_item( Item={ 'email': email, 'password': password, 'name': name, 'active': False, 'code': code, 'favorites': [] }) ses = boto3.client('ses') link = "https://h1u79dg2z9.execute-api.us-east-1.amazonaws.com/dev/" + 'sign_up/verify/' + email + '&' + code print(email) response = ses.send_email( Source=webapp.config['my_email'], Destination={'ToAddresses': [ email, ]}, Message={ 'Subject': { 'Data': 'Welcome to Yammme' }, 'Body': { # 'Text': { # 'Data': 'string', # 'Charset': 'string' # }, 'Html': { 'Data': ''' <h2>Hi ''' + name + ''' !</h2> <p>Welcome to the <a href=" ''' + "https://h1u79dg2z9.execute-api.us-east-1.amazonaws.com/dev/" + ''' ">Yammme</a>.</p> <h3>Verify Your Account</h3> <p>To complete your registration, please verify your email address by clicking this <a href=" ''' + link + ''' "> Link </a>.</p> <p>Alternatively, you can copy and paste the following link into your browser's address window: </p> <p> ''' + link + ''' </p> ''' } } }) signUpMsg = [ "To complete the registration, check your emails.", "You'll get an email with a link to comfirm that the address is yours." ] return render_template('index.html', signUpMsg=signUpMsg)
def info(brand, name): table = get_table('Fragrances') key = {'brand': brand, 'name': name} try: response = table.get_item(Key=key) except ClientError as e: raise e else: item = response['Item'] # if 'reviews' not in item: # reviews = 1 # else: # reviews = item['reviews'] + 1 # response = table.update_item( # Key = key, # UpdateExpression="set reviews = :r", # ExpressionAttributeValues={ # ':r': reviews # }, # ReturnValues="UPDATED_NEW" # ) if 'account' not in session: return render_template( 'info.html', item=item, ) else: account = session['account'] table = get_table('Users') try: response = table.get_item(Key={'account': account}) except ClientError as e: raise e else: user = response['Item'] if key in user['favor']: hasFavored = True else: hasFavored = False hasRated = False u_score = None if 'rated' in user: for ratedItem in user['rated']: if ratedItem['brand'] == key['brand'] and ratedItem[ 'name'] == key['name']: hasRated = True u_score = ratedItem['u_score'] break return render_template('info.html', item=item, name=user['name'], u_score=u_score, hasFavored=hasFavored, hasRated=hasRated)
def rate(): score = request.form.get('score') brand = request.form.get('brand') name = request.form.get('name') score = decimal.Decimal(score) u_score = score brand = brand.replace('&', '&') name = name.replace('&', '&') table = get_table('Fragrances') try: response = table.get_item(Key={'brand': brand, 'name': name}) except ClientError as e: raise e else: item = response['Item'] if 'account' not in session: return render_template('info.html', item=item, notLogin=True) if item['rating'] == None: num = decimal.Decimal(1) rating = {'score': score, 'num': num} else: num = item['rating']['num'] + 1 score = (item['rating']['score'] * (num - 1) + score) / num print score score = decimal.Decimal(score).quantize(decimal.Decimal('0.0')) print score rating = {'score': score, 'num': num} response = table.update_item(Key={ 'brand': brand, 'name': name }, UpdateExpression="set rating = :r", ExpressionAttributeValues={':r': rating}, ReturnValues="UPDATED_NEW") account = session['account'] table = get_table('Users') try: response = table.get_item(Key={'account': account}) except Exception as e: raise e else: user = response['Item'] if 'rated' not in user: rated = [] rated.append({ 'brand': brand, 'name': name, 'u_score': u_score }) else: rated = user['rated'] rated.append({ 'brand': brand, 'name': name, 'u_score': u_score }) response = table.update_item( Key={'account': account}, UpdateExpression="set rated = :r", ExpressionAttributeValues={':r': rated}, ReturnValues="UPDATED_NEW") return jsonify(ret={ 'score': float(score), 'num': int(num), 'u_score': int(u_score) })