More fixes everywhere

This commit is contained in:
Dennis Kaarsemaker
2007-02-04 23:10:10 +01:00
parent f3ffcabca9
commit e375094603
8 changed files with 93 additions and 12 deletions

View File

@ -281,6 +281,10 @@ class Bugtracker(callbacks.PluginRegexp):
r"""\b(?P<bt>(([a-z0-9]+)?\s+bugs?|[a-z]+))\s+#?(?P<bug>\d+(?!\d*\.\d+)((,|\s*(and|en|et|und|ir))\s*#?\d+(?!\d*\.\d+))*)""" r"""\b(?P<bt>(([a-z0-9]+)?\s+bugs?|[a-z]+))\s+#?(?P<bug>\d+(?!\d*\.\d+)((,|\s*(and|en|et|und|ir))\s*#?\d+(?!\d*\.\d+))*)"""
if msg.args[0][0] == '#' and not self.registryValue('bugSnarfer', msg.args[0]): if msg.args[0][0] == '#' and not self.registryValue('bugSnarfer', msg.args[0]):
return return
nbugs = msg.tagged('nbugs')
if not nbugs: nbugs = 0
if nbugs >= 5:
return
# Don't double on commands # Don't double on commands
s = str(msg).split(':')[2] s = str(msg).split(':')[2]
@ -293,7 +297,8 @@ class Bugtracker(callbacks.PluginRegexp):
reps = ((' ',''),('#',''),('and',','),('en',','),('et',','),('und',','),('ir',',')) reps = ((' ',''),('#',''),('and',','),('en',','),('et',','),('und',','),('ir',','))
for r in reps: for r in reps:
bugids = bugids.replace(r[0],r[1]) bugids = bugids.replace(r[0],r[1])
bugids = bugids.split(',')[:5] bugids = bugids.split(',')[:5-nbugs]
msg.tag('nbugs', nbugs + len(bugids))
bt = map(lambda x: x.lower(), match.group('bt').split()) bt = map(lambda x: x.lower(), match.group('bt').split())
name = '' name = ''
if len(bt) == 1 and not (bt[0] in ['bug','bugs']): if len(bt) == 1 and not (bt[0] in ['bug','bugs']):
@ -331,7 +336,8 @@ class Bugtracker(callbacks.PluginRegexp):
try: try:
report = self.get_bug(tracker,bugid,self.registryValue('showassignee', msg.args[0])) report = self.get_bug(tracker,bugid,self.registryValue('showassignee', msg.args[0]))
except BugNotFoundError: except BugNotFoundError:
irc.error("%s bug %d could not be found" % (tracker.description, bugid)) if self.registryValue('replyWhenNotFound'):
irc.error("%s bug %d could not be found" % (tracker.description, bugid))
except BugtrackerError, e: except BugtrackerError, e:
if 'private' in str(e): if 'private' in str(e):
irc.reply("Bug %d on http://launchpad.net/bugs/%d is private" % (bugid, bugid)) irc.reply("Bug %d on http://launchpad.net/bugs/%d is private" % (bugid, bugid))
@ -344,9 +350,15 @@ class Bugtracker(callbacks.PluginRegexp):
irc.reply(r, prefixNick=False) irc.reply(r, prefixNick=False)
def turlSnarfer(self, irc, msg, match): def turlSnarfer(self, irc, msg, match):
r"(?P<tracker>https?://\S*?)(show_bug.cgi\?id=|bugreport.cgi\?bug=|(bugs|\+bug)/|/ticket/|tracker/\S*aid=)(?P<bug>\d+)(?P<sfurl>&group_id=\d+&at_id=\d+)?" r"(?P<tracker>https?://\S*?)/(Bugs/0*|str.php\?L|show_bug.cgi\?id=|bugreport.cgi\?bug=|(bugs|\+bug)/|ticket/|tracker/|\S*aid=)(?P<bug>\d+)(?P<sfurl>&group_id=\d+&at_id=\d+)?"
print match
if msg.args[0][0] == '#' and not self.registryValue('bugSnarfer', msg.args[0]): if msg.args[0][0] == '#' and not self.registryValue('bugSnarfer', msg.args[0]):
return return
nbugs = msg.tagged('nbugs')
if not nbugs: nbugs = 0
if nbugs >= 5:
return
msg.tag('nbugs', nbugs+1)
try: try:
tracker = self.get_tracker(match.group(0),match.group('sfurl')) tracker = self.get_tracker(match.group(0),match.group('sfurl'))
if not tracker: if not tracker:
@ -665,7 +677,7 @@ class Trac(IBugtracker):
severity = l[l.find('>')+1:l.find('</')] severity = l[l.find('>')+1:l.find('</')]
if 'headers="h_owner"' in l: if 'headers="h_owner"' in l:
assignee = l[l.find('>')+1:l.find('</')] assignee = l[l.find('>')+1:l.find('</')]
print [(id, package, title, severity, status, assignee, "%s/%s" % (self.url, id))] #print [(id, package, title, severity, status, assignee, "%s/%s" % (self.url, id))]
return [(id, package, title, severity, status, assignee, "%s/%s" % (self.url, id))] return [(id, package, title, severity, status, assignee, "%s/%s" % (self.url, id))]
class WikiForms(IBugtracker): class WikiForms(IBugtracker):
@ -728,24 +740,26 @@ sfre = re.compile(r"""
.*? .*?
<h2>\[.*?\]\s*(?P<title>.*?)</h2> <h2>\[.*?\]\s*(?P<title>.*?)</h2>
.*? .*?
Assigned To.*?<br>\s+(?P<assignee>\S+) assigned.*?<br>\s+(?P<assignee>\S+)
.*? .*?
Priority.*?(?P<priority>\d+) priority.*?(?P<priority>\d+)
.*? .*?
Status.*?<br>\s+(?P<status>\S+) status.*?<br>\s+(?P<status>\S+)
.*? .*?
Resolution.*?<br>\s+(?P<resolution>\S+) resolution.*?<br>\s+(?P<resolution>\S+)
.*? .*?
""", re.VERBOSE | re.DOTALL | re.I) """, re.VERBOSE | re.DOTALL | re.I)
class Sourceforge(IBugtracker): class Sourceforge(IBugtracker):
_sf_url = 'http://sf.net/support/tracker.php?aid=%d' _sf_url = 'http://sf.net/support/tracker.php?aid=%d'
def get_bug(self, id): def get_bug(self, id):
url = self._sf_url % id url = self._sf_url % id
print url
try: try:
bugdata = utils.web.getUrl(url) bugdata = utils.web.getUrl(url)
except Exception, e: except Exception, e:
s = 'Could not parse data returned by %s: %s' % (self.description, e) s = 'Could not parse data returned by %s: %s' % (self.description, e)
raise BugtrackerError, s raise BugtrackerError, s
print bugdata
try: try:
reo = sfre.search(bugdata) reo = sfre.search(bugdata)
status = reo.group('status') status = reo.group('status')
@ -754,6 +768,7 @@ class Sourceforge(IBugtracker):
status += ' ' + resolution status += ' ' + resolution
return [(id, None, reo.group('title'), "Pri: %s" % reo.group('priority'), status, reo.group('assignee'),self._sf_url % id)] return [(id, None, reo.group('title'), "Pri: %s" % reo.group('priority'), status, reo.group('assignee'),self._sf_url % id)]
except: except:
raise
raise BugNotFoundError raise BugNotFoundError
# Introspection is quite cool # Introspection is quite cool
@ -774,7 +789,7 @@ registerBugtracker('freedesktop2', 'http://bugs.freedesktop.org', 'Freedesktop',
registerBugtracker('openoffice', 'http://openoffice.org/issues', 'OpenOffice.org', 'issuezilla') registerBugtracker('openoffice', 'http://openoffice.org/issues', 'OpenOffice.org', 'issuezilla')
registerBugtracker('malone', 'https://launchpad.net/malone', 'Malone', 'malone') registerBugtracker('malone', 'https://launchpad.net/malone', 'Malone', 'malone')
registerBugtracker('debian', 'http://bugs.debian.org', 'Debian', 'debbugs') registerBugtracker('debian', 'http://bugs.debian.org', 'Debian', 'debbugs')
registerBugtracker('trac', 'http://projects.edgewall.com/trac/ticket', 'Trac', 'trac') registerBugtracker('trac', 'http://trac.edgewall.org/ticket', 'Trac', 'trac')
registerBugtracker('django', 'http://code.djangoproject.com/ticket', 'Django', 'trac') registerBugtracker('django', 'http://code.djangoproject.com/ticket', 'Django', 'trac')
registerBugtracker('cups', 'http://www.cups.org/str.php', 'CUPS', 'str') registerBugtracker('cups', 'http://www.cups.org/str.php', 'CUPS', 'str')
registerBugtracker('gnewsense', 'http://bugs.gnewsense.org/Bugs', 'gNewSense', 'wikiforms') registerBugtracker('gnewsense', 'http://bugs.gnewsense.org/Bugs', 'gNewSense', 'wikiforms')

View File

@ -113,7 +113,7 @@ class Encyclopedia(callbacks.Plugin):
text = ' ' + text text = ' ' + text
if '>' in text: if '>' in text:
target = text[text.rfind('>')+1:].strip() target = text[text.rfind('>')+1:].strip().split()[0]
text = text[:text.rfind('>')].strip() text = text[:text.rfind('>')].strip()
retmsg = "%s wants you to know: " % nick retmsg = "%s wants you to know: " % nick

View File

@ -1 +1,2 @@
Insert a description of your plugin here, with any notes, etc. about using it. This is a random mess plugin that hardcodes many paths at the top of the plugin
code. You'll generally want to be careful with it or simply not use it.

View File

@ -1,3 +1,16 @@
###
# Copyright (c) 2006-2007 Dennis Kaarsemaker
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
###
""" """
Random mess plugin Random mess plugin
""" """

View File

@ -1,3 +1,17 @@
###
# Copyright (c) 2006-2007 Dennis Kaarsemaker
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
###
import supybot.conf as conf import supybot.conf as conf
import supybot.registry as registry import supybot.registry as registry

View File

@ -1,3 +1,17 @@
###
# Copyright (c) 2006-2007 Dennis Kaarsemaker
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
###
import supybot.utils as utils import supybot.utils as utils
from supybot.commands import * from supybot.commands import *
import supybot.plugins as plugins import supybot.plugins as plugins

View File

@ -1,3 +1,17 @@
###
# Copyright (c) 2006-2007 Dennis Kaarsemaker
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
###
from supybot.test import * from supybot.test import *
class MessTestCase(PluginTestCase): class MessTestCase(PluginTestCase):

View File

@ -1,5 +1,5 @@
### ###
# Copyright (c) 2005,2006 Dennis Kaarsemaker # Copyright (c) 2005-2007 Dennis Kaarsemaker
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of version 2 of the GNU General Public License as # it under the terms of version 2 of the GNU General Public License as
@ -162,6 +162,16 @@ class Webcal(callbacks.Plugin):
if tz[pos+1:] == ud: if tz[pos+1:] == ud:
return True return True
pos = tz.find('/',pos+1) pos = tz.find('/',pos+1)
# Repeat, with spaces replaced by underscores
ud = ud.replace(' ','_')
if tz == ud:
return True
pos = tz.find('/')
while not (pos == -1):
if tz[pos+1:] == ud:
return True
pos = tz.find('/',pos+1)
return False return False
def schedule(self, irc, msg, args, tz): def schedule(self, irc, msg, args, tz):