def post(self): '''Handle post requests to create / edit blog posts''' new = self.get_argument('new', False) title = self.get_argument('title', None) text = self.get_argument('text', None) slug = self.get_argument('slug', None) tags = self.get_argument('tags', None).lower() if new: if not text: self.redirect("/blog/new?title=" +tornado.escape.url_escape(title or "") +"&tags="+tornado.escape.url_escape(tags or "") +"&text_missing=true") return elif not title: self.redirect("/blog/new?text=" +tornado.escape.url_escape(text or "") +"&tags="+tornado.escape.url_escape(tags or "") +"&title_missing=true") return else: slug = slugify( title ) # creates something to be used as 'id' and part of the url for the post else: # edit post if not slug or slug=="undefined": raise tornado.web.HTTPError(400, "Post field slug missing") if not text: self.redirect("/blog/edit?title=" +tornado.escape.url_escape(title or "") +"&slug="+slug +"&tags="+tornado.escape.url_escape(tags or "") +"&text_missing=true") return elif not title: self.redirect("/blog/new?text=" +tornado.escape.url_escape(text or "") +"&slug="+slug +"&tags="+tornado.escape.url_escape(tags or "") +"&title_missing=true") return update = {} pubsubData = {} newSlug = slug if title: update['title'] = title if new or self.get_argument('change_slug', False): # change_slug is an extra option because you probably don't want to do this # by default as it breaks external links update['slug'] = slugify( title ) newSlug = update['slug'] pubsubData['title'] = title if text: update['text'] = text pubsubData['summary'] = excerpt( text ) if tags: update['tags'] = tags.split(" ") pubsubData['author'] = { 'name': self.settings["author_name"], 'email': self.settings["author_email"]} pubsubData['updated'] = datetime.datetime.utcnow().isoformat() + "Z" pubsubData['id'] = pubsubData['link'] = "http://%s/blog/%s"%(self.settings["domain"], newSlug) publish("blog", pubsubData, self.settings) # publish through xmpp pubsub db = self.settings["db"] if new: update['date'] = datetime.datetime.utcnow() db.posts.insert( update, callback=lambda response, error: self._on_edit(response, error, slug=slug)) else: db.posts.update( {'slug': slug}, { '$set': update }, callback=lambda response, error: self._on_edit(response, error, slug=newSlug))
def post(self, page): '''Handle post requests for create / edit / delete functions. Argument: string page ''' new = page == "new" # create new page? title = self.get_argument('title', None) text = self.get_argument('text', None) name = self.get_argument('name', None) if new: if not name: self.redirect( "/new?name_missing=true&title=" +tornado.escape.url_escape(title or "") +"&text="+ tornado.escape.url_escape(text or "") +"&new=true") if not title: self.redirect( "/new?title_missing=true&name=" +tornado.escape.url_escape(name or "") +"&text="+tornado.escape.url_escape(text or "") +"&new=true") if not text: self.redirect( "/new?text_missing=true&name=" +tornado.escape.url_escape(name or "") +"&title="+tornado.escape.url_escape(title or "") +"&new=true") pubsubData = {} pubsubData['title'] = title pubsubData['summary'] = excerpt( text ) pubsubData['author'] = { 'name': self.settings["author_name"], 'email': self.settings["author_email"]} pubsubData['updated'] = datetime.datetime.utcnow().isoformat() + "Z" pubsubData['id'] = pubsubData['link'] = "http://%s/%s"%(self.settings["domain"], name) publish("pages", pubsubData, self.settings) # publish through xmpp pubsub update = { "name": name, "title": title, "text": text } db = self.settings['db'] db.pages.insert( update, callback=lambda response, error: self._on_post( response, error, name=name) ) # lambda used as way to specify callback with arguments # Database callback to _on_post else: if not name: self.redirect( "/"+page+"?name_missing=true&title=" +tornado.escape.url_escape(title or "") +"&text="+ tornado.escape.url_escape(text or "") +"&edit=true") if not title: self.redirect( "/"+page*"?title_missing=true&name=" +tornado.escape.url_escape(name or "") +"&text="+tornado.escape.url_escape(text or "") +"&edit=true") if not text: self.redirect( "/"+page+"?text_missing=true&name=" +tornado.escape.url_escape(name or "") +"&title="+tornado.escape.url_escape(title or "") +"&edit=true") pubsubData = {} pubsubData['title'] = title pubsubData['summary'] = excerpt( text ) pubsubData['author'] = { 'name': self.settings["author_name"], 'email': self.settings["author_email"]} pubsubData['updated'] = datetime.datetime.utcnow().isoformat() + "Z" pubsubData['id'] = pubsubData['link'] = "http://%s/%s"%(self.settings["domain"], name) publish("pages", pubsubData, self.settings) # publish through xmpp pubsub update = { "name": name, "title": title, "text": text } db = self.settings['db'] db.pages.update( {'name': page}, { '$set': update}, callback=lambda response, error: self._on_post( response, error, name=name) )