I'm categorically rejecting the 2to3 approach--for myself anyway. If you think it would help, feel free to:

"upgrade" CP to 2.6, which AFAICT means ensuring it will no longer work in 2.5 or previous versions turn on the 3k warning import-and-fix until you don't get any warnings run-tests-and-fix until you don't get any warnings run 2to3 import-and-fix until you don't get any errors run-tests-and-fix until you don't get any errors wait for bug reports

Me, I'd rather just drop cherrypy/ into 3k and skip steps 1-5.

Changes I had to make so far (http://www.cherrypy.org/changeset/2029):

(4) urlparse -> urllib.parse

(24) "except (ExcA, ExcB):" -> "except ExcA, ExcB:"

(30) "except ExcClass, x:" -> "except ExcClass as x"

(22) u"" -> ""

(1) BaseHTTPServer -> http.server

(1) rfc822 -> email.utils

(4) md5.new() -> hashlib.md5()

(3) sha.new() -> hashlib.sha1()

(3) urllib2 -> urllib

(28) StringIO -> io

(1) func.func_code -> func. code

(6) Cookie -> http.cookies

(3) ConfigParser -> configparser

(1) rfc822._monthnames -> email._parseaddr._monthnames

(105) print -> print()

(35) httplib -> http.client

(22) basestring -> (str, bytes)

(12) items() -> list(items())

(46) iteritems() -> items()

(11) Thread.get/setName -> get/set_name

(1) exec "" -> exec("")

(1) 0777 -> 0o777

(1) Queue -> queue

(1) urllib.unquote -> urllib.parse.unquote

At the moment, I'm a bit blocked importing wsgiserver--we had a nonblocking version of makefile that subclassed the old socket._fileobject class. Looks like the whole socket implementation has changed (and much of it pushed down into C). Not looking forward to reimplementing that.