/
main.py
165 lines (139 loc) · 6.41 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
import os
import pymongo
import bottle
import time
import review as r
import bson
import sign_up
import manage_users
from urlparse import urlparse
MONGO_URL = os.environ.get('MONGOHQ_URL')
if MONGO_URL:
CONNECTION = pymongo.Connection(MONGO_URL, safe=True)
db = CONNECTION[urlparse(MONGO_URL).path[1:]]
else:
CONNECTION = pymongo.Connection('localhost', safe=True)
db = CONNECTION.hs_food
STATS = ["RECENT: Someone just wrote about Romy's Cajun Rice!", "POPULAR: People seem to go to Chipotle a lot...", "ACCLAIMED: People looooove 'Snice!"]
LOCATION = "Hacker School HQ"
@bottle.route('/main')
def post_main_page():
"""
Verifies user and posts main page for navigation
"""
username = sign_up.get_username()
if username:
main_var = dict(user = username, stat_rows = STATS, location = LOCATION)
return bottle.template('main', main_var = main_var)
else:
bottle.redirect('/login')
@bottle.route('/add_review', method="GET")
def add_restaurant_review():
"""
Allows user to post a review and preview it for any user
"""
username = sign_up.get_username()
if username:
add_var = dict(user=username, restaurant_name="", restaurant_address="",
restaurant_item="", item_comments="", item_price="",
restaurant_ranking="", restaurant_rating="",
restaurant_rating_reason="", address="", restaurant_chosen="",
address_chosen="")
return bottle.template('add_review', add_var=add_var)
else:
return bottle.template('login',
dict(user_error="Sorry, you need to be logged in to submit a review, please log below:", pw_error=""))
@bottle.route('/add_review', method="POST")
def add_review_to_db():
add_var = {}
restaurant_review_entry = {}
username = sign_up.get_username()
for key, value in bottle.request.forms.items():
print "%s: %s" % (key, value)
add_var[key] = value
restaurant_review_entry["user"] = username
add_var['user'] = username
if key != 'submit' and value != "":
restaurant_review_entry[key] = value
restaurant_review_entry['time'] = time.strftime("%a, %b %d %Y %I:%M%p",
time.localtime())
#change restaurant name and address to javascript variables
add_var['restaurant_name'] = add_var['restaurant_chosen']
restaurant_review_entry['restaurant_name'] = add_var['restaurant_chosen']
add_var['address'] = add_var['address_chosen']
restaurant_review_entry['address'] = add_var['address_chosen']
#see if there's a restaurant name, otherwise send back with fields entered
if 'restaurant_name' not in restaurant_review_entry:
add_var['error'] = "Error: Please enter restaurant name, silly!"
#print add_var['restaurant_address']
return bottle.template('add_review', add_var=add_var)
if 'preview_selected' in restaurant_review_entry:
print restaurant_review_entry
entry_preview = r.Review(restaurant_review_entry).to_html()
add_var['preview_selected'] = entry_preview
#print add_var
return bottle.template('add_review', add_var=add_var)
#we're ready to add entry to db
if username != "Anonymous User":
try:
db.reviews.insert(restaurant_review_entry)
except pymongo.errors.PyMongoError:
add_var['error'] = "Error: Couldn't add this to the db"
return bottle.template('add_review', add_var=add_var)
else:
add_var['error'] = "Sorry, you cannot add a review because you are not signed in as a user or because of a cookie error"
return bottle.template('add_review', add_var=add_var)
return bottle.redirect('view')
@bottle.route('/view')
def view_current_views():
reviews = r.get_all_reviews(db)
return bottle.template('view', reviews = reviews)
@bottle.route('/restaurant/:restaurant_name')
def view_restaurant_reviews(restaurant_name):
restaurant_reviews = r.get_reviews_by(db,
'restaurant_name', restaurant_name)
#4sq_api_query_link = "https://api.foursquare.com/v2/venues/search?v=20130311&client_id=JSM3WVVM1OTXSHTUALUK1VADIKD5TGS3IQT2H5CX40TC4M1V&client_secret=KZ1Q4UGUJZD21TLPMK3SJY1YBUCBHGQN2X5MLRKVXYV5YVVA&query=%s&intent=browse&ll=40.726576,-74.000645&radius=400" % (restaurant_name)
return bottle.template('restaurant_view', restaurant_reviews = restaurant_reviews, restaurant_name = restaurant_name)
@bottle.route('/settings')
def show_users_settings():
email = sign_up.get_email()
restaurant_reviews = r.get_reviews_by(db, 'user_id', email)
username = sign_up.get_username()
return bottle.template('settings', restaurant_reviews = restaurant_reviews, username = username, user_id = email)
@bottle.route('/change_username', method="POST")
def change_users_username():
username_to_change = bottle.request.forms.get('username')
user_id = bottle.request.forms.get('user_id')
if user_id != "anon":
manage_users.change_username(user_id, username_to_change)
return bottle.redirect('/settings')
@bottle.route('/users/:username')
def direct_to_user_id(username):
restaurant_review_by_username = r.get_reviews_by(db, 'user', username)
one_review = restaurant_review_by_username[0]
user_id = one_review.data['user_id']
return bottle.redirect('/user_id/'+user_id)
@bottle.route('/user_id/:user_id')
def view_users_reviews(user_id):
restaurant_reviews = r.get_reviews_by(db, 'user_id', user_id)
return bottle.template('user_view', user_id = user_id, restaurant_reviews = restaurant_reviews)
@bottle.route('/user_id/modify_post/:user_id', method='POST')
def remove_review(user_id):
id_to_remove = bottle.request.forms.get('review_to_remove')
id_to_edit = bottle.request.forms.get('review_to_edit')
if id_to_remove:
object_id = bson.objectid.ObjectId(id_to_remove)
db.reviews.remove({'_id': object_id})
return bottle.redirect('/settings')
@bottle.route('/static/:filename#.*#')
def server_static(filename):
#import pdb; pdb.set_trace()
return bottle.static_file(filename, root='static')
if __name__ == '__main__':
if os.environ.get('ENVIRONMENT') == 'PRODUCTION':
port = int(os.environ.get('PORT', 5000))
print "port = %d" % port
bottle.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))
else:
bottle.debug(True) #dev only, not for production
bottle.run(host='localhost', port=8081, reloader=True) #dev only