root/gapp/pangramming/pangramming.py

Revision 7cdcb8409bf6c806d19d3c1816a27e8eb22cff9a, 2.2 kB (checked in by Antonio Cavedoni <antonio@…>, 8 months ago)

Adding Google App Engine version (testing toy)

  • Property mode set to 100644
Line 
1import cgi
2
3import wsgiref.handlers
4
5from google.appengine.api import users
6from google.appengine.ext import webapp
7from google.appengine.ext import db
8
9from google.appengine.ext.webapp import template
10
11from utils import is_pangram, strip_tags, bare_pangram
12
13class Pangram(db.Model):
14    id = db.IntegerProperty()
15    content = db.StringProperty()
16    bare_content = db.StringProperty()
17    length = db.IntegerProperty()
18    author = db.StringProperty()
19    created = db.DateTimeProperty(auto_now_add=True)
20
21class MainPage(webapp.RequestHandler):
22    def get(self):
23        user = users.get_current_user()
24        if not user: 
25            self.redirect(users.create_login_url(self.request.uri))
26            return 
27
28        pangrams = Pangram.all().order('-created')[:10]
29        self.response.out.write(
30            template.render('templates/pangram/home.html', 
31                            {'pangrams': pangrams,
32                             'user': user}))
33
34class DetailPage(webapp.RequestHandler):
35    def get(self, id):
36        pangram = Pangram.get_by_id(int(id))
37        self.response.out.write(
38            template.render('templates/pangram/detail.html', 
39                            {'pangram': pangram}))
40
41class SavePage(webapp.RequestHandler):
42    def post(self):
43        pangram = self.request.get('pangram')
44        author = self.request.get('author')
45
46        if not author:
47            raise RuntimeError('No author, WTF?')
48
49        author = strip_tags(author)
50
51        if is_pangram(pangram):
52            p = Pangram()
53            try:
54                latest_pangram = Pangram.all().order('-id')[0]
55                p.id = latest_pangram.id + 1
56            except IndexError:
57                p.id = 1
58
59            p.content, p.author = pangram, author
60            p.bare_content = bare_pangram(pangram)
61            p.length = len(p.bare_content)
62            p.put()
63            self.redirect('/?saved')
64        else:
65            self.response.out.write(
66                'Sorry, your pangram is not valid.')
67
68def main():
69    application = webapp.WSGIApplication(
70        [('/', MainPage),
71         ('/save/', SavePage),
72         ('/(?P<id>\d+)/', DetailPage),
73         ],
74        debug=True)
75    wsgiref.handlers.CGIHandler().run(application)
76
77if __name__ == "__main__":
78    main()
Note: See TracBrowser for help on using the browser.