Skip to content

Instantly share code, notes, and snippets.

@emilepetrone
Created August 24, 2010 12:39
Show Gist options
  • Save emilepetrone/547486 to your computer and use it in GitHub Desktop.
Save emilepetrone/547486 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
#
# Copyright 2007 Google Inc.
#
# 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.
#
import wsgiref.handlers
import os
import models
import logging
from google.appengine.ext import db
from util.sessions import Session
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
def doRender(handler, tname='base/index.html', values={}):
temp = os.path.join(
os.path.dirname(__file__),
'templates/' + tname)
if not os.path.isfile(temp):
return False
#Make a copy of the dictionary
newval = dict(values)
newval['path'] = handler.request.path
handler.session = Session()
if 'username' in handler.session:
newval['username'] = handler.session['username']
outstr = template.render(temp, newval)
handler.response.out.write(outstr)
return True
class LoginHandler(webapp.RequestHandler):
def get(self):
doRender(self, 'loginscreen.html')
def post(self):
self.session = Session()
acct = self.request.get('account')
pw = self.request.get('password')
logging.info('Checking account='+acct+' pw='+pw)
self.session.delete_item('username')
self.session.delete_item('userkey')
if pw == '' or acct == '':
doRender(self,
'loginscreen.html',
{'error' : 'Please specify Acct and PW'})
return
#Check to see if data is correct
que = db.Query(models.User)
que = que.filter('account =',acct)
que = que.filter('password =',pw)
results = que.fetch(limit=1)
if len(results) > 0:
user = results[0]
self.session['userkey'] = user.key()
self.session['username'] = acct
doRender(self,'base/index.html', {})
else:
doRender(
self,
'loginscreen.html',
{'error' : 'Incorrect Password'})
class LogoutHandler(webapp.RequestHandler):
def get(self):
self.session = Session()
self.session.delete_item('username')
self.session.delete_item('userkey')
doRender(self, 'base/index.html')
class ApplyHandler(webapp.RequestHandler):
def get(self):
doRender(self, 'applyscreen.html')
def post(self):
self.session = Session()
name = self.request.get('name')
acct = self.request.get('account')
pw = self.request.get('password')
logging.info('Adding account='+acct)
if pw == '' or acct == '' or name == '':
doRender(
self,
'applyscreen.html',
{'error' : 'Please fill in all fields'})
return
#Check to see if user already exists
que = db.Query(models.User)
que = que.filter('account =', acct)
results = que.fetch(limit=1)
if len(results) > 0:
doRender(
self,
'applyscreen.html',
{'error' : 'Account Already Exists'})
return
#Create the User object and log the user in
newuser = models.User(name=name, account=acct, password=pw);
pkey = newuser.put();
self.session['username'] = acct
self.session['userkey'] = pkey
doRender(self,'base/index.html', { })
class MembersHandler(webapp.RequestHandler):
def get(self):
que = db.Query(models.User)
user_list = que.fetch(limit=100)
doRender(self, 'memberscreen.html', { 'user_list' : user_list })
class UrlHandler(webapp.RequestHandler):
def get(self):
doRender(self, 'base/index.html')
def post(self):
self.Session = Session()
if not 'userkey' in self.Session:
doRender(
self,
'',
{'error' : 'Please login'})
return
sturl = self.request.get('website')
if sturl == '':
doRender(
self,
'',
{'error' : 'Please give a site'})
return
logging.info('Adding website='+sturl)
#Create the URL object
newurl = models.URL(user=self.Session['userkey'], website=sturl);
newurl.put();
self.get();
doRender(self,'base/index.html', { })
class MainHandler(webapp.RequestHandler):
def get(self):
que = db.Query(models.URL)
url_list = que.fetch(limit=100)
path = self.request.path
if doRender(self,path):
return
doRender(self,'base/index.html', { 'url_list' : url_list })
def main():
application = webapp.WSGIApplication([
('/login', LoginHandler),
('/logout', LogoutHandler),
('/apply', ApplyHandler),
('/members', MembersHandler),
('/url', UrlHandler),
('/.*', MainHandler)], debug=True)
wsgiref.handlers.CGIHandler().run(application)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment