From d74a59a2f571e619fa1203fe703c3266e85e30f8 Mon Sep 17 00:00:00 2001 From: James Vega Date: Sun, 2 Nov 2003 19:46:35 +0000 Subject: [PATCH] Cleaned up the snarfer --- plugins/Sourceforge.py | 58 ++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/plugins/Sourceforge.py b/plugins/Sourceforge.py index 2b669b580..79a5c1f74 100644 --- a/plugins/Sourceforge.py +++ b/plugins/Sourceforge.py @@ -101,14 +101,12 @@ class Sourceforge(callbacks.PrivmsgCommandAndRegexp, plugins.Toggleable): '"([^"]+)">([^<]+)', _reopts) _hrefOpts = '&set=custom&_assigned_to=0&_status=1&_category'\ '=100&_group=100&order=artifact_id&sort=DESC' - _resolution = re.compile(r'Resolution: (.+?)',_reopts) - _assigned = re.compile(r'Assigned To: (.+?)', _reopts) - _submitted = re.compile(r'Submitted By:
([^<]+)', _reopts) - _priority = re.compile(r'Priority: (.+?)', _reopts) - _status = re.compile(r'Status: (.+?)', _reopts) - _res ={'Resolution':_resolution,'Assigned to':_assigned, - 'Submitted by':_submitted, 'Priority':_priority, - 'Status':_status} + _resolution = re.compile(r'(Resolution): (.+?)',_reopts) + _assigned = re.compile(r'(Assigned To): (.+?)', _reopts) + _submitted = re.compile(r'(Submitted By):
([^<]+)', _reopts) + _priority = re.compile(r'(Priority): (.+?)', _reopts) + _status = re.compile(r'(Status): (.+?)', _reopts) + _res =(_resolution, _assigned, _submitted, _priority, _status) toggles = plugins.ToggleDictionary({'tracker' : True}) project = None @@ -237,8 +235,7 @@ class Sourceforge(callbacks.PrivmsgCommandAndRegexp, plugins.Toggleable): url = 'http://sourceforge.net/projects/%s' % project self._getTrackerInfo(irc, msg, url, self._rfeLink, rfenum) - _getSnarferInfo = lambda self, k, v, s: '%s: %s' % (ircutils.bold(k), - v.search(s).group(1)) + _bold = lambda self, m: (ircutils.bold(m[0]),) + m[1:] _sfTitle = re.compile(r'Detail:(\d+) - ([^<]+)', re.I) _linkType = re.compile(r'(\w+ \w+|\w+): Tracker Detailed View', re.I) def sfSnarfer(self, irc, msg, match): @@ -246,27 +243,32 @@ class Sourceforge(callbacks.PrivmsgCommandAndRegexp, plugins.Toggleable): r".*\?(?:&?func=detail|&?aid=\d+|&?group_id=\d+|&?atid=\d+){4}" if not self.toggles.get('tracker', channel=msg.args[0]): return - url = match.group(0) - fd = urllib2.urlopen(url) - s = fd.read() - fd.close() try: - (num, desc) = self._sfTitle.search(s).groups() - resp = [desc] - linktype = self._linkType.search(s).group(1) - for k,v in self._res.iteritems(): - try: - resp.append(self._getSnarferInfo(k, v, s)) - except AttributeError: - pass - linktype = utils.depluralize(linktype) + url = match.group(0) + fd = urllib2.urlopen(url) + s = fd.read() + fd.close() + resp = [] + head = '' + m = self._linkType.search(s) + n = self._sfTitle.search(s) + if m and n: + linktype = m.group(1) + linktype = utils.depluralize(linktype) + (num, desc) = n.groups() + head = '%s #%s:' % (ircutils.bold(linktype), num) + resp.append(desc) + else: + debug.msg('%s does not appear to be a proper Sourceforge '\ + 'Tracker page (%s)' % (url, conf.replyPossibleBug)) + for r in self._res: + m = r.search(s) + if m: + resp.append('%s: %s' % self._bold(m.groups())) irc.reply(msg, '%s #%s: %s' % (ircutils.bold(linktype), ircutils.bold(num), '; '.join(resp)), prefixName = False) - except AttributeError, e: - irc.error(msg, 'That doesn\'t appear to be a proper Sourceforge '\ - 'Tracker page. (%s)' % conf.replyPossibleBug) - except Exception, e: - irc.error(msg, debug.exnToString(e)) + except urllib2.HTTPError, e: + debug.msg(e.msg()) Class = Sourceforge