def to_metaweblog(self, application): # We're kind of throwing fieldnames at the wall and seeing what sticks, # MarsEdit expects different names in the responses to different API # calls. if self.status == 'publish': url = absolute(application.reverse_url('post', self.slug)) else: url = absolute(application.reverse_url('draft', self.slug)) rv = { 'title': self.title, # Note we're returning the original, not the display version 'description': self.original, 'link': url, 'permaLink': url, 'categories': [cat.to_metaweblog(application) for cat in self['categories']], 'mt_keywords': ','.join(self['tags']), 'dateCreated': self.local_date_created(application), 'date_created_gmt': self.date_created, 'postid': str(self.id), 'id': str(self.id), 'status': self.status, } if self.type == 'post': rv['post_id'] = str(self.id) rv['post_status'] = self.status elif self.type == 'page': rv['page_id'] = str(self.id) rv['page_status'] = self.status return rv
def get(self, slug=None): if slug: slug = slug.rstrip('/') if not slug: this_category = None else: # Get all the categories and search for one with the right slug, # instead of actually querying for the right category, since # get_categories() is cached. slug = slug.rstrip('/') for this_category in self.categories: if this_category.slug == slug: break else: raise tornado.web.HTTPError(404) title = opts.blog_name if this_category: title = '%s - Posts about %s' % (title, this_category.name) author = {'name': opts.author_display_name, 'email': opts.author_email} if this_category: feed_url = absolute( self.reverse_url('category-feed', this_category.slug)) else: feed_url = absolute(self.reverse_url('feed')) updated = max(max(p.mod, p.date_created) for p in self.posts) feed = AtomFeed( title=title, feed_url=feed_url, url=absolute(self.reverse_url('home')), author=author, updated=updated, # TODO: customizable icon, also a 'logo' kwarg icon=absolute(self.reverse_url('theme-static', '/theme/static/square96.png')), generator=('Motor-Blog', 'https://github.com/ajdavis/motor-blog', '0.1'), ) for post in self.posts: url = absolute(self.reverse_url('post', post.slug)) feed.add( title=post.title, content=post.body, content_type='html', summary=post.summary, author=author, url=url, id=url, published=post.date_created, updated=post.mod) self.set_header('Content-Type', 'application/atom+xml; charset=UTF-8') self.write(unicode(feed)) self.finish()
def to_wordpress(self, application): url = absolute(application.reverse_url('category', self.slug)) return { 'categoryId': str(self.id), 'categoryName': self.name, 'htmlUrl': url, 'rssUrl': url, }
def _closed(self, result, error): if error: self.result(xmlrpclib.Fault(500, str(error))) else: full_link = absolute( os.path.join(opts.base_url, 'media', self.mlink)) self.result({ 'file': self.name, 'url': full_link, 'type': self.media_type})
def metaWeblog_newMediaObject(self, blogid, user, password, struct): name = struct['name'] content = struct['bits'].data # xmlrpclib created a 'Binary' object content_type = struct['type'] mlink = yield self.store_image(name, content, content_type) full_link = absolute(os.path.join(opts.base_url, 'media', mlink)) self.result({'file': name, 'url': full_link, 'type': content_type})
def metaWeblog_newMediaObject(self, blogid, user, password, struct): name = struct['name'] content = struct['bits'].data # xmlrpclib created a 'Binary' object content_type = struct['type'] mlink = yield self.store_image(name, content, content_type) full_link = absolute( os.path.join(opts.base_url, 'media', mlink)) self.result({ 'file': name, 'url': full_link, 'type': content_type})
def metaWeblog_newMediaObject(self, blogid, user, password, struct): name = struct['name'] content = struct['bits'].data # xmlrpclib created a 'Binary' object content_type = struct['type'] if image.is_retina_filename(name): # Store a HiDPI version and a half-sized regular version _, width, height = yield motor.Op(self.store_image, name, content, content_type, opts.maxwidth * 2) regular_name = image.regular_from_retina(name) mlink, _, _ = yield motor.Op(self.store_image, regular_name, content, content_type, width / 2) else: mlink, _, _ = yield motor.Op(self.store_image, name, content, content_type, opts.maxwidth) full_link = absolute( os.path.join(opts.base_url, 'media', mlink)) self.result({ 'file': name, 'url': full_link, 'type': content_type})
def get(self, slug=None): if slug: slug = slug.rstrip('/') this_category = None categories = yield self.get_categories() if slug: # Get all the categories and search for one with the right slug, # instead of actually querying for the right category, since # get_categories() is cached. slug = slug.rstrip('/') for category in categories: if category.slug == slug: this_category = category break else: raise tornado.web.HTTPError(404) title = opts.blog_name if this_category: title = '%s - Posts about %s' % (title, this_category.name) author = {'name': opts.author_display_name, 'email': opts.author_email} if this_category: feed_url = absolute( self.reverse_url('category-feed', this_category.slug)) else: feed_url = absolute(self.reverse_url('feed')) posts_query = {'status': 'publish', 'type': 'post'} if slug: slug = slug.rstrip('/') posts_query['categories.slug'] = slug posts = yield self.get_posts( posts_query, {'summary': False, 'original': False}, [('pub_date', -1)], 0, 20) if posts: updated = max(max(p.mod, p.date_created) for p in posts) else: updated = datetime.datetime.now(tz=self.application.settings['tz']) icon = absolute( self.reverse_url('theme-static', '/theme/static/square96.png')) generator = ( 'Motor-Blog', 'https://github.com/ajdavis/motor-blog', '0.1') feed = AtomFeed( title=title, feed_url=feed_url, url=absolute(self.reverse_url('home')), author=author, updated=updated, # TODO: customizable icon, also a 'logo' kwarg icon=icon, generator=generator) for post in posts: url = absolute(self.reverse_url('post', post.slug)) tracking_pixel_url = ga_track_event_url(self.application, url) tracking_pixel = '<img src="%s" width="1px" height="1px">' \ % tracking_pixel_url feed.add( title=post.title, content=post.body + tracking_pixel, content_type='html', summary=post.summary, author=author, url=url, id=url, published=post.date_created, # Don't update 'updated' - it seems to make Planet Python # re-post my updated items, which is spammy. #updated=post.mod, updated=post.date_created, ) self.set_header('Content-Type', 'application/atom+xml; charset=UTF-8') self.write(unicode(feed)) self.finish()
def get(self, slug=None): if slug: slug = slug.rstrip('/') this_category = None if slug: # Get all the categories and search for one with the right slug, # instead of actually querying for the right category, since # get_categories() is cached. slug = slug.rstrip('/') for category in self.categories: if category.slug == slug: this_category = category break else: raise tornado.web.HTTPError(404) title = opts.blog_name if this_category: title = '%s - Posts about %s' % (title, this_category.name) author = {'name': opts.author_display_name, 'email': opts.author_email} if this_category: feed_url = absolute( self.reverse_url('category-feed', this_category.slug)) else: feed_url = absolute(self.reverse_url('feed')) if self.posts: updated = max(max(p.mod, p.date_created) for p in self.posts) else: updated = datetime.datetime.now(tz=self.application.settings['tz']) referer = self.request.headers.get('referer', '-') # (sic) feed = AtomFeed( title=title, feed_url=feed_url, url=absolute(self.reverse_url('home')), author=author, updated=updated, # TODO: customizable icon, also a 'logo' kwarg icon=absolute(self.reverse_url('theme-static', '/theme/static/square96.png')), generator=('Motor-Blog', 'https://github.com/ajdavis/motor-blog', '0.1'), ) for post in self.posts: url = absolute(self.reverse_url('post', post.slug)) body = post.body + '<img src="%s" width="1px" height="1px">' % ga_track_event_url( path=url, title=post.title, category_name=this_category.name if this_category else 'unknown', referer=referer ) feed.add( title=post.title, content=body, content_type='html', summary=post.summary, author=author, url=url, id=url, published=post.date_created, # Don't update 'updated' - it seems to make Planet Python re-post my updated items, # which is spammy. #updated=post.mod, updated=post.date_created, ) self.set_header('Content-Type', 'application/atom+xml; charset=UTF-8') self.write(unicode(feed)) self.finish()
def inserted(_id, error): if error: self.result(xmlrpclib.Fault(500, str(error))) else: full_link = absolute(os.path.join(opts.base_url, 'media', mlink)) self.result({'file': name, 'url': full_link, 'type': media_type})
def inserted(_id, error): if error: raise error full_link = absolute(os.path.join(opts.base_url, 'media', mlink)) self.result({'file': name, 'url': full_link, 'type': media_type})
def ga_track_event_url(application, path): return absolute( application.reverse_url('tracking-pixel', path))