RSS: Make feed commands work.

This commit is contained in:
Valentin Lorentz 2014-07-31 18:56:52 +02:00
parent 219c47d1c8
commit 0a6a4991a5

View File

@ -59,6 +59,10 @@ class Feed:
__slots__ = ('url', 'name', 'data', 'last_update', 'entries', __slots__ = ('url', 'name', 'data', 'last_update', 'entries',
'lock', 'announced_entries') 'lock', 'announced_entries')
def __init__(self, name, url, plugin_is_loading=False): def __init__(self, name, url, plugin_is_loading=False):
assert name, name
if not url:
assert utils.web.httpUrlRe.match(name), name
url = name
self.name = name self.name = name
self.url = url self.url = url
self.data = None self.data = None
@ -69,8 +73,7 @@ class Feed:
self.lock = threading.Thread() self.lock = threading.Thread()
self.announced_entries = utils.structures.TruncatableSet() self.announced_entries = utils.structures.TruncatableSet()
@property def get_command(self, plugin):
def command(self):
docstring = format(_("""[<number of headlines>] docstring = format(_("""[<number of headlines>]
Reports the titles for %s at the RSS feed %u. If Reports the titles for %s at the RSS feed %u. If
@ -78,14 +81,11 @@ class Feed:
RSS feeds are only looked up every supybot.plugins.RSS.waitPeriod RSS feeds are only looked up every supybot.plugins.RSS.waitPeriod
seconds, which defaults to 1800 (30 minutes) since that's what most seconds, which defaults to 1800 (30 minutes) since that's what most
websites prefer."""), self.name, self.url) websites prefer."""), self.name, self.url)
if self.isCommandMethod(name): def f(self2, irc, msg, args):
s = format('I already have a command in this plugin named %s.',name) args.insert(0, self.url)
raise callbacks.Error(s) self2.rss(irc, msg, args)
def f(self, irc, msg, args): f = utils.python.changeFunctionName(f, self.name, docstring)
args.insert(0, url) f = types.MethodType(f, plugin)
self.rss(irc, msg, args)
f = utils.python.changeFunctionName(f, name, docstring)
f = types.MethodType(f, self)
return f return f
def lock_feed(f): def lock_feed(f):
@ -130,8 +130,7 @@ class RSS(callbacks.Plugin):
except registry.NonExistentRegistryEntry: except registry.NonExistentRegistryEntry:
self.log.warning('%s is not a registered feed, removing.',name) self.log.warning('%s is not a registered feed, removing.',name)
continue continue
self.feed_names[name] = url self.register_feed(name, url, True)
self.feeds[url] = Feed(name, url, True)
################## ##################
# Feed registering # Feed registering
@ -141,6 +140,13 @@ class RSS(callbacks.Plugin):
group = self.registryValue('feeds', value=False) group = self.registryValue('feeds', value=False)
conf.registerGlobalValue(group, name, registry.String(url, '')) conf.registerGlobalValue(group, name, registry.String(url, ''))
def register_feed(self, name, url, plugin_is_loading):
self.feed_names[name] = url
if self.isCommandMethod(name):
s = format('I already have a command in this plugin named %s.',name)
raise callbacks.Error(s)
self.feeds[url] = Feed(name, url, plugin_is_loading)
def remove_feed(self, feed): def remove_feed(self, feed):
del self.feed_names[feed.name] del self.feed_names[feed.name]
del self.feeds[feed.url] del self.feeds[feed.url]
@ -163,7 +169,7 @@ class RSS(callbacks.Plugin):
try: try:
return self.__parent.getCommandMethod(command) return self.__parent.getCommandMethod(command)
except AttributeError: except AttributeError:
return self.feeds[command[0]].command return self.get_feed(command[0]).get_command(self)
def __call__(self, irc, msg): def __call__(self, irc, msg):
self.__parent.__call__(irc, msg) self.__parent.__call__(irc, msg)
@ -275,7 +281,7 @@ class RSS(callbacks.Plugin):
given URL. given URL.
""" """
self.register_feed_config(name, url) self.register_feed_config(name, url)
self.feeds[name] = Feed(name, url) self.register_feed(name, url, False)
irc.replySuccess() irc.replySuccess()
add = wrap(add, ['feedName', 'url']) add = wrap(add, ['feedName', 'url'])