Advertisement
Tyler_Elric

py-mBlog.py

Jan 29th, 2012
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.84 KB | None | 0 0
  1. import re
  2. import json
  3. import cgi, webapp2
  4.  
  5. from google.appengine.ext import db
  6. from google.appengine.api import users
  7.  
  8. major = 1
  9. minor = 0
  10. bugfix = 0
  11.  
  12. class Category(db.Model):
  13.     Name = db.StringProperty(required=True,multiline=False)
  14.  
  15. class User(db.Model):
  16.     Name = db.StringProperty(required=True,multiline=False)
  17.     Level = db.IntegerProperty(default=1)
  18.     Handle = db.UserProperty(required=True)
  19.  
  20. class Post(db.Model):
  21.     Author = db.IntegerProperty(required=True)
  22.     Title = db.StringProperty(required=True,multiline=False)
  23.     Content = db.StringProperty(required=True,multiline=True)
  24.     Date = db.DateTimeProperty(auto_now_add=True)
  25.     Tags = db.StringProperty(multiline=False)
  26.     Cat = db.IntegerProperty(default=0)
  27.  
  28. class Blog:
  29.     isUser = re.compile(r'usr:\s*(.+)')
  30.     isTitle = re.compile(r'title:\s*(.+)')
  31.     isTag = re.compile(r'tag:\s*(.+)')
  32.     isCat = re.compile(r'cat:\s*(.+)')
  33.     def GetUser(self,usr):
  34.         if isinstance(usr,str):
  35.             return db.GglQuery("Select Users
  36.         else:
  37.             return
  38.     def Posts(self,context='news'):
  39.         context = context.lower() #We want everything lower-case, to avoid annoyances.
  40.         ret = [] #Declare an initial array
  41.         if context == 'news': ret = Post.all().fetch(10)
  42.         else:
  43.             base_query = "Select Categories.Name, Posts.Title, Posts.Content, Posts.Author, Posts.Date, Posts.Tags where Categories.ID==Posts.Category "
  44.             for case in context.split(r';'):
  45.                 match = self.isUser.match(case)
  46.                 if match is not None:
  47.                     ret.extend(post for post in db.GqlQuery(base_query+"and Posts.Author = :1",0) if post not in ret)
  48.                     continue
  49.                 match = self.isTitle.match(case)
  50.                 if match is not None:
  51.                     ret.extend(post for post in db.GqlQuery(base_query+"and Posts.Title like :1",match.group(1)) if post not in ret)
  52.                     continue
  53.                 match = self.isTag.match(case)
  54.                 if match is not None:
  55.                     ret.extend(post for post in db.GqlQuery(base_query+"and Posts.Tags like :1",match.group(1)) if post not in ret)
  56.                     continue
  57.                 match = self.isCat.match(case)
  58.                 if match is not None:
  59.                     ret.extend(post for post in db.GqlQuery(base_query+"and Categories.Name like :1",match.group(1)) if post not in ret)
  60.                     continue
  61.         for post in ret:
  62.             post.Author = post.Author.Name
  63.             post.Content = cgi.escape(post.Content)
  64.         return ret
  65.  
  66. class Index(webapp2.RequestHandler):
  67.     def get(self):
  68.         self.response.headers['Content-Type'] = "text/plain"
  69.         self.response.out.write("Home-page")
  70.  
  71. class RegisterUser(webapp2.RequestHandler):
  72.     def get(self):
  73.         gUser = users.get_current_user()
  74.         if gUser:
  75.             self.response.headers['Content-Type'] = "text/plain"
  76.             nName = self.request.get('name','')
  77.             nLevel = int(self.request.get('lvl','1'))
  78.             if nName == '': self.response.out.write("I need a name please. ._.")
  79.             else:
  80.                 User(Name=nName,Level=nLevel,Handle=gUser).put()
  81.                 self.response.out.write("{} has registered as {}".format(nName, nLevel))
  82.         else: self.redirect(users.create_login_url(self.request.uri))
  83.  
  84. class SubmitPost(webapp2.RequestHandler):
  85.     def get(self):
  86.         self.response.headers['Content-Type'] = "text/plain"
  87.         nName = self.request.get('name','invalid')
  88.         nContent = self.request.get('content','invalid')
  89.         nTags = self.request.get('tags','')
  90.         nCat = self.request.get('cat',0)
  91.         lUser = users.get_current_user()
  92.         if lUser:
  93.             pass
  94.         else: self.redirect(users.create_login_url(self.request.uri))
  95.  
  96. class Users(webapp2.RequestHandler):
  97.     def get(self):
  98.         self.response.headers['Content-Type'] = "text/plain"
  99.         for user in User.all().fetch(100):
  100.             self.response.out.write(user.Name+'\n')
  101.             self.response.out.write(str(user.Level)+'\n')
  102.  
  103. class Posts(webapp2.RequestHandler):
  104.     def get(self):
  105.         self.response.headers['Content-Type'] = "text/plain"
  106.         blog = Blog()
  107.         query = self.request.get('stuff','news')
  108.         self.response.out.write( json.dumps( [post.__dict__ for post in blog.Posts( query)]))
  109.  
  110. app = webapp2.WSGIApplication( [ ( '/posts', Posts), ('/register', RegisterUser), ('/users',Users), ( '/', Index)],debug=True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement