Ejemplo n.º 1
0
    def get(self, slug):
        slug = slug.rstrip('/')
        guest_access_token = self.get_argument('guest-access-token', None)
        postdoc = yield self.settings['db'].posts.find_one(
            {'slug': slug},
            {'summary': False, 'original': False})

        if not postdoc:
            raise tornado.web.HTTPError(404)

        post = Post(**postdoc)
        if post.status == 'publish':
            self.redirect(self.reverse_url('post', slug))
            return

        if guest_access_token:
            if not post.has_guest_access_token(ObjectId(guest_access_token)):
                raise tornado.web.HTTPError(401)
        elif not self.current_user:
            next_url = self.request.uri
            url = self.get_login_url() + "?" + urlencode({'next': next_url})
            self.redirect(url)
            return

        categories = yield self.get_categories()
        self.render(
            'draft.jade',
            post=post, prev=None, next=None, categories=categories)
Ejemplo n.º 2
0
    def _get_post(self, postid):
        postdoc = yield self.settings['db'].posts.find_one(ObjectId(postid))

        if not postdoc:
            self.result(xmlrpclib.Fault(404, "Not found"))
        else:
            post = Post(**postdoc)
            self.result(post.to_metaweblog(self.application))
Ejemplo n.º 3
0
    def _new_post(self, user, password, struct, type):
        new_post = Post.from_metaweblog(struct, type)
        if new_post.status == 'publish':
            new_post.pub_date = datetime.datetime.utcnow()

        _id = yield self.settings['db'].posts.insert(new_post.to_python())

        self.result(str(_id))
        cache.event('post_created')
Ejemplo n.º 4
0
    def _edit_post(self, postid, struct, post_type):
        new_post = Post.from_metaweblog(struct, post_type, is_edit=True)
        db = self.settings['db']

        old_post_doc = yield db.posts.find_one(ObjectId(postid))

        if not old_post_doc:
            self.result(xmlrpclib.Fault(404, "Not found"))
        else:
            old_post = Post(**old_post_doc)
            if not old_post.pub_date and new_post.status == 'publish':
                new_post.pub_date = datetime.datetime.utcnow()

            new_post.guest_access_tokens = old_post.guest_access_tokens
            update_result = yield db.posts.update(
                {'_id': old_post_doc['_id']},
                {'$set': new_post.to_python()})  # set fields to new values

            if update_result['n'] != 1:
                self.result(xmlrpclib.Fault(404, "Not found"))
            else:
                # If link changes, add redirect from old
                if (old_post.slug != new_post.slug
                        and old_post['status'] == 'publish'):
                    redirect_post = Post(
                        redirect=new_post.slug,
                        slug=old_post.slug,
                        status='publish',
                        type='redirect',
                        mod=datetime.datetime.utcnow())

                    yield db.posts.insert(redirect_post.to_python())

                # Done
                self.result(True)
                cache.event('post_changed')