Guest User

Untitled

a guest
Sep 24th, 2018
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.06 KB | None | 0 0
  1. from google.appengine.ext import webapp
  2. from google.appengine.ext import db
  3. from google.appengine.ext.webapp.util import run_wsgi_app
  4. from models.Message import Message
  5. import jinja2
  6. import os
  7. import re
  8.  
  9. jinja_environment = jinja2.Environment(
  10.     loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))
  11.  
  12.  
  13. def authenticate(username):
  14.     return username in ['Alice', 'Bob']
  15.  
  16.  
  17. class Handler(webapp.RequestHandler):
  18.     def render(self, template, vals={}):
  19.         template = jinja_environment.get_template(template)
  20.         self.response.out.write(template.render(vals))
  21.  
  22.  
  23. class WelcomePage(Handler):
  24.     def get(self):
  25.         template_values = {'login_url' : '/login'}
  26.         self.render('templates/index.html', template_values)
  27.  
  28.  
  29. class LoginPage(Handler):
  30.     def get(self):
  31.         self.render('templates/login.html')
  32.  
  33.     def post(self):
  34.         username = self.request.get("username")
  35.         if authenticate(username):
  36.             self.redirect('/users/%s' % username)
  37.         else:
  38.             self.response.out.write("User doesn't exist. Login as Alice or Bob!")
  39.  
  40.  
  41. class UserPage(Handler):
  42.     def get(self):
  43.         user = re.search(r".+/users/(.+)", self.request.url).group(1)
  44.         template_values = {'user' : user,
  45.                            'inbox_link' : '/users/%s/messages?show=recived' % user}
  46.         self.render('templates/userpage.html', template_values)
  47.  
  48.  
  49. class Messages(Handler):
  50.     def get(self):
  51.         """Display specific message if message key is given in url
  52.            otherwise get show param and display inbox, outbox or
  53.            render form for new message"""
  54.         match  = re.search(r".+/users/(.+)/messages(/?)([0-9]*)", self.request.url)
  55.         user   = match.group(1)
  56.         msg_id = match.group(3)
  57.         show   = self.request.get('show')
  58.  
  59.         if msg_id:
  60.             msg_id = int(msg_id)
  61.             self.displayMessage(msg_id)
  62.         else:
  63.             if show == 'recived' or not show:
  64.                 self.showInbox(user)
  65.             elif show == 'sent':
  66.                 self.showOutbox(user)
  67.             elif show == 'new':
  68.                 self.showFormForNewMsg()
  69.             else:
  70.                 self.response.out.write("Error in Message.get()")
  71.  
  72.     def showInbox(self, user):
  73.         messages = list(db.GqlQuery("""SELECT * FROM Message
  74.                                   WHERE msg_to=:u
  75.                                   ORDER BY timestamp DESC""", u = user))
  76.         welcome  = "inbox"
  77.         self.displayMessages(messages, welcome, user)
  78.  
  79.     def showOutbox(self, user):
  80.         messages = list(db.GqlQuery("""SELECT * FROM Message
  81.                                   WHERE msg_from=:u
  82.                                   ORDER BY timestamp DESC""", u = user))
  83.         welcome = "outbox"
  84.         self.displayMessages(messages, welcome, user)
  85.        
  86.     def displayMessages(self, messages, welcome, user):
  87.         """Inbox and Outbox use the same template
  88.            hash other contains values for making link
  89.            from inbox to outbox and vice versa"""
  90.         if welcome == 'inbox':
  91.             other = { 'name' : 'outbox', 'get_param' : 'sent' }
  92.         else:
  93.             other = { 'name' : 'inbox',  'get_param' : 'recived' }
  94.         template_values = {'welcome' : welcome,
  95.                            'messages' : messages,
  96.                            'user' : user,
  97.                            'other' : other}
  98.         self.render('templates/displayMessages.html', template_values)
  99.  
  100.     def displayMessage(self, msg_id):
  101.         message = Message.get_by_id(msg_id)
  102.         template_values = { 'message' : message }
  103.         self.render('templates/displayMessage.html', template_values)
  104.  
  105.     def showFormForNewMsg(self):
  106.         self.render('templates/newMessage.html')
  107.  
  108.     def post(self):
  109.         msg_from = re.search(r".+/users/(.+)/messages", self.request.url).group(1)
  110.         msg_to   = self.request.get('msg_to')
  111.         title    = self.request.get('title')
  112.         message  = self.request.get('message')
  113.  
  114.         if msg_to and title and message:
  115.             msg = Message(msg_from = msg_from,
  116.                       msg_to   = msg_to,
  117.                       title    = title,
  118.                       message  = message)
  119.             msg.put()
  120.             self.redirect('/')
  121.         else:
  122.             self.response.out.write("Error in Messages.post()")
  123.  
  124.  
  125. msgapp = webapp.WSGIApplication([('/', WelcomePage),
  126.                      ('/login', LoginPage),
  127.                  (r'/users/[a-zA-Z0-9]+$', UserPage),
  128.                  (r'/users/[a-zA-Z0-9]+/messages.*', Messages)])
  129.  
  130.  
  131.  
  132.  
  133. def main():
  134.   run_wsgi_app(msgapp)
  135.  
  136. if __name__=="__main__":
  137.   main()
Add Comment
Please, Sign In to add comment