Esempio n. 1
0
    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))
Esempio n. 2
0
    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) )