Encyclopedia: Add Python 3 support.

This commit is contained in:
Krytarik Raido
2018-02-22 11:45:04 +01:00
parent b18cc37a15
commit 669293de1e
5 changed files with 68 additions and 56 deletions

View File

@ -22,8 +22,9 @@ funtionality has been moved to PackageInfo
import supybot
import supybot.world as world
from imp import reload
__version__ = "2.4"
__version__ = "2.5"
__author__ = supybot.Author("Krytarik Raido", "krytarik", "krytarik@tuxgarage.com")
__contributors__ = {
supybot.Author("Dennis Kaarsemaker", "Seveas", "dennis@kaarsemaker.net"): ['Original Author'],
@ -31,13 +32,13 @@ __contributors__ = {
}
__url__ = 'https://launchpad.net/ubuntu-bots'
import config
from . import config
reload(config)
import plugin
from . import plugin
reload(plugin)
if world.testing:
import test
from . import test
Class = plugin.Class
configure = config.configure

View File

@ -98,7 +98,7 @@ if 'search' in form:
# Select factoids
if search:
keys = [urllib2.unquote(x.strip()) for x in search.split() if len(x.strip()) >=2][:5]
keys = [utils.web.urlunquote(x.strip()) for x in search.split() if len(x.strip()) >=2][:5]
values = []
if not keys:
keys = ['']
@ -127,19 +127,19 @@ else:
# Pagination links
npages = int(math.ceil(total / float(NUM_PER_PAGE)))
print '·'
print('·')
for i in range(npages):
print '<a href="factoids.cgi?db=%s&search=%s&order=%s&page=%s">%d</a> &middot;' % (database, search, order_by, i, i+1)
print('<a href="factoids.cgi?db=%s&search=%s&order=%s&page=%s">%d</a> &middot;' % (database, search, order_by, i, i+1))
print '<br />Order by<br />&middot;';
print ' <a href="factoids.cgi?db=%s&search=%s&order=%s&page=0">%s</a> &middot;' % (database, search, 'name ASC', 'Name +')
print ' <a href="factoids.cgi?db=%s&search=%s&order=%s&page=0">%s</a> &middot;' % (database, search, 'name DESC', 'Name -')
print ' <a href="factoids.cgi?db=%s&search=%s&order=%s&page=0">%s</a> &middot;' % (database, search, 'popularity ASC', 'Popularity +')
print ' <a href="factoids.cgi?db=%s&search=%s&order=%s&page=0">%s</a> &middot;' % (database, search, 'popularity DESC', 'Popularity -')
print ' <a href="factoids.cgi?db=%s&search=%s&order=%s&page=0">%s</a> &middot;' % (database, search, 'added ASC', 'Date added +')
print ' <a href="factoids.cgi?db=%s&search=%s&order=%s&page=0">%s</a> &middot;' % (database, search, 'added DESC', 'Date added -')
print('<br />Order by<br />&middot;');
print(' <a href="factoids.cgi?db=%s&search=%s&order=%s&page=0">%s</a> &middot;' % (database, search, 'name ASC', 'Name +'))
print(' <a href="factoids.cgi?db=%s&search=%s&order=%s&page=0">%s</a> &middot;' % (database, search, 'name DESC', 'Name -'))
print(' <a href="factoids.cgi?db=%s&search=%s&order=%s&page=0">%s</a> &middot;' % (database, search, 'popularity ASC', 'Popularity +'))
print(' <a href="factoids.cgi?db=%s&search=%s&order=%s&page=0">%s</a> &middot;' % (database, search, 'popularity DESC', 'Popularity -'))
print(' <a href="factoids.cgi?db=%s&search=%s&order=%s&page=0">%s</a> &middot;' % (database, search, 'added ASC', 'Date added +'))
print(' <a href="factoids.cgi?db=%s&search=%s&order=%s&page=0">%s</a> &middot;' % (database, search, 'added DESC', 'Date added -'))
print '''
print('''
<table cellspacing="0">
<thead>
<tr>
@ -148,7 +148,7 @@ print '''
<th style="width: 20%;">Author</th>
</tr>
</thead>
<tbody>'''
<tbody>''')
url_re = re.compile('(?P<url>(https?://\S+|www\S+))')
def q(x):
@ -183,16 +183,16 @@ for fact in factoids:
sys.stdout.write(' <tr')
if i % 2: sys.stdout.write(' class="bg2"')
i += 1
print '''>
print('''>
<td>%s</td>
<td>%s</td>
<td>%s<br />
Added on: %s<br />
Requested %s times</td>
</tr>''' % tuple(data)
</tr>''' % tuple(data))
print '''
print('''
</tbody>
</table>'''
</table>''')
send_page('factoids.tmpl')

View File

@ -91,7 +91,7 @@ def queue(irc, to, msg):
return
now = time.time()
for m in msgcache.keys():
for m in list(msgcache.keys()):
if msgcache[m] < now - 30:
msgcache.pop(m)
for m in msgcache:
@ -215,7 +215,7 @@ class Encyclopedia(callbacks.Plugin):
Lists all the users who are in the list of editors.
"""
irc.reply(', '.join([u.name for u in ircdb.users.users.values() if capab(u.name, 'editfactoids')]), private=True)
irc.reply(', '.join([u.name for u in list(ircdb.users.users.values()) if capab(u.name, 'editfactoids')]), private=True)
editors = wrap(editors)
def moderators(self, irc, msg, args):
@ -223,7 +223,7 @@ class Encyclopedia(callbacks.Plugin):
Lists all the users who can add users to the list of editors.
"""
irc.reply(', '.join([u.name for u in ircdb.users.users.values() if capab(u.name, 'addeditors')]), private=True)
irc.reply(', '.join([u.name for u in list(ircdb.users.users.values()) if capab(u.name, 'addeditors')]), private=True)
moderators = wrap(moderators)
def get_target(self, nick, text, orig_target):
@ -399,7 +399,7 @@ class Encyclopedia(callbacks.Plugin):
def check_aliases(self, channel, factoid):
now = time.time()
for e in self.edits.keys():
for e in list(self.edits.keys()):
if self.edits[e] + 10 < now:
self.edits.pop(e)
if not factoid.value.startswith('<alias>'):
@ -459,7 +459,11 @@ class Encyclopedia(callbacks.Plugin):
if checkIgnored(msg.prefix,msg.args[0]):
return
# Are we being queried?
recipient, text = msg.args[0], msg.args[1].decode('utf-8')
recipient = msg.args[0]
if sys.version_info < (3,0):
text = msg.args[1].decode('utf-8')
else:
text = msg.args[1]
if not self.registryValue('enabled', ircutils.isChannel(recipient) and recipient or None):
# Encyclopedia is disabled here, do nothing
return
@ -554,7 +558,10 @@ class Encyclopedia(callbacks.Plugin):
retmsg = ''
ret = self.registryValue('notfoundmsg')
if ret.count('%') == ret.count('%s') == 1:
ret = ret % repr(text).lstrip('u')
if sys.version_info < (3,0):
ret = ret % repr(text).lstrip('u')
else:
ret = ret % repr(text)
if channel.lower() == irc.nick.lower() or self.registryValue('privateNotFound', channel):
myqueue(irc, msg.nick, ret)
else:
@ -572,7 +579,7 @@ class Encyclopedia(callbacks.Plugin):
if doChanMsg and channel.lower() != irc.nick.lower() and target[0] != '#': # not /msg
if target in irc.state.channels[channel].users:
myqueue(irc, channel, "%s, please see my private message" % target)
if type(ret) != list:
if not isinstance(ret, list):
myqueue(irc, target, retmsg + ret)
else:
myqueue(irc, target, retmsg + ret[0])
@ -855,7 +862,7 @@ class Encyclopedia(callbacks.Plugin):
ret[r] = 1
if not ret:
return "None found"
return 'Found: %s' % ', '.join(sorted(ret.keys(), lambda x, y: cmp(ret[x], ret[y]))[:10])
return 'Found: %s' % ', '.join(sorted(list(ret.keys()), key=lambda x: ret[x])[:10])
def sync(self, irc, msg, args, channel):
"""[<channel>]
@ -876,16 +883,14 @@ class Encyclopedia(callbacks.Plugin):
return
def download_database(location, dpath):
"""Download the database located at location to path dpath"""
import urllib2
tmp_db = "%s%stmp" % (dpath, os.extsep)
fd = urllib2.urlopen(location)
fd2 = open(tmp_db, 'w')
fd2.write(fd.read()) # Download to a temparary file
data = utils.web.getUrl(location)
fd = open(tmp_db, 'w')
fd.write(data) # Download to a temporary file
fd.close()
fd2.close()
# Do some checking to make sure we have an SQLite database
fd2 = open(tmp_db, 'rb')
check = fd2.read(15)
fd = open(tmp_db, 'rb')
check = fd.read(15)
if check == 'SQLite format 3': # OK, rename to dpath
os.rename(tmp_db, dpath)
try:
@ -896,9 +901,9 @@ class Encyclopedia(callbacks.Plugin):
self.databases.pop(channel)
except:
pass
else: # Remove the tmpparary file and raise an error
else: # Remove the temporary file and raise an error
os.remove(tmp_db)
raise RuntimeError, "Downloaded file was not an SQLite 3 database"
raise RuntimeError("Downloaded file was not an SQLite 3 database")
db = self.registryValue('database', channel)
if not db:
@ -920,7 +925,7 @@ class Encyclopedia(callbacks.Plugin):
except OSError:
# file doesn't exist yet, so nothing to backup
pass
except Exception, e:
except Exception as e:
self.log.error("Encyclopedia: Could not rename %s to %s.backup" % (dbpath, dbpath))
self.log.error('Encyclopedia: ' + utils.exnToString(e))
irc.error("Internal error, see log")
@ -931,7 +936,7 @@ class Encyclopedia(callbacks.Plugin):
irc.reply("Attemting to download database", prefixNick=False)
download_database(remotedb, dbpath)
irc.replySuccess()
except Exception, e:
except Exception as e:
self.log.error("Encyclopedia: Could not download %s to %s" % (remotedb, dbpath))
self.log.error('Encyclopedia: ' + utils.exnToString(e))
irc.error("Internal error, see log")
@ -999,11 +1004,11 @@ class Encyclopedia(callbacks.Plugin):
if not ret:
rmsg = "Authored: None found"
else:
rmsg = 'Authored Found: %s' % ', '.join(sorted(ret.keys(), lambda x, y: cmp(ret[x], ret[y]))[:10])
rmsg = 'Authored Found: %s' % ', '.join(sorted(list(ret.keys()), key=lambda x: ret[x])[:10])
if not log_ret:
log_rmsg = "Edited: None found"
else:
log_rmsg = 'Edited Found: %s' % ', '.join(sorted(log_ret.keys(), lambda x, y: cmp(log_ret[x], log_ret[y]))[:10])
log_rmsg = 'Edited Found: %s' % ', '.join(sorted(list(log_ret.keys()), key=lambda x: log_ret[x])[:10])
irc.reply(rmsg)
irc.reply(log_rmsg)
lookup = wrap(lookup, [optional('otherUser')])
@ -1106,10 +1111,10 @@ class Encyclopedia(callbacks.Plugin):
irc.reply("I'm not currently ignoring any hostmasks in '%s'" % channel)
else:
L = sorted(c.ignores)
irc.reply(utils.str.commaAndify(map(repr, L)))
irc.reply(utils.str.commaAndify(list(map(repr, L))))
else:
if ircdb.ignores.hostmasks:
irc.reply(format('%L', (map(repr,ircdb.ignores.hostmasks))))
irc.reply(format('%L', (list(map(repr,ircdb.ignores.hostmasks)))))
else:
irc.reply("I'm not currently globally ignoring anyone.")