From a55611a49e909dd6e8fc6f8b98de639fec1068cc Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Mon, 25 Mar 2013 19:15:08 +0100 Subject: [PATCH] core: Various Python 3 compatibility fixes. Conflicts: src/httpserver.py --- src/commands.py | 3 ++- src/httpserver.py | 4 ++-- src/test.py | 9 ++++++--- src/utils/str.py | 3 ++- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/commands.py b/src/commands.py index 970f1c918..32c428cf1 100644 --- a/src/commands.py +++ b/src/commands.py @@ -870,6 +870,7 @@ class first(context): spec(irc, msg, args, state) return except Exception, e: + e2 = e # 'e' is local. errored = state.errored state.errored = False continue @@ -877,7 +878,7 @@ class first(context): state.args.append(self.default) else: state.errored = errored - raise e + raise e2 class reverse(context): def __call__(self, irc, msg, args, state): diff --git a/src/httpserver.py b/src/httpserver.py index b0bba8a46..0aff3330a 100644 --- a/src/httpserver.py +++ b/src/httpserver.py @@ -138,7 +138,7 @@ class SupyHTTPServerCallback: self.send_header('Content_type', 'text/plain; charset=utf-8') self.send_header('Content-Length', len(self.defaultResponse)) self.end_headers() - self.wfile.write(self.defaultResponse) + self.wfile.write(self.defaultResponse.encode()) doPost = doHead = doGet @@ -159,7 +159,7 @@ class Supy404(SupyHTTPServerCallback): self.send_header('Content_type', 'text/plain; charset=utf-8') self.send_header('Content-Length', len(self.response)) self.end_headers() - self.wfile.write(self.response) + self.wfile.write(self.response.encode()) doPost = doHead = doGet diff --git a/src/test.py b/src/test.py index 7c1594ef4..d0aa11684 100644 --- a/src/test.py +++ b/src/test.py @@ -38,7 +38,6 @@ import urllib import httplib import unittest import threading -import StringIO import supybot.log as log import supybot.i18n as i18n @@ -568,8 +567,12 @@ class HTTPPluginTestCase(PluginTestCase): def request(self, url, method='GET', read=True, data={}): assert url.startswith('/') - wfile = StringIO.StringIO() - rfile = StringIO.StringIO() + try: + from io import BytesIO as StringIO + except ImportError: + from StringIO import StringIO + wfile = StringIO() + rfile = StringIO() connection = FakeHTTPConnection(wfile, rfile) connection.putrequest(method, url) connection.endheaders() diff --git a/src/utils/str.py b/src/utils/str.py index 93cabc008..591517daf 100644 --- a/src/utils/str.py +++ b/src/utils/str.py @@ -455,7 +455,8 @@ def format(s, *args, **kwargs): return has(args.pop()) elif char == 'L': t = args.pop() - if isinstance(t, list): + if isinstance(t, list) or (sys.version_info[0] >= 3 and + (isinstance(t, map) or isinstance(t, filter))): return commaAndify(t) elif isinstance(t, tuple) and len(t) == 2: if not isinstance(t[0], list):