#!/usr/bin/python2.5 # Copyright (C) 2010 The Android Open Source Project # # Licensed 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. """Defines Django forms for inserting/updating/viewing data to/from SampleSyncAdapter datastore.""" import cgi import datetime import os from google.appengine.ext import db from google.appengine.ext import webapp from google.appengine.ext.webapp import template from google.appengine.ext.db import djangoforms from model import datastore import wsgiref.handlers class UserForm(djangoforms.ModelForm): """Represents django form for entering user info.""" class Meta: model = datastore.User class UserInsertPage(webapp.RequestHandler): """Inserts new users. GET presents a blank form. POST processes it.""" def get(self): self.response.out.write('
' '') def post(self): data = UserForm(data=self.request.POST) if data.is_valid(): # Save the data, and redirect to the view page entity = data.save(commit=False) entity.put() self.redirect('/users') else: # Reprint the form self.response.out.write('' '') class UserEditPage(webapp.RequestHandler): """Edits users. GET presents a form prefilled with user info from datastore. POST processes it.""" def get(self): id = int(self.request.get('user')) user = datastore.User.get(db.Key.from_path('User', id)) self.response.out.write('' '' % id) def post(self): id = int(self.request.get('_id')) user = datastore.User.get(db.Key.from_path('User', id)) data = UserForm(data=self.request.POST, instance=user) if data.is_valid(): # Save the data, and redirect to the view page entity = data.save(commit=False) entity.updated = datetime.datetime.utcnow() entity.put() self.redirect('/users') else: # Reprint the form self.response.out.write('' '' % id) class UsersListPage(webapp.RequestHandler): """Lists all Users. In addition displays links for editing user info, viewing user's friends and adding new users.""" def get(self): users = datastore.User.all() template_values = { 'users': users } path = os.path.join(os.path.dirname(__file__), 'templates', 'users.html') self.response.out.write(template.render(path, template_values)) class UserCredentialsForm(djangoforms.ModelForm): """Represents django form for entering user's credentials.""" class Meta: model = datastore.UserCredentials class UserCredentialsInsertPage(webapp.RequestHandler): """Inserts user credentials. GET shows a blank form, POST processes it.""" def get(self): self.response.out.write('' '') def post(self): data = UserCredentialsForm(data=self.request.POST) if data.is_valid(): # Save the data, and redirect to the view page entity = data.save(commit=False) entity.put() self.redirect('/users') else: # Reprint the form self.response.out.write('' '') class UserFriendsForm(djangoforms.ModelForm): """Represents django form for entering user's friends.""" class Meta: model = datastore.UserFriends exclude = ['deleted', 'username'] class UserFriendsInsertPage(webapp.RequestHandler): """Inserts user's new friends. GET shows a blank form, POST processes it.""" def get(self): user = self.request.get('user') self.response.out.write('' '' % user) def post(self): data = UserFriendsForm(data=self.request.POST) if data.is_valid(): user = self.request.get('user') # Save the data, and redirect to the view page entity = data.save(commit=False) entity.username = user query = datastore.UserFriends.all() query.filter('username = ', user) query.filter('friend_handle = ', entity.friend_handle) result = query.get() if result: result.deleted = False result.updated = datetime.datetime.utcnow() result.put() else: entity.deleted = False entity.put() self.redirect('/user_friends?user=' + user) else: # Reprint the form self.response.out.write('' '') class UserFriendsListPage(webapp.RequestHandler): """Lists all friends for a user. In addition displays links for removing friends and adding new friends.""" def get(self): user = self.request.get('user') query = datastore.UserFriends.all() query.filter('deleted = ', False) query.filter('username = ', user) friends = query.fetch(50) template_values = { 'friends': friends, 'user': user } path = os.path.join(os.path.dirname(__file__), 'templates', 'view_friends.html') self.response.out.write(template.render(path, template_values)) class DeleteFriendPage(webapp.RequestHandler): """Processes delete friend request.""" def get(self): user = self.request.get('user') friend = self.request.get('friend') query = datastore.UserFriends.all() query.filter('username =', user) query.filter('friend_handle =', friend) result = query.get() result.deleted = True result.updated = datetime.datetime.utcnow() result.put() self.redirect('/user_friends?user=' + user) def main(): application = webapp.WSGIApplication( [('/add_user', UserInsertPage), ('/users', UsersListPage), ('/add_credentials', UserCredentialsInsertPage), ('/add_friend', UserFriendsInsertPage), ('/user_friends', UserFriendsListPage), ('/delete_friend', DeleteFriendPage), ('/edit_user', UserEditPage) ], debug=True) wsgiref.handlers.CGIHandler().run(application) if __name__ == '__main__': main()