mirror of
https://github.com/progval/Limnoria.git
synced 2025-04-25 20:41:18 -05:00
Add --random flag for 'rss' command
This commit is contained in:
parent
941d3121eb
commit
993cb2355c
@ -36,6 +36,7 @@ import json
|
|||||||
import time
|
import time
|
||||||
import types
|
import types
|
||||||
import string
|
import string
|
||||||
|
import random
|
||||||
import socket
|
import socket
|
||||||
import threading
|
import threading
|
||||||
import feedparser
|
import feedparser
|
||||||
@ -170,6 +171,9 @@ def sort_feed_items(items, order):
|
|||||||
"""Return feed items, sorted according to sortFeedItems."""
|
"""Return feed items, sorted according to sortFeedItems."""
|
||||||
if order == 'asInFeed':
|
if order == 'asInFeed':
|
||||||
return items
|
return items
|
||||||
|
elif order == 'random':
|
||||||
|
random.shuffle(items)
|
||||||
|
return items
|
||||||
(key, reverse) = _sort_arguments(order)
|
(key, reverse) = _sort_arguments(order)
|
||||||
try:
|
try:
|
||||||
sitems = sorted(items, key=key, reverse=reverse)
|
sitems = sorted(items, key=key, reverse=reverse)
|
||||||
@ -695,11 +699,12 @@ class RSS(callbacks.Plugin):
|
|||||||
channels = wrap(channels, ['feedName'])
|
channels = wrap(channels, ['feedName'])
|
||||||
|
|
||||||
@internationalizeDocstring
|
@internationalizeDocstring
|
||||||
def rss(self, irc, msg, args, url, n):
|
def rss(self, irc, msg, args, optlist, url, n):
|
||||||
"""<name|url> [<number of headlines>]
|
"""[--random] <name|url> [<number of headlines>]
|
||||||
|
|
||||||
Gets the title components of the given RSS feed.
|
Gets the title components of the given RSS feed.
|
||||||
If <number of headlines> is given, return only that many headlines.
|
If <number of headlines> is given, return only that many headlines.
|
||||||
|
Use --random flag for random sorting of entries.
|
||||||
"""
|
"""
|
||||||
self.log.debug('Fetching %u', url)
|
self.log.debug('Fetching %u', url)
|
||||||
try:
|
try:
|
||||||
@ -719,17 +724,22 @@ class RSS(callbacks.Plugin):
|
|||||||
s += str(feed.last_exception)
|
s += str(feed.last_exception)
|
||||||
irc.error(s)
|
irc.error(s)
|
||||||
return
|
return
|
||||||
n = n or self.registryValue('defaultNumberOfHeadlines', channel, irc.network)
|
|
||||||
entries = list(filter(lambda e:self.should_send_entry(irc.network, channel, e),
|
entries = list(filter(lambda e:self.should_send_entry(irc.network, channel, e),
|
||||||
feed.entries))
|
feed.entries))
|
||||||
entries = sort_feed_items(entries, 'newestFirst')
|
order = 'newestFirst'
|
||||||
|
if 'random' in (k for k,v in optlist):
|
||||||
|
order = 'random'
|
||||||
|
entries = sort_feed_items(entries, order)
|
||||||
|
n = n or self.registryValue('defaultNumberOfHeadlines', channel, irc.network)
|
||||||
entries = entries[:n]
|
entries = entries[:n]
|
||||||
entries = sort_feed_items(entries, self.registryValue('sortFeedItems'))
|
entries = sort_feed_items(entries, self.registryValue('sortFeedItems'))
|
||||||
headlines = map(lambda e:self.format_entry(irc.network, channel, feed, e, False),
|
headlines = map(lambda e:self.format_entry(irc.network, channel, feed, e, False),
|
||||||
entries)
|
entries)
|
||||||
sep = self.registryValue('headlineSeparator', channel, irc.network)
|
sep = self.registryValue('headlineSeparator', channel, irc.network)
|
||||||
irc.replies(headlines, joiner=sep)
|
irc.replies(headlines, joiner=sep)
|
||||||
rss = wrap(rss, [first('url', 'feedName'), additional('int')])
|
rss = wrap(rss, [getopts({ 'random': '', }),
|
||||||
|
first('url', 'feedName'),
|
||||||
|
additional('int')])
|
||||||
|
|
||||||
@internationalizeDocstring
|
@internationalizeDocstring
|
||||||
def info(self, irc, msg, args, url):
|
def info(self, irc, msg, args, url):
|
||||||
|
@ -571,6 +571,12 @@ class RSSTestCase(ChannelPluginTestCase):
|
|||||||
m = self.assertNotError('rss %s 2' % url)
|
m = self.assertNotError('rss %s 2' % url)
|
||||||
self.assertEqual(m.args[1].count(' | '), 1)
|
self.assertEqual(m.args[1].count(' | '), 1)
|
||||||
|
|
||||||
|
def testRssRandom(self):
|
||||||
|
timeFastForward(1.1)
|
||||||
|
self.assertNotError('rss --random %s' % url)
|
||||||
|
m = self.assertNotError('rss --random %s 2' % url)
|
||||||
|
self.assertEqual(m.args[1].count(' | '), 1)
|
||||||
|
|
||||||
def testRssAdd(self):
|
def testRssAdd(self):
|
||||||
timeFastForward(1.1)
|
timeFastForward(1.1)
|
||||||
self.assertNotError('rss add advogato %s' % url)
|
self.assertNotError('rss add advogato %s' % url)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user