def testFindFeedsToCheckMoreHoursThanFeeds(self): feeds = [ { 'name': 'Test 1', 'last_checked': datetime(2017, 5, 6, 19, 7, 33) }, { 'name': 'Test 2', 'last_checked': datetime(2017, 5, 5, 19, 6, 9) }, { 'name': 'Test 3', 'last_checked': datetime(2017, 5, 4, 18, 23, 56) } ] for feed_data in feeds: feed = Feed(name = feed_data['name'], last_checked = feed_data['last_checked'], parent = root_key()) feed.put() working_date = datetime(2017, 5, 6, 19, 45, 0) feeds = feed_utils.find_feeds_to_check(working_date) # there are 4 hours left in the day so only 1 feed will be returned self.assertEqual(1, len(feeds)) self.assertEqual("Test 3", feeds[0].name)
def test_get_with_permanent_redirect(self): # Create a dummy feed with a last_checked date well in the past last_checked = datetime(2013, 9, 21, 10, 0, 0, 0) date_of_last_entry = datetime(2013, 9, 20, 8, 45, 0, 0) feed = Feed(name = "Test Feed1", last_checked = last_checked, date_of_last_entry = date_of_last_entry, url = './test-feeds/test-rss.xml', parent = root_key()) feed.put() # Stub out the publish_entry function so we don't have to deal with # the GAE mail API def _publish_entry(feed_title, entry, recipent_address): pass feed_utils.publish_entry = _publish_entry # Create a dummy function to return the feeds to check def _find_feeds_to_check(working_date = datetime.now()): return [feed] feed_utils.find_feeds_to_check = _find_feeds_to_check # Replace feedparser.parse with our own version that sets the status # code to 301 and the href to a new URL def _parse(url): parsed_feed = self.orig_parse_func(url) parsed_feed['status'] = 301 parsed_feed['href'] = 'http://def.com' return parsed_feed feedparser.parse = _parse response = self.testapp.get('/check_feeds') # check the feed's URL has been updated self.assertEquals(feed.url, 'http://def.com')
def create_feed(user,board_id,title,link,description,actions,public_board,get_all,token): """ Creates a feed and attaches it to a user object """ user = get_user(user) q = Feed.query( Feed.channel_title==title, Feed.channel_link==link, Feed.channel_description==description, Feed.feed_name==title, Feed.token==token, Feed.actions.IN(actions), Feed.board_id==board_id, Feed.public_board==public_board) feed = q.get() if feed is None: feed = Feed( channel_title=title, channel_link=link, channel_description=description, feed_name=title, token=token, actions=actions, board_id=board_id, public_board=public_board, get_all=get_all,user=user.key) feed.put() if user.feeds: if feed.key not in user.feeds: user.feeds.append(feed.key) user.put() else: user.feeds = [feed.key] user.put() return create_url(feed.key.id())
def post(self): #表单字段: url, author, title, content, allow_sendto_kindle f = Feed() f.url = self.request.get('tUrl') f.title = self.request.get('tTitle') f.put(); # save return self.redirect('/feed')
def add_feed(): title = request.form.get('title') url = request.form.get('url') delay = request.form.get('delay') feed = Feed() feed.url = url feed.title = title feed.delay = delay feed.latest_fetch = datetime.datetime.now() feed.put() flash(u'KeyWord add successfully~', 'success') flush_feed_cache() return redirect(url_for("admin"))
def test_check_feed_with_probem(self): last_checked = datetime(2000, 1, 1) date_of_last_entry = datetime(2000, 1, 1) feed_url = 'http://x.y.z' feed = Feed(name = "Test Feed", last_checked = last_checked, date_of_last_entry = date_of_last_entry, url = feed_url, parent = root_key()) feed.put() # Replace feedparser.parse with our own version that sets the status # code to 500 to simulate a server side error def _parse(url): parsed_feed = FeedParserDict(status = 500, bozo = False) return parsed_feed feedparser.parse = _parse reported_title = [0] reported_message = [0] reported_recipient = [0] orig_report_error = feed_utils.report_error def _report_error(title, message, recipent_address): reported_title[0] = title reported_message[0] = message reported_recipient[0] = recipent_address orig_report_error(title, message, recipent_address) feed_utils.report_error = _report_error # run the method under test # set logging to CRITICAL so-as not to print exception generated by # the test try: logging.getLogger().setLevel(logging.CRITICAL) response = self.testapp.get('/check_feeds') self.assertEquals(reported_title[0], feed.name) self.assertTrue('returned HTTP code 500' in reported_message[0]) self.assertEquals(reported_recipient[0], '*****@*****.**') #self.fail("Should have raised an exception as server returned 500") finally: logging.getLogger().setLevel(logging.ERROR) # there should be one email message describing the problem messages = self.mail_stub.get_sent_messages() self.assertEquals(1, len(messages)) self.assertTrue("URL '%s' returned HTTP code 500" % feed_url in messages[0].body.payload) # check the feed's last_checked date was updated self.assertNotEqual(feed.last_checked, last_checked)
def testFindFeedsToCheckNoHoursLeftInDay(self): feeds = [ { 'name': 'Test 1', 'last_checked': datetime(2017, 5, 6, 19, 7, 33) } ] for feed_data in feeds: feed = Feed(name = feed_data['name'], last_checked = feed_data['last_checked'], parent = root_key()) feed.put() working_date = datetime.now().replace(hour=23, minute=59, second=59) feeds = feed_utils.find_feeds_to_check(working_date) self.assertEqual(1, len(feeds)) self.assertEqual("Test 1", feeds[0].name)
def test_get(self): # Create a dummy feed with a last_checked date well in the past last_checked = datetime(2013, 9, 21, 10, 0, 0, 0) date_of_last_entry = datetime(2013, 9, 20, 8, 45, 0, 0) feed = Feed(name = "Test Feed1", last_checked = last_checked, date_of_last_entry = date_of_last_entry, url = './test-feeds/test-rss.xml', parent = root_key()) feed.put() # Create a dummy function to capture calls to publish_entry publish_entry_called = [False] def _publish_entry(feed_title, entry, recipent_address): publish_entry_called[0] = True feed_utils.publish_entry = _publish_entry # Create a dummy function to return the feeds to check def _find_feeds_to_check(working_date = datetime.now()): return [feed] feed_utils.find_feeds_to_check = _find_feeds_to_check # Replace feedparser.parse with our own version that sets the status # code to 200 and the href to a new URL def _parse(url): parsed_feed = self.orig_parse_func(url) parsed_feed['status'] = 200 return parsed_feed feedparser.parse = _parse # call the method under test response = self.testapp.get('/check_feeds') # check the publish_entry method was called self.assertTrue(publish_entry_called[0], "publish_entry function not called") # check the feed's last_checked date was updated self.assertNotEquals(feed.last_checked, last_checked, "last_checked not updated")
def testFindFeedsToCheckThreeHoursSixFeeds(self): feeds = [ { 'name': 'Test 1', 'last_checked': datetime(2017, 5, 6, 19, 7, 33) }, { 'name': 'Test 2', 'last_checked': datetime(2017, 5, 5, 19, 6, 9) }, { 'name': 'Test 3', 'last_checked': datetime(2017, 5, 2, 18, 23, 56) }, { 'name': 'Test 4', 'last_checked': datetime(2017, 5, 3, 18, 23, 56) }, { 'name': 'Test 5', 'last_checked': datetime(2017, 5, 1, 18, 23, 56) }, { 'name': 'Test 6', 'last_checked': datetime(2017, 5, 4, 18, 23, 56) } ] for feed_data in feeds: feed = Feed(name = feed_data['name'], last_checked = feed_data['last_checked'], parent = root_key()) feed.put() working_date = datetime(2017, 5, 7, 20, 45, 0) feeds = feed_utils.find_feeds_to_check(working_date) self.assertEqual(2, len(feeds)) self.assertEqual("Test 5", feeds[0].name) self.assertEqual("Test 3", feeds[1].name)
def init_gae(): f = Feed() f.url = 'http://money.163.com/special/00252EQ2/yaowenrss.xml' f.title = '要闻综合-网易财经' f.put()