blob: c986f7e56b1f66f88c267e61628efb17cb8e3048 [file] [log] [blame]
Megha Joshi00bf0f02009-11-18 14:54:03 -08001#!/usr/bin/python2.5
2
3# Copyright (C) 2010 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License"); you may not
6# use this file except in compliance with the License. You may obtain a copy of
7# the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14# License for the specific language governing permissions and limitations under
15# the License.
16
17"""Defines Django forms for inserting/updating/viewing data
18 to/from SampleSyncAdapter datastore."""
19
20import cgi
21import datetime
22import os
23
24from google.appengine.ext import db
25from google.appengine.ext import webapp
26from google.appengine.ext.webapp import template
27from google.appengine.ext.db import djangoforms
28from model import datastore
29
30import wsgiref.handlers
31
32
33class UserForm(djangoforms.ModelForm):
34 """Represents django form for entering user info."""
35
36 class Meta:
37 model = datastore.User
38
39
40class UserInsertPage(webapp.RequestHandler):
41 """Inserts new users. GET presents a blank form. POST processes it."""
42
43 def get(self):
44 self.response.out.write('<html><body>'
45 '<form method="POST" '
46 'action="/add_user">'
47 '<table>')
48 # This generates our shopping list form and writes it in the response
49 self.response.out.write(UserForm())
50 self.response.out.write('</table>'
51 '<input type="submit">'
52 '</form></body></html>')
53
54 def post(self):
55 data = UserForm(data=self.request.POST)
56 if data.is_valid():
57 # Save the data, and redirect to the view page
58 entity = data.save(commit=False)
59 entity.put()
60 self.redirect('/users')
61 else:
62 # Reprint the form
63 self.response.out.write('<html><body>'
64 '<form method="POST" '
65 'action="/">'
66 '<table>')
67 self.response.out.write(data)
68 self.response.out.write('</table>'
69 '<input type="submit">'
70 '</form></body></html>')
71
72
73class UserEditPage(webapp.RequestHandler):
74 """Edits users. GET presents a form prefilled with user info
75 from datastore. POST processes it."""
76
77 def get(self):
78 id = int(self.request.get('user'))
79 user = datastore.User.get(db.Key.from_path('User', id))
80 self.response.out.write('<html><body>'
81 '<form method="POST" '
82 'action="/edit_user">'
83 '<table>')
84 # This generates our shopping list form and writes it in the response
85 self.response.out.write(UserForm(instance=user))
86 self.response.out.write('</table>'
87 '<input type="hidden" name="_id" value="%s">'
88 '<input type="submit">'
89 '</form></body></html>' % id)
90
91 def post(self):
92 id = int(self.request.get('_id'))
93 user = datastore.User.get(db.Key.from_path('User', id))
94 data = UserForm(data=self.request.POST, instance=user)
95 if data.is_valid():
96 # Save the data, and redirect to the view page
97 entity = data.save(commit=False)
98 entity.updated = datetime.datetime.utcnow()
99 entity.put()
100 self.redirect('/users')
101 else:
102 # Reprint the form
103 self.response.out.write('<html><body>'
104 '<form method="POST" '
105 'action="/edit_user">'
106 '<table>')
107 self.response.out.write(data)
108 self.response.out.write('</table>'
109 '<input type="hidden" name="_id" value="%s">'
110 '<input type="submit">'
111 '</form></body></html>' % id)
112
113
114class UsersListPage(webapp.RequestHandler):
115 """Lists all Users. In addition displays links for editing user info,
116 viewing user's friends and adding new users."""
117
118 def get(self):
119 users = datastore.User.all()
120 template_values = {
121 'users': users
122 }
123
124 path = os.path.join(os.path.dirname(__file__), 'templates', 'users.html')
125 self.response.out.write(template.render(path, template_values))
126
127
128class UserCredentialsForm(djangoforms.ModelForm):
129 """Represents django form for entering user's credentials."""
130
131 class Meta:
132 model = datastore.UserCredentials
133
134
135class UserCredentialsInsertPage(webapp.RequestHandler):
136 """Inserts user credentials. GET shows a blank form, POST processes it."""
137
138 def get(self):
139 self.response.out.write('<html><body>'
140 '<form method="POST" '
141 'action="/add_credentials">'
142 '<table>')
143 # This generates our shopping list form and writes it in the response
144 self.response.out.write(UserCredentialsForm())
145 self.response.out.write('</table>'
146 '<input type="submit">'
147 '</form></body></html>')
148
149 def post(self):
150 data = UserCredentialsForm(data=self.request.POST)
151 if data.is_valid():
152 # Save the data, and redirect to the view page
153 entity = data.save(commit=False)
154 entity.put()
155 self.redirect('/users')
156 else:
157 # Reprint the form
158 self.response.out.write('<html><body>'
159 '<form method="POST" '
160 'action="/add_credentials">'
161 '<table>')
162 self.response.out.write(data)
163 self.response.out.write('</table>'
164 '<input type="submit">'
165 '</form></body></html>')
166
167
168class UserFriendsForm(djangoforms.ModelForm):
169 """Represents django form for entering user's friends."""
170
171 class Meta:
172 model = datastore.UserFriends
173 exclude = ['deleted', 'username']
174
175
176class UserFriendsInsertPage(webapp.RequestHandler):
177 """Inserts user's new friends. GET shows a blank form, POST processes it."""
178
179 def get(self):
180 user = self.request.get('user')
181 self.response.out.write('<html><body>'
182 '<form method="POST" '
183 'action="/add_friend">'
184 '<table>')
185 # This generates our shopping list form and writes it in the response
186 self.response.out.write(UserFriendsForm())
187 self.response.out.write('</table>'
188 '<input type = hidden name = "user" value = "%s">'
189 '<input type="submit">'
190 '</form></body></html>' % user)
191
192 def post(self):
193 data = UserFriendsForm(data=self.request.POST)
194 if data.is_valid():
195 user = self.request.get('user')
196 # Save the data, and redirect to the view page
197 entity = data.save(commit=False)
198 entity.username = user
199 query = datastore.UserFriends.all()
200 query.filter('username = ', user)
201 query.filter('friend_handle = ', entity.friend_handle)
202 result = query.get()
203 if result:
204 result.deleted = False
205 result.updated = datetime.datetime.utcnow()
206 result.put()
207 else:
208 entity.deleted = False
209 entity.put()
210 self.redirect('/user_friends?user=' + user)
211 else:
212 # Reprint the form
213 self.response.out.write('<html><body>'
214 '<form method="POST" '
215 'action="/add_friend">'
216 '<table>')
217 self.response.out.write(data)
218 self.response.out.write('</table>'
219 '<input type="submit">'
220 '</form></body></html>')
221
222
223class UserFriendsListPage(webapp.RequestHandler):
224 """Lists all friends for a user. In addition displays links for removing
225 friends and adding new friends."""
226
227 def get(self):
228 user = self.request.get('user')
229 query = datastore.UserFriends.all()
230 query.filter('deleted = ', False)
231 query.filter('username = ', user)
232 friends = query.fetch(50)
233 template_values = {
234 'friends': friends,
235 'user': user
236 }
237 path = os.path.join(os.path.dirname(__file__),
238 'templates', 'view_friends.html')
239 self.response.out.write(template.render(path, template_values))
240
241
242class DeleteFriendPage(webapp.RequestHandler):
243 """Processes delete friend request."""
244
245 def get(self):
246 user = self.request.get('user')
247 friend = self.request.get('friend')
248 query = datastore.UserFriends.all()
249 query.filter('username =', user)
250 query.filter('friend_handle =', friend)
251 result = query.get()
252 result.deleted = True
253 result.updated = datetime.datetime.utcnow()
254 result.put()
255
256 self.redirect('/user_friends?user=' + user)
257
258
259def main():
260 application = webapp.WSGIApplication(
261 [('/add_user', UserInsertPage),
262 ('/users', UsersListPage),
263 ('/add_credentials', UserCredentialsInsertPage),
264 ('/add_friend', UserFriendsInsertPage),
265 ('/user_friends', UserFriendsListPage),
266 ('/delete_friend', DeleteFriendPage),
267 ('/edit_user', UserEditPage)
268 ],
269 debug=True)
270 wsgiref.handlers.CGIHandler().run(application)
271
272if __name__ == '__main__':
273 main()