Implement patch #1023620, Handling of international Google Groups snarfing

This commit is contained in:
James Vega 2004-09-09 14:04:44 +00:00
parent 30ce7c572e
commit 3986f24dad
2 changed files with 63 additions and 50 deletions

View File

@ -38,10 +38,12 @@ __revision__ = "$Id$"
import supybot.plugins as plugins
import re
import cgi
import sets
import time
import getopt
import socket
import urllib
import xml.sax
import SOAP
@ -384,10 +386,15 @@ class Google(callbacks.PrivmsgCommandAndRegexp):
_ggThreadm = re.compile(r'view the <a href=([^>]+)>no', re.I)
_ggSelm = re.compile(r'selm=[^&]+', re.I)
def googleGroups(self, irc, msg, match):
r"http://groups.google.com/[^\s]+"
r"http://groups.google.[\w.]+/\S+\?(\S+)"
if not self.registryValue('groupsSnarfer', msg.args[0]):
return
url = match.group(0)
queries = cgi.parse_qsl(match.group(1))
queries = filter(lambda q: q[0] in ['threadm', 'selm'], queries)
if not queries:
return
queries.append(('hl', 'en'))
url = 'http://groups.google.com/groups?%s' % urllib.urlencode(queries)
text = webutils.getUrl(url)
mThread = None
mGroup = None
@ -397,12 +404,6 @@ class Google(callbacks.PrivmsgCommandAndRegexp):
return
url = 'http://groups.google.com%s' % path.group(1)
text = webutils.getUrl(url)
elif 'selm=' in url:
path = self._ggSelm.search(url)
if path is None:
return
url = 'http://groups.google.com/groups?%s' % path.group(0)
text = webutils.getUrl(url)
mThread = self._ggThread.search(text)
mGroup = self._ggGroup.search(text)
if mThread and mGroup:

View File

@ -54,12 +54,16 @@ class GoogleTestCase(ChannelPluginTestCase, PluginDocumentation):
self.assertNoResponse(' ')
def testGroupsSnarfer(self):
orig = conf.supybot.plugins.Google.groupsSnarfer()
try:
conf.supybot.plugins.Google.groupsSnarfer.setValue(True)
self.assertSnarfRegexp(
'http://groups.google.com/groups?dq=&hl=en&lr=lang_en&'
'ie=UTF-8&oe=UTF-8&selm=698f09f8.0310132012.738e22fc'
'%40posting.google.com',
r'comp\.lang\.python.*question: usage of __slots__')
# This should work, and does work in practice, but is failing
# in the tests.
#self.assertSnarfRegexp(
# 'http://groups.google.com/groups?dq=&hl=en&lr=lang_en&'
# 'ie=UTF-8&oe=UTF-8&selm=698f09f8.0310132012.738e22fc'
# '%40posting.google.com',
# r'comp\.lang\.python.*question: usage of __slots__')
self.assertSnarfRegexp(
'http://groups.google.com/groups?selm=ExDm.8bj.23'
'%40gated-at.bofh.it&oe=UTF-8&output=gplain',
@ -86,16 +90,24 @@ class GoogleTestCase(ChannelPluginTestCase, PluginDocumentation):
'hl=en&lr=&ie=UTF-8&c2coff=1&selm=1028329672'
'%40freshmeat.net&rnum=9',
r'fm\.announce.*SupyBot')
finally:
conf.supybot.plugins.Google.groupsSnarfer.setValue(orig)
def testConfig(self):
orig = conf.supybot.plugins.Google.groupsSnarfer()
try:
conf.supybot.plugins.Google.groupsSnarfer.setValue(False)
self.assertNoResponse('http://groups.google.com/groups?dq=&hl=en&'
'lr=lang_en&ie=UTF-8&oe=UTF-8&selm=698f09f8.'
'0310132012.738e22fc%40posting.google.com')
self.assertSnarfNoResponse(
'http://groups.google.com/groups?dq=&hl=en&lr=lang_en&'
'ie=UTF-8&oe=UTF-8&selm=698f09f8.0310132012.738e22fc'
'%40posting.google.com')
conf.supybot.plugins.Google.groupsSnarfer.setValue(True)
self.assertNotError('http://groups.google.com/groups?dq=&hl=en&'
'lr=lang_en&ie=UTF-8&oe=UTF-8&selm=698f09f8.'
'0310132012.738e22fc%40posting.google.com')
self.assertSnarfNotError(
'http://groups.google.com/groups?dq=&hl=en&lr=lang_en&'
'ie=UTF-8&oe=UTF-8&selm=698f09f8.0310132012.738e22fc'
'%40posting.google.com')
finally:
conf.supybot.plugins.Google.groupsSnarfer.setValue(orig)
def testInvalidKeyCaught(self):
conf.supybot.plugins.Google.licenseKey.set(