Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import re
- import json
- import cgi, webapp2
- from google.appengine.ext import db
- from google.appengine.api import users
- major = 1
- minor = 0
- bugfix = 0
- class Category(db.Model):
- Name = db.StringProperty(required=True,multiline=False)
- class User(db.Model):
- Name = db.StringProperty(required=True,multiline=False)
- Level = db.IntegerProperty(default=1)
- Handle = db.UserProperty(required=True)
- class Post(db.Model):
- Author = db.IntegerProperty(required=True)
- Title = db.StringProperty(required=True,multiline=False)
- Content = db.StringProperty(required=True,multiline=True)
- Date = db.DateTimeProperty(auto_now_add=True)
- Tags = db.StringProperty(multiline=False)
- Cat = db.IntegerProperty(default=0)
- class Blog:
- isUser = re.compile(r'usr:\s*(.+)')
- isTitle = re.compile(r'title:\s*(.+)')
- isTag = re.compile(r'tag:\s*(.+)')
- isCat = re.compile(r'cat:\s*(.+)')
- def GetUser(self,usr):
- if isinstance(usr,str):
- return db.GglQuery("Select Users")
- else:
- return
- def Posts(self,context='news'):
- context = context.lower() #We want everything lower-case, to avoid annoyances.
- ret = [] #Declare an initial array
- if context == 'news': ret = Post.all().fetch(10)
- else:
- base_query = "Select Categories.Name, Posts.Title, Posts.Content, Posts.Author, Posts.Date, Posts.Tags where Categories.ID==Posts.Category "
- for case in context.split(r';'):
- match = self.isUser.match(case)
- if match is not None:
- ret.extend(post for post in db.GqlQuery(base_query+"and Posts.Author = :1",0) if post not in ret)
- continue
- match = self.isTitle.match(case)
- if match is not None:
- ret.extend(post for post in db.GqlQuery(base_query+"and Posts.Title like :1",match.group(1)) if post not in ret)
- continue
- match = self.isTag.match(case)
- if match is not None:
- ret.extend(post for post in db.GqlQuery(base_query+"and Posts.Tags like :1",match.group(1)) if post not in ret)
- continue
- match = self.isCat.match(case)
- if match is not None:
- ret.extend(post for post in db.GqlQuery(base_query+"and Categories.Name like :1",match.group(1)) if post not in ret)
- continue
- for post in ret:
- post.Author = post.Author.Name
- post.Content = cgi.escape(post.Content)
- return ret
- class Index(webapp2.RequestHandler):
- def get(self):
- self.response.headers['Content-Type'] = "text/plain"
- self.response.out.write("Home-page")
- class RegisterUser(webapp2.RequestHandler):
- def get(self):
- gUser = users.get_current_user()
- if gUser:
- self.response.headers['Content-Type'] = "text/plain"
- nName = self.request.get('name','')
- nLevel = int(self.request.get('lvl','1'))
- if nName == '': self.response.out.write("I need a name please. ._.")
- else:
- User(Name=nName,Level=nLevel,Handle=gUser).put()
- self.response.out.write("{} has registered as {}".format(nName, nLevel))
- else: self.redirect(users.create_login_url(self.request.uri))
- class SubmitPost(webapp2.RequestHandler):
- def get(self):
- self.response.headers['Content-Type'] = "text/plain"
- nName = self.request.get('name','invalid')
- nContent = self.request.get('content','invalid')
- nTags = self.request.get('tags','')
- nCat = self.request.get('cat',0)
- lUser = users.get_current_user()
- if lUser:
- pass
- else: self.redirect(users.create_login_url(self.request.uri))
- class Users(webapp2.RequestHandler):
- def get(self):
- self.response.headers['Content-Type'] = "text/plain"
- for user in User.all().fetch(100):
- self.response.out.write(user.Name+'\n')
- self.response.out.write(str(user.Level)+'\n')
- class Posts(webapp2.RequestHandler):
- def get(self):
- self.response.headers['Content-Type'] = "text/plain"
- blog = Blog()
- query = self.request.get('stuff','news')
- self.response.out.write( json.dumps( [post.__dict__ for post in blog.Posts( query)]))
- app = webapp2.WSGIApplication( [ ( '/posts', Posts), ('/register', RegisterUser), ('/users',Users), ( '/', Index)],debug=True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement