FreeBSD Bugzilla – Attachment 188818 Details for
Bug 224332
Patch www/py-flup to support py3k for flavours
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
update py-flup for py3k
py-flup.patch (text/plain), 60.86 KB, created by
Shane
on 2017-12-14 08:32:16 UTC
(
hide
)
Description:
update py-flup for py3k
Filename:
MIME Type:
Creator:
Shane
Created:
2017-12-14 08:32:16 UTC
Size:
60.86 KB
patch
obsolete
>diff -Nru py-flup.orig/files/patch-ez__setup.py py-flup/files/patch-ez__setup.py >--- py-flup.orig/files/patch-ez__setup.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-ez__setup.py 2017-12-14 17:48:57.899283000 +1030 >@@ -0,0 +1,101 @@ >+--- ez_setup.py.orig 2008-12-04 05:11:12 UTC >++++ ez_setup.py >+@@ -13,6 +13,7 @@ the appropriate options to ``use_setupto >+ >+ This file can also be run as a script to install or upgrade setuptools. >+ """ >++from __future__ import print_function >+ import sys >+ DEFAULT_VERSION = "0.6c9" >+ DEFAULT_URL = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3] >+@@ -62,10 +63,10 @@ def _validate_md5(egg_name, data): >+ if egg_name in md5_data: >+ digest = md5(data).hexdigest() >+ if digest != md5_data[egg_name]: >+- print >>sys.stderr, ( >++ print(( >+ "md5 validation of %s failed! (Possible download problem?)" >+ % egg_name >+- ) >++ ), file=sys.stderr) >+ sys.exit(2) >+ return data >+ >+@@ -95,14 +96,14 @@ def use_setuptools( >+ return do_download() >+ try: >+ pkg_resources.require("setuptools>="+version); return >+- except pkg_resources.VersionConflict, e: >++ except pkg_resources.VersionConflict as e: >+ if was_imported: >+- print >>sys.stderr, ( >++ print(( >+ "The required version of setuptools (>=%s) is not available, and\n" >+ "can't be installed while this script is running. Please install\n" >+ " a more recent version first, using 'easy_install -U setuptools'." >+ "\n\n(Currently using %r)" >+- ) % (version, e.args[0]) >++ ) % (version, e.args[0]), file=sys.stderr) >+ sys.exit(2) >+ else: >+ del pkg_resources, sys.modules['pkg_resources'] # reload ok >+@@ -121,7 +122,7 @@ def download_setuptools( >+ with a '/'). `to_dir` is the directory where the egg will be downloaded. >+ `delay` is the number of seconds to pause before an actual download attempt. >+ """ >+- import urllib2, shutil >++ import urllib.request, urllib.error, urllib.parse, shutil >+ egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) >+ url = download_base + egg_name >+ saveto = os.path.join(to_dir, egg_name) >+@@ -147,7 +148,7 @@ and place it in this directory before re >+ version, download_base, delay, url >+ ); from time import sleep; sleep(delay) >+ log.warn("Downloading %s", url) >+- src = urllib2.urlopen(url) >++ src = urllib.request.urlopen(url) >+ # Read/write all in one block, so we don't create a corrupt file >+ # if the download is interrupted. >+ data = _validate_md5(egg_name, src.read()) >+@@ -208,10 +209,10 @@ def main(argv, version=DEFAULT_VERSION): >+ os.unlink(egg) >+ else: >+ if setuptools.__version__ == '0.0.1': >+- print >>sys.stderr, ( >++ print(( >+ "You have an obsolete version of setuptools installed. Please\n" >+ "remove it from your system entirely before rerunning this script." >+- ) >++ ), file=sys.stderr) >+ sys.exit(2) >+ >+ req = "setuptools>="+version >+@@ -230,8 +231,8 @@ def main(argv, version=DEFAULT_VERSION): >+ from setuptools.command.easy_install import main >+ main(argv) >+ else: >+- print "Setuptools version",version,"or greater has been installed." >+- print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' >++ print("Setuptools version",version,"or greater has been installed.") >++ print('(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)') >+ >+ def update_md5(filenames): >+ """Update our built-in md5 registry""" >+@@ -244,7 +245,7 @@ def update_md5(filenames): >+ md5_data[base] = md5(f.read()).hexdigest() >+ f.close() >+ >+- data = [" %r: %r,\n" % it for it in md5_data.items()] >++ data = [" %r: %r,\n" % it for it in list(md5_data.items())] >+ data.sort() >+ repl = "".join(data) >+ >+@@ -254,7 +255,7 @@ def update_md5(filenames): >+ >+ match = re.search("\nmd5_data = {\n([^}]+)}", src) >+ if not match: >+- print >>sys.stderr, "Internal error!" >++ print("Internal error!", file=sys.stderr) >+ sys.exit(2) >+ >+ src = src[:match.start(1)] + repl + src[match.end(1):] >diff -Nru py-flup.orig/files/patch-flup_client_fcgi__app.py py-flup/files/patch-flup_client_fcgi__app.py >--- py-flup.orig/files/patch-flup_client_fcgi__app.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_client_fcgi__app.py 2017-12-14 17:48:57.899357000 +1030 >@@ -0,0 +1,76 @@ >+--- flup/client/fcgi_app.py.orig 2007-10-17 16:48:03 UTC >++++ flup/client/fcgi_app.py >+@@ -136,13 +136,13 @@ def encode_pair(name, value): >+ if nameLength < 128: >+ s = chr(nameLength) >+ else: >+- s = struct.pack('!L', nameLength | 0x80000000L) >++ s = struct.pack('!L', nameLength | 0x80000000) >+ >+ valueLength = len(value) >+ if valueLength < 128: >+ s += chr(valueLength) >+ else: >+- s += struct.pack('!L', valueLength | 0x80000000L) >++ s += struct.pack('!L', valueLength | 0x80000000) >+ >+ return s + name + value >+ >+@@ -170,8 +170,8 @@ class Record(object): >+ while length: >+ try: >+ data = sock.recv(length) >+- except socket.error, e: >+- if e[0] == errno.EAGAIN: >++ except socket.error as e: >++ if e.args[0] == errno.EAGAIN: >+ select.select([sock], [], []) >+ continue >+ else: >+@@ -227,8 +227,8 @@ class Record(object): >+ while length: >+ try: >+ sent = sock.send(data) >+- except socket.error, e: >+- if e[0] == errno.EAGAIN: >++ except socket.error as e: >++ if e.args[0] == errno.EAGAIN: >+ select.select([], [sock], []) >+ continue >+ else: >+@@ -394,7 +394,7 @@ class FCGIApp(object): >+ return sock >+ >+ # To be done when I have more time... >+- raise NotImplementedError, 'Launching and managing FastCGI programs not yet implemented' >++ raise NotImplementedError('Launching and managing FastCGI programs not yet implemented') >+ >+ def _fcgiGetValues(self, sock, vars): >+ # Construct FCGI_GET_VALUES record >+@@ -421,7 +421,7 @@ class FCGIApp(object): >+ def _fcgiParams(self, sock, requestId, params): >+ rec = Record(FCGI_PARAMS, requestId) >+ data = [] >+- for name,value in params.items(): >++ for name,value in list(params.items()): >+ data.append(encode_pair(name, value)) >+ data = ''.join(data) >+ rec.contentData = data >+@@ -435,7 +435,7 @@ class FCGIApp(object): >+ >+ def _defaultFilterEnviron(self, environ): >+ result = {} >+- for n in environ.keys(): >++ for n in list(environ.keys()): >+ for p in self._environPrefixes: >+ if n.startswith(p): >+ result[n] = environ[n] >+@@ -448,7 +448,7 @@ class FCGIApp(object): >+ >+ def _lightFilterEnviron(self, environ): >+ result = {} >+- for n in environ.keys(): >++ for n in list(environ.keys()): >+ if n.upper() == n: >+ result[n] = environ[n] >+ return result >diff -Nru py-flup.orig/files/patch-flup_client_scgi__app.py py-flup/files/patch-flup_client_scgi__app.py >--- py-flup.orig/files/patch-flup_client_scgi__app.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_client_scgi__app.py 2017-12-14 17:48:57.899426000 +1030 >@@ -0,0 +1,34 @@ >+--- flup/client/scgi_app.py.orig 2007-10-17 16:48:03 UTC >++++ flup/client/scgi_app.py >+@@ -65,11 +65,11 @@ class SCGIApp(object): >+ # TODO: Anything not from environ that needs to be sent also? >+ >+ content_length = int(environ.get('CONTENT_LENGTH') or 0) >+- if headers.has_key('CONTENT_LENGTH'): >++ if 'CONTENT_LENGTH' in headers: >+ del headers['CONTENT_LENGTH'] >+ >+ headers_out = ['CONTENT_LENGTH', str(content_length), 'SCGI', '1'] >+- for k,v in headers.items(): >++ for k,v in list(headers.items()): >+ headers_out.append(k) >+ headers_out.append(v) >+ headers_out.append('') # For trailing NUL >+@@ -150,7 +150,7 @@ class SCGIApp(object): >+ >+ def _defaultFilterEnviron(self, environ): >+ result = {} >+- for n in environ.keys(): >++ for n in list(environ.keys()): >+ for p in self._environPrefixes: >+ if n.startswith(p): >+ result[n] = environ[n] >+@@ -163,7 +163,7 @@ class SCGIApp(object): >+ >+ def _lightFilterEnviron(self, environ): >+ result = {} >+- for n in environ.keys(): >++ for n in list(environ.keys()): >+ if n.upper() == n: >+ result[n] = environ[n] >+ return result >diff -Nru py-flup.orig/files/patch-flup_server__ajp.py py-flup/files/patch-flup_server__ajp.py >--- py-flup.orig/files/patch-flup_server__ajp.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server__ajp.py 2017-12-14 17:48:57.899494000 +1030 >@@ -0,0 +1,41 @@ >+--- flup/server/ajp.py.orig 2009-05-18 22:44:42 UTC >++++ flup/server/ajp.py >+@@ -134,7 +134,7 @@ class WSGIServer(BaseAJPServer, Threaded >+ loggingLevel=loggingLevel, >+ debug=debug) >+ for key in ('jobClass', 'jobArgs'): >+- if kw.has_key(key): >++ if key in kw: >+ del kw[key] >+ ThreadedServer.__init__(self, jobClass=Connection, jobArgs=(self,), >+ **kw) >+@@ -149,7 +149,7 @@ class WSGIServer(BaseAJPServer, Threaded >+ >+ try: >+ sock = self._setupSocket() >+- except socket.error, e: >++ except socket.error as e: >+ self.logger.error('Failed to bind socket (%s), exiting', e[1]) >+ return False >+ >+@@ -165,17 +165,17 @@ class WSGIServer(BaseAJPServer, Threaded >+ if __name__ == '__main__': >+ def test_app(environ, start_response): >+ """Probably not the most efficient example.""" >+- import cgi >++ from . import cgi >+ start_response('200 OK', [('Content-Type', 'text/html')]) >+ yield '<html><head><title>Hello World!</title></head>\n' \ >+ '<body>\n' \ >+ '<p>Hello World!</p>\n' \ >+ '<table border="1">' >+- names = environ.keys() >++ names = list(environ.keys()) >+ names.sort() >+ for name in names: >+ yield '<tr><td>%s</td><td>%s</td></tr>\n' % ( >+- name, cgi.escape(`environ[name]`)) >++ name, cgi.escape(repr(environ[name]))) >+ >+ form = cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ, >+ keep_blank_values=1) >diff -Nru py-flup.orig/files/patch-flup_server_ajp__base.py py-flup/files/patch-flup_server_ajp__base.py >--- py-flup.orig/files/patch-flup_server_ajp__base.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server_ajp__base.py 2017-12-14 17:48:57.899593000 +1030 >@@ -0,0 +1,188 @@ >+--- flup/server/ajp_base.py.orig 2008-09-11 19:24:46 UTC >++++ flup/server/ajp_base.py >+@@ -38,7 +38,7 @@ import datetime >+ import time >+ >+ # Unfortunately, for now, threads are required. >+-import thread >++import _thread >+ import threading >+ >+ __all__ = ['BaseAJPServer'] >+@@ -170,8 +170,8 @@ def decodeString(data, pos=0): >+ return '', pos >+ s = data[pos:pos+length] >+ return s, pos+length+1 # Don't forget NUL >+- except Exception, e: >+- raise ProtocolError, 'decodeString: '+str(e) >++ except Exception as e: >++ raise ProtocolError('decodeString: '+str(e)) >+ >+ def decodeRequestHeader(data, pos=0): >+ """Decode a request header/value pair.""" >+@@ -181,14 +181,14 @@ def decodeRequestHeader(data, pos=0): >+ i = ord(data[pos+1]) >+ name = requestHeaderTable[i] >+ if name is None: >+- raise ValueError, 'bad request header code' >++ raise ValueError('bad request header code') >+ pos += 2 >+ else: >+ name, pos = decodeString(data, pos) >+ value, pos = decodeString(data, pos) >+ return name, value, pos >+- except Exception, e: >+- raise ProtocolError, 'decodeRequestHeader: '+str(e) >++ except Exception as e: >++ raise ProtocolError('decodeRequestHeader: '+str(e)) >+ >+ def decodeAttribute(data, pos=0): >+ """Decode a request attribute.""" >+@@ -210,11 +210,11 @@ def decodeAttribute(data, pos=0): >+ else: >+ name = attributeTable[i] >+ if name is None: >+- raise ValueError, 'bad attribute code' >++ raise ValueError('bad attribute code') >+ value, pos = decodeString(data, pos) >+ return name, value, pos >+- except Exception, e: >+- raise ProtocolError, 'decodeAttribute: '+str(e) >++ except Exception as e: >++ raise ProtocolError('decodeAttribute: '+str(e)) >+ >+ def encodeString(s): >+ """Encode a string.""" >+@@ -249,8 +249,8 @@ class Packet(object): >+ while length: >+ try: >+ data = sock.recv(length) >+- except socket.error, e: >+- if e[0] == errno.EAGAIN: >++ except socket.error as e: >++ if e.args[0] == errno.EAGAIN: >+ select.select([sock], [], []) >+ continue >+ else: >+@@ -276,7 +276,7 @@ class Packet(object): >+ raise EOFError >+ >+ if header[:2] != SERVER_PREFIX: >+- raise ProtocolError, 'invalid header' >++ raise ProtocolError('invalid header') >+ >+ self.length = struct.unpack('>H', header[2:4])[0] >+ if self.length: >+@@ -296,8 +296,8 @@ class Packet(object): >+ while length: >+ try: >+ sent = sock.send(data) >+- except socket.error, e: >+- if e[0] == errno.EAGAIN: >++ except socket.error as e: >++ if e.args[0] == errno.EAGAIN: >+ select.select([], [sock], []) >+ continue >+ else: >+@@ -427,7 +427,7 @@ class InputStream(object): >+ def __iter__(self): >+ return self >+ >+- def next(self): >++ def __next__(self): >+ r = self.readline() >+ if not r: >+ raise StopIteration >+@@ -446,12 +446,12 @@ class InputStream(object): >+ never send us an EOF (empty string argument). >+ """ >+ if not data: >+- raise ProtocolError, 'short data' >++ raise ProtocolError('short data') >+ self._bufList.append(data) >+ length = len(data) >+ self._avail += length >+ if self._avail > self._length: >+- raise ProtocolError, 'too much data' >++ raise ProtocolError('too much data') >+ >+ class Request(object): >+ """ >+@@ -616,7 +616,7 @@ class Connection(object): >+ while True: >+ try: >+ self.processInput() >+- except ProtocolError, e: >++ except ProtocolError as e: >+ self.logger.error("Protocol error '%s'", str(e)) >+ break >+ except (EOFError, KeyboardInterrupt): >+@@ -642,7 +642,7 @@ class Connection(object): >+ return >+ >+ if not pkt.length: >+- raise ProtocolError, 'unexpected empty packet' >++ raise ProtocolError('unexpected empty packet') >+ >+ pkttype = pkt.data[0] >+ if pkttype == PKTTYPE_FWD_REQ: >+@@ -654,7 +654,7 @@ class Connection(object): >+ elif pkttype == PKTTYPE_CPING: >+ self._cping(pkt) >+ else: >+- raise ProtocolError, 'unknown packet type' >++ raise ProtocolError('unknown packet type') >+ >+ def _forwardRequest(self, pkt): >+ """ >+@@ -666,7 +666,7 @@ class Connection(object): >+ i = ord(pkt.data[1]) >+ method = methodTable[i] >+ if method is None: >+- raise ValueError, 'bad method field' >++ raise ValueError('bad method field') >+ req.setMethod(method) >+ value, pos = decodeString(pkt.data, 2) >+ req.setProtocol(value) >+@@ -794,7 +794,7 @@ class BaseAJPServer(object): >+ self._allowedServers = allowedServers >+ >+ # Used to force single-threadedness. >+- self._appLock = thread.allocate_lock() >++ self._appLock = _thread.allocate_lock() >+ >+ self.logger = logging.getLogger(LoggerName) >+ self.logger.setLevel(loggingLevel) >+@@ -873,7 +873,7 @@ class BaseAJPServer(object): >+ try: >+ if headers_sent: >+ # Re-raise if too late >+- raise exc_info[0], exc_info[1], exc_info[2] >++ raise exc_info[0](exc_info[1]).with_traceback(exc_info[2]) >+ finally: >+ exc_info = None # avoid dangling circular ref >+ else: >+@@ -906,8 +906,8 @@ class BaseAJPServer(object): >+ finally: >+ if hasattr(result, 'close'): >+ result.close() >+- except socket.error, e: >+- if e[0] != errno.EPIPE: >++ except socket.error as e: >++ if e.args[0] != errno.EPIPE: >+ raise # Don't let EPIPE propagate beyond server >+ finally: >+ if not self.multithreaded: >+@@ -925,10 +925,10 @@ class BaseAJPServer(object): >+ environ['SCRIPT_NAME'] = scriptName >+ >+ reqUri = None >+- if environ.has_key('REQUEST_URI'): >++ if 'REQUEST_URI' in environ: >+ reqUri = environ['REQUEST_URI'].split('?', 1) >+ >+- if not environ.has_key('QUERY_STRING') or not environ['QUERY_STRING']: >++ if 'QUERY_STRING' not in environ or not environ['QUERY_STRING']: >+ if reqUri is not None and len(reqUri) > 1: >+ environ['QUERY_STRING'] = reqUri[1] >+ else: >diff -Nru py-flup.orig/files/patch-flup_server_ajp__fork.py py-flup/files/patch-flup_server_ajp__fork.py >--- py-flup.orig/files/patch-flup_server_ajp__fork.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server_ajp__fork.py 2017-12-14 17:48:57.899672000 +1030 >@@ -0,0 +1,41 @@ >+--- flup/server/ajp_fork.py.orig 2009-05-18 22:44:52 UTC >++++ flup/server/ajp_fork.py >+@@ -133,7 +133,7 @@ class WSGIServer(BaseAJPServer, PreforkS >+ loggingLevel=loggingLevel, >+ debug=debug) >+ for key in ('multithreaded', 'multiprocess', 'jobClass', 'jobArgs'): >+- if kw.has_key(key): >++ if key in kw: >+ del kw[key] >+ PreforkServer.__init__(self, jobClass=Connection, jobArgs=(self,), **kw) >+ >+@@ -147,7 +147,7 @@ class WSGIServer(BaseAJPServer, PreforkS >+ >+ try: >+ sock = self._setupSocket() >+- except socket.error, e: >++ except socket.error as e: >+ self.logger.error('Failed to bind socket (%s), exiting', e[1]) >+ return False >+ >+@@ -163,17 +163,17 @@ class WSGIServer(BaseAJPServer, PreforkS >+ if __name__ == '__main__': >+ def test_app(environ, start_response): >+ """Probably not the most efficient example.""" >+- import cgi >++ from . import cgi >+ start_response('200 OK', [('Content-Type', 'text/html')]) >+ yield '<html><head><title>Hello World!</title></head>\n' \ >+ '<body>\n' \ >+ '<p>Hello World!</p>\n' \ >+ '<table border="1">' >+- names = environ.keys() >++ names = list(environ.keys()) >+ names.sort() >+ for name in names: >+ yield '<tr><td>%s</td><td>%s</td></tr>\n' % ( >+- name, cgi.escape(`environ[name]`)) >++ name, cgi.escape(repr(environ[name]))) >+ >+ form = cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ, >+ keep_blank_values=1) >diff -Nru py-flup.orig/files/patch-flup_server_cgi.py py-flup/files/patch-flup_server_cgi.py >--- py-flup.orig/files/patch-flup_server_cgi.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server_cgi.py 2017-12-14 17:48:57.899735000 +1030 >@@ -0,0 +1,20 @@ >+--- flup/server/cgi.py.orig 2009-01-13 16:59:26 UTC >++++ flup/server/cgi.py >+@@ -14,7 +14,7 @@ class WSGIServer(object): >+ >+ def run(self): >+ >+- environ = dict(os.environ.items()) >++ environ = dict(list(os.environ.items())) >+ environ['wsgi.input'] = sys.stdin >+ environ['wsgi.errors'] = sys.stderr >+ environ['wsgi.version'] = (1,0) >+@@ -50,7 +50,7 @@ class WSGIServer(object): >+ try: >+ if headers_sent: >+ # Re-raise original exception if headers sent >+- raise exc_info[0], exc_info[1], exc_info[2] >++ raise exc_info[0](exc_info[1]).with_traceback(exc_info[2]) >+ finally: >+ exc_info = None # avoid dangling circular ref >+ elif headers_set: >diff -Nru py-flup.orig/files/patch-flup_server_fcgi__base.py py-flup/files/patch-flup_server_fcgi__base.py >--- py-flup.orig/files/patch-flup_server_fcgi__base.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server_fcgi__base.py 2017-12-14 17:48:57.899901000 +1030 >@@ -0,0 +1,219 @@ >+--- flup/server/fcgi_base.py.orig 2009-05-04 19:57:51 UTC >++++ flup/server/fcgi_base.py >+@@ -31,18 +31,18 @@ import sys >+ import os >+ import signal >+ import struct >+-import cStringIO as StringIO >++import io as StringIO >+ import select >+ import socket >+ import errno >+ import traceback >+ >+ try: >+- import thread >++ import _thread >+ import threading >+ thread_available = True >+ except ImportError: >+- import dummy_thread as thread >++ import _dummy_thread as thread >+ import dummy_threading as threading >+ thread_available = False >+ >+@@ -218,7 +218,7 @@ class InputStream(object): >+ def __iter__(self): >+ return self >+ >+- def next(self): >++ def __next__(self): >+ r = self.readline() >+ if not r: >+ raise StopIteration >+@@ -414,13 +414,13 @@ def encode_pair(name, value): >+ if nameLength < 128: >+ s = chr(nameLength) >+ else: >+- s = struct.pack('!L', nameLength | 0x80000000L) >++ s = struct.pack('!L', nameLength | 0x80000000) >+ >+ valueLength = len(value) >+ if valueLength < 128: >+ s += chr(valueLength) >+ else: >+- s += struct.pack('!L', valueLength | 0x80000000L) >++ s += struct.pack('!L', valueLength | 0x80000000) >+ >+ return s + name + value >+ >+@@ -448,8 +448,8 @@ class Record(object): >+ while length: >+ try: >+ data = sock.recv(length) >+- except socket.error, e: >+- if e[0] == errno.EAGAIN: >++ except socket.error as e: >++ if e.args[0] == errno.EAGAIN: >+ select.select([sock], [], []) >+ continue >+ else: >+@@ -505,8 +505,8 @@ class Record(object): >+ while length: >+ try: >+ sent = sock.send(data) >+- except socket.error, e: >+- if e[0] == errno.EAGAIN: >++ except socket.error as e: >++ if e.args[0] == errno.EAGAIN: >+ select.select([], [sock], []) >+ continue >+ else: >+@@ -570,11 +570,11 @@ class Request(object): >+ try: >+ self._flush() >+ self._end(appStatus, protocolStatus) >+- except socket.error, e: >+- if e[0] != errno.EPIPE: >++ except socket.error as e: >++ if e.args[0] != errno.EPIPE: >+ raise >+ >+- def _end(self, appStatus=0L, protocolStatus=FCGI_REQUEST_COMPLETE): >++ def _end(self, appStatus=0, protocolStatus=FCGI_REQUEST_COMPLETE): >+ self._conn.end_request(self, appStatus, protocolStatus) >+ >+ def _flush(self): >+@@ -597,7 +597,7 @@ class CGIRequest(Request): >+ self.stderr = sys.stderr >+ self.data = StringIO.StringIO() >+ >+- def _end(self, appStatus=0L, protocolStatus=FCGI_REQUEST_COMPLETE): >++ def _end(self, appStatus=0, protocolStatus=FCGI_REQUEST_COMPLETE): >+ sys.exit(appStatus) >+ >+ def _flush(self): >+@@ -646,8 +646,8 @@ class Connection(object): >+ self.process_input() >+ except (EOFError, KeyboardInterrupt): >+ break >+- except (select.error, socket.error), e: >+- if e[0] == errno.EBADF: # Socket was closed by Request. >++ except (select.error, socket.error) as e: >++ if e.args[0] == errno.EBADF: # Socket was closed by Request. >+ break >+ raise >+ >+@@ -696,7 +696,7 @@ class Connection(object): >+ """ >+ rec.write(self._sock) >+ >+- def end_request(self, req, appStatus=0L, >++ def end_request(self, req, appStatus=0, >+ protocolStatus=FCGI_REQUEST_COMPLETE, remove=True): >+ """ >+ End a Request. >+@@ -745,7 +745,7 @@ class Connection(object): >+ >+ if not self._multiplexed and self._requests: >+ # Can't multiplex requests. >+- self.end_request(req, 0L, FCGI_CANT_MPX_CONN, remove=False) >++ self.end_request(req, 0, FCGI_CANT_MPX_CONN, remove=False) >+ else: >+ self._requests[inrec.requestId] = req >+ >+@@ -836,7 +836,7 @@ class MultiplexedConnection(Connection): >+ finally: >+ self._lock.release() >+ >+- def end_request(self, req, appStatus=0L, >++ def end_request(self, req, appStatus=0, >+ protocolStatus=FCGI_REQUEST_COMPLETE, remove=True): >+ self._lock.acquire() >+ try: >+@@ -862,7 +862,7 @@ class MultiplexedConnection(Connection): >+ self._lock.release() >+ >+ def _start_request(self, req): >+- thread.start_new_thread(req.run, ()) >++ _thread.start_new_thread(req.run, ()) >+ >+ def _do_params(self, inrec): >+ self._lock.acquire() >+@@ -941,7 +941,7 @@ class BaseFCGIServer(object): >+ self._umask = umask >+ >+ # Used to force single-threadedness >+- self._appLock = thread.allocate_lock() >++ self._appLock = _thread.allocate_lock() >+ >+ if thread_available: >+ try: >+@@ -979,11 +979,11 @@ class BaseFCGIServer(object): >+ socket.SOCK_STREAM) >+ try: >+ sock.getpeername() >+- except socket.error, e: >+- if e[0] == errno.ENOTSOCK: >++ except socket.error as e: >++ if e.args[0] == errno.ENOTSOCK: >+ # Not a socket, assume CGI context. >+ isFCGI = False >+- elif e[0] != errno.ENOTCONN: >++ elif e.args[0] != errno.ENOTCONN: >+ raise >+ >+ # FastCGI/CGI discrimination is broken on Mac OS X. >+@@ -1092,7 +1092,7 @@ class BaseFCGIServer(object): >+ try: >+ if headers_sent: >+ # Re-raise if too late >+- raise exc_info[0], exc_info[1], exc_info[2] >++ raise exc_info[0](exc_info[1]).with_traceback(exc_info[2]) >+ finally: >+ exc_info = None # avoid dangling circular ref >+ else: >+@@ -1125,8 +1125,8 @@ class BaseFCGIServer(object): >+ finally: >+ if hasattr(result, 'close'): >+ result.close() >+- except socket.error, e: >+- if e[0] != errno.EPIPE: >++ except socket.error as e: >++ if e.args[0] != errno.EPIPE: >+ raise # Don't let EPIPE propagate beyond server >+ finally: >+ if not self.multithreaded: >+@@ -1136,19 +1136,19 @@ class BaseFCGIServer(object): >+ >+ def _sanitizeEnv(self, environ): >+ """Ensure certain values are present, if required by WSGI.""" >+- if not environ.has_key('SCRIPT_NAME'): >++ if 'SCRIPT_NAME' not in environ: >+ environ['SCRIPT_NAME'] = '' >+ >+ reqUri = None >+- if environ.has_key('REQUEST_URI'): >++ if 'REQUEST_URI' in environ: >+ reqUri = environ['REQUEST_URI'].split('?', 1) >+ >+- if not environ.has_key('PATH_INFO') or not environ['PATH_INFO']: >++ if 'PATH_INFO' not in environ or not environ['PATH_INFO']: >+ if reqUri is not None: >+ environ['PATH_INFO'] = reqUri[0] >+ else: >+ environ['PATH_INFO'] = '' >+- if not environ.has_key('QUERY_STRING') or not environ['QUERY_STRING']: >++ if 'QUERY_STRING' not in environ or not environ['QUERY_STRING']: >+ if reqUri is not None and len(reqUri) > 1: >+ environ['QUERY_STRING'] = reqUri[1] >+ else: >+@@ -1160,7 +1160,7 @@ class BaseFCGIServer(object): >+ ('SERVER_NAME', 'localhost'), >+ ('SERVER_PORT', '80'), >+ ('SERVER_PROTOCOL', 'HTTP/1.0')]: >+- if not environ.has_key(name): >++ if name not in environ: >+ environ['wsgi.errors'].write('%s: missing FastCGI param %s ' >+ 'required by WSGI!\n' % >+ (self.__class__.__name__, name)) >diff -Nru py-flup.orig/files/patch-flup_server_fcgi__fork.py py-flup/files/patch-flup_server_fcgi__fork.py >--- py-flup.orig/files/patch-flup_server_fcgi__fork.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server_fcgi__fork.py 2017-12-14 17:48:57.899955000 +1030 >@@ -0,0 +1,42 @@ >+--- flup/server/fcgi_fork.py.orig 2009-05-18 22:45:19 UTC >++++ flup/server/fcgi_fork.py >+@@ -90,7 +90,7 @@ class WSGIServer(BaseFCGIServer, Prefork >+ roles=roles, >+ forceCGI=forceCGI) >+ for key in ('multithreaded', 'multiprocess', 'jobClass', 'jobArgs'): >+- if kw.has_key(key): >++ if key in kw: >+ del kw[key] >+ PreforkServer.__init__(self, jobClass=self._connectionClass, >+ jobArgs=(self,), **kw) >+@@ -125,8 +125,7 @@ class WSGIServer(BaseFCGIServer, Prefork >+ """ >+ self._web_server_addrs = os.environ.get('FCGI_WEB_SERVER_ADDRS') >+ if self._web_server_addrs is not None: >+- self._web_server_addrs = map(lambda x: x.strip(), >+- self._web_server_addrs.split(',')) >++ self._web_server_addrs = [x.strip() for x in self._web_server_addrs.split(',')] >+ >+ sock = self._setupSocket() >+ >+@@ -139,17 +138,17 @@ class WSGIServer(BaseFCGIServer, Prefork >+ if __name__ == '__main__': >+ def test_app(environ, start_response): >+ """Probably not the most efficient example.""" >+- import cgi >++ from . import cgi >+ start_response('200 OK', [('Content-Type', 'text/html')]) >+ yield '<html><head><title>Hello World!</title></head>\n' \ >+ '<body>\n' \ >+ '<p>Hello World!</p>\n' \ >+ '<table border="1">' >+- names = environ.keys() >++ names = list(environ.keys()) >+ names.sort() >+ for name in names: >+ yield '<tr><td>%s</td><td>%s</td></tr>\n' % ( >+- name, cgi.escape(`environ[name]`)) >++ name, cgi.escape(repr(environ[name]))) >+ >+ form = cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ, >+ keep_blank_values=1) >diff -Nru py-flup.orig/files/patch-flup_server_fcgi__single.py py-flup/files/patch-flup_server_fcgi__single.py >--- py-flup.orig/files/patch-flup_server_fcgi__single.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server_fcgi__single.py 2017-12-14 17:48:57.900011000 +1030 >@@ -0,0 +1,42 @@ >+--- flup/server/fcgi_single.py.orig 2009-05-18 22:45:33 UTC >++++ flup/server/fcgi_single.py >+@@ -90,7 +90,7 @@ class WSGIServer(BaseFCGIServer, SingleS >+ roles=roles, >+ forceCGI=forceCGI) >+ for key in ('jobClass', 'jobArgs'): >+- if kw.has_key(key): >++ if key in kw: >+ del kw[key] >+ SingleServer.__init__(self, jobClass=self._connectionClass, >+ jobArgs=(self,), **kw) >+@@ -111,8 +111,7 @@ class WSGIServer(BaseFCGIServer, SingleS >+ """ >+ self._web_server_addrs = os.environ.get('FCGI_WEB_SERVER_ADDRS') >+ if self._web_server_addrs is not None: >+- self._web_server_addrs = map(lambda x: x.strip(), >+- self._web_server_addrs.split(',')) >++ self._web_server_addrs = [x.strip() for x in self._web_server_addrs.split(',')] >+ >+ sock = self._setupSocket() >+ >+@@ -125,17 +124,17 @@ class WSGIServer(BaseFCGIServer, SingleS >+ if __name__ == '__main__': >+ def test_app(environ, start_response): >+ """Probably not the most efficient example.""" >+- import cgi >++ from . import cgi >+ start_response('200 OK', [('Content-Type', 'text/html')]) >+ yield '<html><head><title>Hello World!</title></head>\n' \ >+ '<body>\n' \ >+ '<p>Hello World!</p>\n' \ >+ '<table border="1">' >+- names = environ.keys() >++ names = list(environ.keys()) >+ names.sort() >+ for name in names: >+ yield '<tr><td>%s</td><td>%s</td></tr>\n' % ( >+- name, cgi.escape(`environ[name]`)) >++ name, cgi.escape(repr(environ[name]))) >+ >+ form = cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ, >+ keep_blank_values=1) >diff -Nru py-flup.orig/files/patch-flup_server_fcgi.py py-flup/files/patch-flup_server_fcgi.py >--- py-flup.orig/files/patch-flup_server_fcgi.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server_fcgi.py 2017-12-14 17:48:57.899806000 +1030 >@@ -0,0 +1,42 @@ >+--- flup/server/fcgi.py.orig 2009-05-18 22:45:00 UTC >++++ flup/server/fcgi.py >+@@ -90,7 +90,7 @@ class WSGIServer(BaseFCGIServer, Threade >+ roles=roles, >+ forceCGI=forceCGI) >+ for key in ('jobClass', 'jobArgs'): >+- if kw.has_key(key): >++ if key in kw: >+ del kw[key] >+ ThreadedServer.__init__(self, jobClass=self._connectionClass, >+ jobArgs=(self,), **kw) >+@@ -106,8 +106,7 @@ class WSGIServer(BaseFCGIServer, Threade >+ """ >+ self._web_server_addrs = os.environ.get('FCGI_WEB_SERVER_ADDRS') >+ if self._web_server_addrs is not None: >+- self._web_server_addrs = map(lambda x: x.strip(), >+- self._web_server_addrs.split(',')) >++ self._web_server_addrs = [x.strip() for x in self._web_server_addrs.split(',')] >+ >+ sock = self._setupSocket() >+ >+@@ -120,17 +119,17 @@ class WSGIServer(BaseFCGIServer, Threade >+ if __name__ == '__main__': >+ def test_app(environ, start_response): >+ """Probably not the most efficient example.""" >+- import cgi >++ from . import cgi >+ start_response('200 OK', [('Content-Type', 'text/html')]) >+ yield '<html><head><title>Hello World!</title></head>\n' \ >+ '<body>\n' \ >+ '<p>Hello World!</p>\n' \ >+ '<table border="1">' >+- names = environ.keys() >++ names = list(environ.keys()) >+ names.sort() >+ for name in names: >+ yield '<tr><td>%s</td><td>%s</td></tr>\n' % ( >+- name, cgi.escape(`environ[name]`)) >++ name, cgi.escape(repr(environ[name]))) >+ >+ form = cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ, >+ keep_blank_values=1) >diff -Nru py-flup.orig/files/patch-flup_server_paste__factory.py py-flup/files/patch-flup_server_paste__factory.py >--- py-flup.orig/files/patch-flup_server_paste__factory.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server_paste__factory.py 2017-12-14 17:48:57.900088000 +1030 >@@ -0,0 +1,20 @@ >+--- flup/server/paste_factory.py.orig 2009-05-18 22:43:44 UTC >++++ flup/server/paste_factory.py >+@@ -1,7 +1,7 @@ >+ # (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org) >+ # Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php >+ def asbool(obj): >+- if isinstance(obj, (str, unicode)): >++ if isinstance(obj, str): >+ obj = obj.strip().lower() >+ if obj in ['true', 'yes', 'on', 'y', 't', '1']: >+ return True >+@@ -13,7 +13,7 @@ def asbool(obj): >+ return bool(obj) >+ >+ def aslist(obj, sep=None, strip=True): >+- if isinstance(obj, (str, unicode)): >++ if isinstance(obj, str): >+ lst = obj.split(sep) >+ if strip: >+ lst = [v.strip() for v in lst] >diff -Nru py-flup.orig/files/patch-flup_server_preforkserver.py py-flup/files/patch-flup_server_preforkserver.py >--- py-flup.orig/files/patch-flup_server_preforkserver.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server_preforkserver.py 2017-12-14 17:48:57.900178000 +1030 >@@ -0,0 +1,181 @@ >+--- flup/server/preforkserver.py.orig 2009-05-04 20:42:06 UTC >++++ flup/server/preforkserver.py >+@@ -52,7 +52,7 @@ if not hasattr(socket, 'socketpair'): >+ import eunuchs.socketpair >+ except ImportError: >+ # TODO: Other alternatives? Perhaps using os.pipe()? >+- raise ImportError, 'Requires eunuchs module for Python < 2.4' >++ raise ImportError('Requires eunuchs module for Python < 2.4') >+ >+ def socketpair(): >+ s1, s2 = eunuchs.socketpair.socketpair() >+@@ -123,7 +123,7 @@ class PreforkServer(object): >+ if not self._spawnChild(sock): break >+ >+ # Wait on any socket activity from live children. >+- r = [x['file'] for x in self._children.values() >++ r = [x['file'] for x in list(self._children.values()) >+ if x['file'] is not None] >+ >+ if len(r) == len(self._children): >+@@ -135,8 +135,8 @@ class PreforkServer(object): >+ >+ try: >+ r, w, e = select.select(r, [], [], timeout) >+- except select.error, e: >+- if e[0] != errno.EINTR: >++ except select.error as e: >++ if e.args[0] != errno.EINTR: >+ raise >+ >+ # Scan child sockets and tend to those that need attention. >+@@ -144,13 +144,13 @@ class PreforkServer(object): >+ # Receive status byte. >+ try: >+ state = child.recv(1) >+- except socket.error, e: >+- if e[0] in (errno.EAGAIN, errno.EINTR): >++ except socket.error as e: >++ if e.args[0] in (errno.EAGAIN, errno.EINTR): >+ # Guess it really didn't need attention? >+ continue >+ raise >+ # Try to match it with a child. (Do we need a reverse map?) >+- for pid,d in self._children.items(): >++ for pid,d in list(self._children.items()): >+ if child is d['file']: >+ if state: >+ # Set availability status accordingly. >+@@ -167,7 +167,7 @@ class PreforkServer(object): >+ self._reapChildren() >+ >+ # See who and how many children are available. >+- availList = filter(lambda x: x[1]['avail'], self._children.items()) >++ availList = [x for x in list(self._children.items()) if x[1]['avail']] >+ avail = len(availList) >+ >+ if avail < self._minSpare: >+@@ -205,7 +205,7 @@ class PreforkServer(object): >+ Any children remaining after 10 seconds is SIGKILLed. >+ """ >+ # Let all children know it's time to go. >+- for pid,d in self._children.items(): >++ for pid,d in list(self._children.items()): >+ if d['file'] is not None: >+ d['file'].close() >+ d['file'] = None >+@@ -213,8 +213,8 @@ class PreforkServer(object): >+ # Child is unavailable. SIGINT it. >+ try: >+ os.kill(pid, signal.SIGINT) >+- except OSError, e: >+- if e[0] != errno.ESRCH: >++ except OSError as e: >++ if e.args[0] != errno.ESRCH: >+ raise >+ >+ def alrmHandler(signum, frame): >+@@ -229,20 +229,20 @@ class PreforkServer(object): >+ while len(self._children): >+ try: >+ pid, status = os.wait() >+- except OSError, e: >+- if e[0] in (errno.ECHILD, errno.EINTR): >++ except OSError as e: >++ if e.args[0] in (errno.ECHILD, errno.EINTR): >+ break >+- if self._children.has_key(pid): >++ if pid in self._children: >+ del self._children[pid] >+ >+ signal.signal(signal.SIGALRM, oldSIGALRM) >+ >+ # Forcefully kill any remaining children. >+- for pid in self._children.keys(): >++ for pid in list(self._children.keys()): >+ try: >+ os.kill(pid, signal.SIGKILL) >+- except OSError, e: >+- if e[0] != errno.ESRCH: >++ except OSError as e: >++ if e.args[0] != errno.ESRCH: >+ raise >+ >+ def _reapChildren(self): >+@@ -250,13 +250,13 @@ class PreforkServer(object): >+ while True: >+ try: >+ pid, status = os.waitpid(-1, os.WNOHANG) >+- except OSError, e: >+- if e[0] == errno.ECHILD: >++ except OSError as e: >++ if e.args[0] == errno.ECHILD: >+ break >+ raise >+ if pid <= 0: >+ break >+- if self._children.has_key(pid): # Sanity check. >++ if pid in self._children: # Sanity check. >+ if self._children[pid]['file'] is not None: >+ self._children[pid]['file'].close() >+ del self._children[pid] >+@@ -274,8 +274,8 @@ class PreforkServer(object): >+ setCloseOnExec(child) >+ try: >+ pid = os.fork() >+- except OSError, e: >+- if e[0] in (errno.EAGAIN, errno.ENOMEM): >++ except OSError as e: >++ if e.args[0] in (errno.EAGAIN, errno.ENOMEM): >+ return False # Can't fork anymore. >+ raise >+ if not pid: >+@@ -287,7 +287,7 @@ class PreforkServer(object): >+ # Restore signal handlers. >+ self._restoreSignalHandlers() >+ # Close copies of child sockets. >+- for f in [x['file'] for x in self._children.values() >++ for f in [x['file'] for x in list(self._children.values()) >+ if x['file'] is not None]: >+ f.close() >+ self._children = {} >+@@ -315,10 +315,10 @@ class PreforkServer(object): >+ try: >+ parent.send(msg) >+ return True >+- except socket.error, e: >+- if e[0] == errno.EPIPE: >++ except socket.error as e: >++ if e.args[0] == errno.EPIPE: >+ return False # Parent is gone >+- if e[0] == errno.EAGAIN: >++ if e.args[0] == errno.EAGAIN: >+ # Wait for socket change before sending again >+ select.select([], [parent], []) >+ else: >+@@ -354,8 +354,8 @@ class PreforkServer(object): >+ # Otherwise, there's activity on the main socket... >+ try: >+ clientSock, addr = sock.accept() >+- except socket.error, e: >+- if e[0] == errno.EAGAIN: >++ except socket.error as e: >++ if e.args[0] == errno.EAGAIN: >+ # Or maybe not. >+ continue >+ raise >+@@ -420,12 +420,12 @@ if __name__ == '__main__': >+ self._sock = sock >+ self._addr = addr >+ def run(self): >+- print "Client connection opened from %s:%d" % self._addr >++ print("Client connection opened from %s:%d" % self._addr) >+ self._sock.send('Hello World!\n') >+ self._sock.setblocking(1) >+ self._sock.recv(1) >+ self._sock.close() >+- print "Client connection closed from %s:%d" % self._addr >++ print("Client connection closed from %s:%d" % self._addr) >+ sock = socket.socket() >+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) >+ sock.bind(('', 8080)) >diff -Nru py-flup.orig/files/patch-flup_server_scgi__base.py py-flup/files/patch-flup_server_scgi__base.py >--- py-flup.orig/files/patch-flup_server_scgi__base.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server_scgi__base.py 2017-12-14 17:48:57.900358000 +1030 >@@ -0,0 +1,148 @@ >+--- flup/server/scgi_base.py.orig 2008-09-11 19:25:32 UTC >++++ flup/server/scgi_base.py >+@@ -32,7 +32,7 @@ import logging >+ import socket >+ import select >+ import errno >+-import cStringIO as StringIO >++import io as StringIO >+ import signal >+ import datetime >+ import os >+@@ -40,7 +40,7 @@ import warnings >+ >+ # Threads are required. If you want a non-threaded (forking) version, look at >+ # SWAP <http://www.idyll.org/~t/www-tools/wsgi/>. >+-import thread >++import _thread >+ import threading >+ >+ __all__ = ['BaseSCGIServer'] >+@@ -76,8 +76,8 @@ def recvall(sock, length): >+ while length: >+ try: >+ data = sock.recv(length) >+- except socket.error, e: >+- if e[0] == errno.EAGAIN: >++ except socket.error as e: >++ if e.args[0] == errno.EAGAIN: >+ select.select([sock], [], []) >+ continue >+ else: >+@@ -99,8 +99,8 @@ def readNetstring(sock): >+ while True: >+ try: >+ c = sock.recv(1) >+- except socket.error, e: >+- if e[0] == errno.EAGAIN: >++ except socket.error as e: >++ if e.args[0] == errno.EAGAIN: >+ select.select([sock], [], []) >+ continue >+ else: >+@@ -117,7 +117,7 @@ def readNetstring(sock): >+ if size < 0: >+ raise ValueError >+ except ValueError: >+- raise ProtocolError, 'invalid netstring length' >++ raise ProtocolError('invalid netstring length') >+ >+ # Now read the string. >+ s, length = recvall(sock, size) >+@@ -132,7 +132,7 @@ def readNetstring(sock): >+ raise EOFError >+ >+ if trailer != ',': >+- raise ProtocolError, 'invalid netstring trailer' >++ raise ProtocolError('invalid netstring trailer') >+ >+ return s >+ >+@@ -219,7 +219,7 @@ class Connection(object): >+ self.processInput() >+ except (EOFError, KeyboardInterrupt): >+ pass >+- except ProtocolError, e: >++ except ProtocolError as e: >+ self.logger.error("Protocol error '%s'", str(e)) >+ except: >+ self.logger.exception('Exception caught in Connection') >+@@ -236,20 +236,20 @@ class Connection(object): >+ headers = readNetstring(self._sock) >+ headers = headers.split('\x00')[:-1] >+ if len(headers) % 2 != 0: >+- raise ProtocolError, 'invalid headers' >++ raise ProtocolError('invalid headers') >+ environ = {} >+ for i in range(len(headers) / 2): >+ environ[headers[2*i]] = headers[2*i+1] >+ >+ clen = environ.get('CONTENT_LENGTH') >+ if clen is None: >+- raise ProtocolError, 'missing CONTENT_LENGTH' >++ raise ProtocolError('missing CONTENT_LENGTH') >+ try: >+ clen = int(clen) >+ if clen < 0: >+ raise ValueError >+ except ValueError: >+- raise ProtocolError, 'invalid CONTENT_LENGTH' >++ raise ProtocolError('invalid CONTENT_LENGTH') >+ >+ self._sock.setblocking(1) >+ if clen: >+@@ -327,7 +327,7 @@ class BaseSCGIServer(object): >+ self._allowedServers = allowedServers >+ >+ # Used to force single-threadedness. >+- self._appLock = thread.allocate_lock() >++ self._appLock = _thread.allocate_lock() >+ >+ self.logger = logging.getLogger(LoggerName) >+ self.logger.setLevel(loggingLevel) >+@@ -430,7 +430,7 @@ class BaseSCGIServer(object): >+ try: >+ if headers_sent: >+ # Re-raise if too late >+- raise exc_info[0], exc_info[1], exc_info[2] >++ raise exc_info[0](exc_info[1]).with_traceback(exc_info[2]) >+ finally: >+ exc_info = None # avoid dangling circular ref >+ else: >+@@ -463,8 +463,8 @@ class BaseSCGIServer(object): >+ finally: >+ if hasattr(result, 'close'): >+ result.close() >+- except socket.error, e: >+- if e[0] != errno.EPIPE: >++ except socket.error as e: >++ if e.args[0] != errno.EPIPE: >+ raise # Don't let EPIPE propagate beyond server >+ finally: >+ if not self.multithreaded: >+@@ -473,11 +473,11 @@ class BaseSCGIServer(object): >+ def _sanitizeEnv(self, environ): >+ """Fill-in/deduce missing values in environ.""" >+ reqUri = None >+- if environ.has_key('REQUEST_URI'): >++ if 'REQUEST_URI' in environ: >+ reqUri = environ['REQUEST_URI'].split('?', 1) >+ >+ # Ensure QUERY_STRING exists >+- if not environ.has_key('QUERY_STRING') or not environ['QUERY_STRING']: >++ if 'QUERY_STRING' not in environ or not environ['QUERY_STRING']: >+ if reqUri is not None and len(reqUri) > 1: >+ environ['QUERY_STRING'] = reqUri[1] >+ else: >+@@ -500,9 +500,9 @@ class BaseSCGIServer(object): >+ >+ if scriptName is NoDefault: >+ # Pull SCRIPT_NAME/PATH_INFO from environment, with empty defaults >+- if not environ.has_key('SCRIPT_NAME'): >++ if 'SCRIPT_NAME' not in environ: >+ environ['SCRIPT_INFO'] = '' >+- if not environ.has_key('PATH_INFO') or not environ['PATH_INFO']: >++ if 'PATH_INFO' not in environ or not environ['PATH_INFO']: >+ if reqUri is not None: >+ environ['PATH_INFO'] = reqUri[0] >+ else: >diff -Nru py-flup.orig/files/patch-flup_server_scgi__fork.py py-flup/files/patch-flup_server_scgi__fork.py >--- py-flup.orig/files/patch-flup_server_scgi__fork.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server_scgi__fork.py 2017-12-14 17:48:57.900414000 +1030 >@@ -0,0 +1,41 @@ >+--- flup/server/scgi_fork.py.orig 2009-05-18 22:45:57 UTC >++++ flup/server/scgi_fork.py >+@@ -128,7 +128,7 @@ class WSGIServer(BaseSCGIServer, Prefork >+ loggingLevel=loggingLevel, >+ debug=debug) >+ for key in ('multithreaded', 'multiprocess', 'jobClass', 'jobArgs'): >+- if kw.has_key(key): >++ if key in kw: >+ del kw[key] >+ PreforkServer.__init__(self, jobClass=Connection, jobArgs=(self,), **kw) >+ >+@@ -142,7 +142,7 @@ class WSGIServer(BaseSCGIServer, Prefork >+ >+ try: >+ sock = self._setupSocket() >+- except socket.error, e: >++ except socket.error as e: >+ self.logger.error('Failed to bind socket (%s), exiting', e[1]) >+ return False >+ >+@@ -158,17 +158,17 @@ class WSGIServer(BaseSCGIServer, Prefork >+ if __name__ == '__main__': >+ def test_app(environ, start_response): >+ """Probably not the most efficient example.""" >+- import cgi >++ from . import cgi >+ start_response('200 OK', [('Content-Type', 'text/html')]) >+ yield '<html><head><title>Hello World!</title></head>\n' \ >+ '<body>\n' \ >+ '<p>Hello World!</p>\n' \ >+ '<table border="1">' >+- names = environ.keys() >++ names = list(environ.keys()) >+ names.sort() >+ for name in names: >+ yield '<tr><td>%s</td><td>%s</td></tr>\n' % ( >+- name, cgi.escape(`environ[name]`)) >++ name, cgi.escape(repr(environ[name]))) >+ >+ form = cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ, >+ keep_blank_values=1) >diff -Nru py-flup.orig/files/patch-flup_server_scgi.py py-flup/files/patch-flup_server_scgi.py >--- py-flup.orig/files/patch-flup_server_scgi.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server_scgi.py 2017-12-14 17:48:57.900235000 +1030 >@@ -0,0 +1,41 @@ >+--- flup/server/scgi.py.orig 2009-05-18 22:45:49 UTC >++++ flup/server/scgi.py >+@@ -129,7 +129,7 @@ class WSGIServer(BaseSCGIServer, Threade >+ loggingLevel=loggingLevel, >+ debug=debug) >+ for key in ('jobClass', 'jobArgs'): >+- if kw.has_key(key): >++ if key in kw: >+ del kw[key] >+ ThreadedServer.__init__(self, jobClass=Connection, jobArgs=(self,), >+ **kw) >+@@ -144,7 +144,7 @@ class WSGIServer(BaseSCGIServer, Threade >+ >+ try: >+ sock = self._setupSocket() >+- except socket.error, e: >++ except socket.error as e: >+ self.logger.error('Failed to bind socket (%s), exiting', e[1]) >+ return False >+ >+@@ -160,17 +160,17 @@ class WSGIServer(BaseSCGIServer, Threade >+ if __name__ == '__main__': >+ def test_app(environ, start_response): >+ """Probably not the most efficient example.""" >+- import cgi >++ from . import cgi >+ start_response('200 OK', [('Content-Type', 'text/html')]) >+ yield '<html><head><title>Hello World!</title></head>\n' \ >+ '<body>\n' \ >+ '<p>Hello World!</p>\n' \ >+ '<table border="1">' >+- names = environ.keys() >++ names = list(environ.keys()) >+ names.sort() >+ for name in names: >+ yield '<tr><td>%s</td><td>%s</td></tr>\n' % ( >+- name, cgi.escape(`environ[name]`)) >++ name, cgi.escape(repr(environ[name]))) >+ >+ form = cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ, >+ keep_blank_values=1) >diff -Nru py-flup.orig/files/patch-flup_server_singleserver.py py-flup/files/patch-flup_server_singleserver.py >--- py-flup.orig/files/patch-flup_server_singleserver.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server_singleserver.py 2017-12-14 17:48:57.900506000 +1030 >@@ -0,0 +1,38 @@ >+--- flup/server/singleserver.py.orig 2009-05-04 19:57:51 UTC >++++ flup/server/singleserver.py >+@@ -70,16 +70,16 @@ class SingleServer(object): >+ while self._keepGoing: >+ try: >+ r, w, e = select.select([sock], [], [], timeout) >+- except select.error, e: >+- if e[0] == errno.EINTR: >++ except select.error as e: >++ if e.args[0] == errno.EINTR: >+ continue >+ raise >+ >+ if r: >+ try: >+ clientSock, addr = sock.accept() >+- except socket.error, e: >+- if e[0] in (errno.EINTR, errno.EAGAIN): >++ except socket.error as e: >++ if e.args[0] in (errno.EINTR, errno.EAGAIN): >+ continue >+ raise >+ >+@@ -153,12 +153,12 @@ if __name__ == '__main__': >+ self._sock = sock >+ self._addr = addr >+ def run(self): >+- print "Client connection opened from %s:%d" % self._addr >++ print("Client connection opened from %s:%d" % self._addr) >+ self._sock.send('Hello World!\n') >+ self._sock.setblocking(1) >+ self._sock.recv(1) >+ self._sock.close() >+- print "Client connection closed from %s:%d" % self._addr >++ print("Client connection closed from %s:%d" % self._addr) >+ sock = socket.socket() >+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) >+ sock.bind(('', 8080)) >diff -Nru py-flup.orig/files/patch-flup_server_threadedserver.py py-flup/files/patch-flup_server_threadedserver.py >--- py-flup.orig/files/patch-flup_server_threadedserver.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server_threadedserver.py 2017-12-14 17:48:57.900568000 +1030 >@@ -0,0 +1,38 @@ >+--- flup/server/threadedserver.py.orig 2007-10-17 16:48:03 UTC >++++ flup/server/threadedserver.py >+@@ -74,16 +74,16 @@ class ThreadedServer(object): >+ while self._keepGoing: >+ try: >+ r, w, e = select.select([sock], [], [], timeout) >+- except select.error, e: >+- if e[0] == errno.EINTR: >++ except select.error as e: >++ if e.args[0] == errno.EINTR: >+ continue >+ raise >+ >+ if r: >+ try: >+ clientSock, addr = sock.accept() >+- except socket.error, e: >+- if e[0] in (errno.EINTR, errno.EAGAIN): >++ except socket.error as e: >++ if e.args[0] in (errno.EINTR, errno.EAGAIN): >+ continue >+ raise >+ >+@@ -162,12 +162,12 @@ if __name__ == '__main__': >+ self._sock = sock >+ self._addr = addr >+ def run(self): >+- print "Client connection opened from %s:%d" % self._addr >++ print("Client connection opened from %s:%d" % self._addr) >+ self._sock.send('Hello World!\n') >+ self._sock.setblocking(1) >+ self._sock.recv(1) >+ self._sock.close() >+- print "Client connection closed from %s:%d" % self._addr >++ print("Client connection closed from %s:%d" % self._addr) >+ sock = socket.socket() >+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) >+ sock.bind(('', 8080)) >diff -Nru py-flup.orig/files/patch-flup_server_threadpool.py py-flup/files/patch-flup_server_threadpool.py >--- py-flup.orig/files/patch-flup_server_threadpool.py 1970-01-01 09:30:00.000000000 +0930 >+++ py-flup/files/patch-flup_server_threadpool.py 2017-12-14 17:48:57.900636000 +1030 >@@ -0,0 +1,38 @@ >+--- flup/server/threadpool.py.orig 2007-10-17 16:48:03 UTC >++++ flup/server/threadpool.py >+@@ -28,7 +28,7 @@ __author__ = 'Allan Saddi <allan@saddi.c >+ __version__ = '$Revision$' >+ >+ import sys >+-import thread >++import _thread >+ import threading >+ >+ class ThreadPool(object): >+@@ -38,7 +38,7 @@ class ThreadPool(object): >+ the number of threads that can be started, but this can be controlled >+ by maxThreads. >+ """ >+- def __init__(self, minSpare=1, maxSpare=5, maxThreads=sys.maxint): >++ def __init__(self, minSpare=1, maxSpare=5, maxThreads=sys.maxsize): >+ self._minSpare = minSpare >+ self._maxSpare = maxSpare >+ self._maxThreads = max(minSpare, maxThreads) >+@@ -49,7 +49,7 @@ class ThreadPool(object): >+ >+ # Start the minimum number of worker threads. >+ for i in range(maxSpare): >+- thread.start_new_thread(self._worker, ()) >++ _thread.start_new_thread(self._worker, ()) >+ >+ def addJob(self, job, allowQueuing=True): >+ """ >+@@ -71,7 +71,7 @@ class ThreadPool(object): >+ self._workerCount < self._maxThreads: >+ self._workerCount += 1 >+ self._idleCount += 1 >+- thread.start_new_thread(self._worker, ()) >++ _thread.start_new_thread(self._worker, ()) >+ >+ # Hand off the job. >+ if self._idleCount or allowQueuing: >diff -Nru py-flup.orig/Makefile py-flup/Makefile >--- py-flup.orig/Makefile 2017-12-14 18:59:27.296110000 +1030 >+++ py-flup/Makefile 2017-12-14 18:58:14.985821000 +1030 >@@ -3,16 +3,19 @@ > > PORTNAME= flup > PORTVERSION= 1.0.2 >-PORTREVISION= 2 >+PORTREVISION= 3 > CATEGORIES= www python > MASTER_SITES= http://www.saddi.com/software/flup/dist/ \ > CHEESESHOP > PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} > > MAINTAINER= lwhsu@FreeBSD.org >-COMMENT= Random assortment of WSGI servers, middleware >+COMMENT= Random assortment of WSGI servers > >-USES= python:2.7 >+LICENSE= BSD2CLAUSE >+ >+USES= python > USE_PYTHON= distutils autoplist >+NO_ARCH= yes > > .include <bsd.port.mk> >diff -Nru py-flup.orig/pkg-descr py-flup/pkg-descr >--- py-flup.orig/pkg-descr 2017-12-14 18:59:27.296226000 +1030 >+++ py-flup/pkg-descr 2017-12-14 17:48:57.900729000 +1030 >@@ -1,10 +1,4 @@ > This Python package is a random collection of WSGI modules > written by Allan Saddi. > >-flup is functionally divided into three components: >- >- * FlupServers >- * FlupMiddleware >- * FlupPublisher >- > WWW: http://www.saddi.com/software/flup/
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 224332
:
188818
|
188873
|
188966
|
188997
|
188998