| 1 | import cgi |
|---|
| 2 | |
|---|
| 3 | import wsgiref.handlers |
|---|
| 4 | |
|---|
| 5 | from google.appengine.api import users |
|---|
| 6 | from google.appengine.ext import webapp |
|---|
| 7 | from google.appengine.ext import db |
|---|
| 8 | |
|---|
| 9 | from google.appengine.ext.webapp import template |
|---|
| 10 | |
|---|
| 11 | from utils import is_pangram, strip_tags, bare_pangram |
|---|
| 12 | |
|---|
| 13 | class 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 | |
|---|
| 21 | class 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 | |
|---|
| 34 | class 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 | |
|---|
| 41 | class 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 | |
|---|
| 68 | def 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 | |
|---|
| 77 | if __name__ == "__main__": |
|---|
| 78 | main() |
|---|