def test_converts_each_entry_to_blogger_post_objects(self): new_posts = models.sync_blog_feed(feedparser.parse(self.raw_feed)) self.assertEqual(2, new_posts) # todo: test updated and published times... they're returned as a time struct post_one = models.BloggerPost.objects.get(post_id=self.post_id_one) self.assertEqual("tag:blogger.com,1999:blog-11111111", post_one.post_id) self.assertEqual("Post One", post_one.title) self.assertEqual("Aaron Madison", post_one.author) # in python3 feedparser is returning an img tag that closes </img> # django's assertHTMLEqual says that isn't valid, so changing the assertion self.assertIn("<h1>This is Post One</h1>", post_one.content) self.assertEqual("html", post_one.content_type) # self.assertEqual(datetime.datetime(2011,7,24,13,15,30), post_one.published) # self.assertEqual(datetime.datetime(2011,7,24,13,15,30), post_one.updated) self.assertEqual("example.com/edit/1", post_one.link_edit) self.assertEqual("example.com/self/1", post_one.link_self) self.assertEqual("example.com/alternate/1", post_one.link_alternate) self.assertEqual("http://one-image.jpg", post_one.first_image_url) post_two = models.BloggerPost.objects.get(post_id=self.post_id_two) self.assertEqual("tag:blogger.com,1999:blog-22222222", post_two.post_id) self.assertEqual("Post Two", post_two.title) self.assertEqual("Aaron Madison", post_two.author) self.assertIn("<h1>This is Post Two</h1>", post_two.content) self.assertEqual("html", post_two.content_type) # self.assertEqual(datetime.datetime(2011,7,24,13,15,30), post_two.published) # self.assertEqual(datetime.datetime(2011,7,24,13,15,30), post_two.updated) self.assertEqual("example.com/edit/2", post_two.link_edit) self.assertEqual("example.com/self/2", post_two.link_self) self.assertEqual("example.com/alternate/2", post_two.link_alternate) self.assertEqual("", post_two.first_image_url)
def post(self, request, *args, **kwargs): """ Handles Feed update from hub server. Updates when necessary and ignores bad requests. """ feed = feedparser.parse(request.body) feed_links = models.get_all_feed_links(feed.feed.links) subscription = models.HubbubSubscription.get_by_url_list(feed_links) if subscription: models.sync_blog_feed(feedparser.parse(request.body)) else: feed_url = models.get_feed_link(feed.feed.links, 'self') logging.warn("Discarding unknown feed: %s", feed_url) return http.HttpResponse(status=204)
def test_converts_each_entry_to_blogger_post_objects(self): new_posts = models.sync_blog_feed(feedparser.parse(self.raw_feed)) self.assertEqual(2, new_posts) #todo: test updated and published times... they're returned as a time struct post_one = models.BloggerPost.objects.get(post_id=self.post_id_one) self.assertEqual("tag:blogger.com,1999:blog-11111111", post_one.post_id) self.assertEqual("Post One", post_one.title) self.assertEqual("Aaron Madison", post_one.author) self.assertHTMLEqual("""<h1>This is Post One</h1> <img src="http://one-image.jpg" /> <p>and some content</p><img src="http://another-one-image.png" />""", post_one.content) self.assertEqual("html", post_one.content_type) # self.assertEqual(datetime.datetime(2011,7,24,13,15,30), post_one.published) # self.assertEqual(datetime.datetime(2011,7,24,13,15,30), post_one.updated) self.assertEqual("example.com/edit/1", post_one.link_edit) self.assertEqual("example.com/self/1", post_one.link_self) self.assertEqual("example.com/alternate/1", post_one.link_alternate) self.assertEqual("http://one-image.jpg", post_one.first_image_url) post_two = models.BloggerPost.objects.get(post_id=self.post_id_two) self.assertEqual("tag:blogger.com,1999:blog-22222222", post_two.post_id) self.assertEqual("Post Two", post_two.title) self.assertEqual("Aaron Madison", post_two.author) self.assertHTMLEqual("""<h1>This is Post Two</h1> <p>and some content</p>""", post_two.content) self.assertEqual("html", post_two.content_type) # self.assertEqual(datetime.datetime(2011,7,24,13,15,30), post_two.published) # self.assertEqual(datetime.datetime(2011,7,24,13,15,30), post_two.updated) self.assertEqual("example.com/edit/2", post_two.link_edit) self.assertEqual("example.com/self/2", post_two.link_self) self.assertEqual("example.com/alternate/2", post_two.link_alternate) self.assertEqual("", post_two.first_image_url)
def test_sync_blog_feed_updates_entries_when_they_already_exist(self): models.BloggerPost.objects.create( post_id=self.post_id_one, title="Old Title", published=datetime.datetime.now(), updated=datetime.datetime.now(), content="Old Post Content", ) self.assertEqual(1, models.BloggerPost.objects.all().count()) # start with one post new_posts = models.sync_blog_feed(feedparser.parse(self.raw_feed)) self.assertEqual(1, new_posts) self.assertEqual(2, models.BloggerPost.objects.all().count()) # only_added_one updated_post = models.BloggerPost.objects.get(post_id=self.post_id_one) self.assertEqual("Post One", updated_post.title) self.assertIn("<h1>This is Post One</h1>", updated_post.content)
def test_sync_blog_feed_updates_entries_when_they_already_exist(self): models.BloggerPost.objects.create( post_id=self.post_id_one, title="Old Title", published=datetime.datetime.now(), updated=datetime.datetime.now(), content="Old Post Content", ) self.assertEqual(1, models.BloggerPost.objects.all().count()) # start with one post new_posts = models.sync_blog_feed(feedparser.parse(self.raw_feed)) self.assertEqual(1, new_posts) self.assertEqual(2, models.BloggerPost.objects.all().count()) # only_added_one updated_post = models.BloggerPost.objects.get(post_id=self.post_id_one) self.assertEqual("Post One", updated_post.title) self.assertHTMLEqual("""<h1>This is Post One</h1> <img src="http://one-image.jpg" /> <p>and some content</p><img src="http://another-one-image.png" />""", updated_post.content)
def sync_subscriptions(modeladmin, request, queryset): new_posts = 0 for obj in queryset: new_posts += sync_blog_feed(feedparser.parse(obj.topic_url)) messages.success(request, "Synced {0} new posts successfully.".format(new_posts))
def handle(self, *args, **options): feed = feedparser.parse(config.blogger_feed_url) new_posts = sync_blog_feed(feed) sys.stdout.write('Synced %d new posts\n' % new_posts)