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)
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))
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')
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')