Merged revisions 83212,83829,83833,83838-83839,83878,84019,84025,84028,84032,84036 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r83212 | florent.xicluna | 2010-07-28 18:39:41 +0200 (mer., 28 juil. 2010) | 2 lines

  Syntax cleanup.
........
  r83829 | florent.xicluna | 2010-08-08 18:16:07 +0200 (dim., 08 août 2010) | 2 lines

  Use unittest specific methods for some urllib test cases.  And replace urllib2 with urllib.request in comments.
........
  r83833 | florent.xicluna | 2010-08-08 18:25:27 +0200 (dim., 08 août 2010) | 2 lines

  Add test case for the HTTPResponse being an iterable.  Follow-up of issue #4608.
........
  r83838 | florent.xicluna | 2010-08-08 20:03:44 +0200 (dim., 08 août 2010) | 2 lines

  Typo.
........
  r83839 | florent.xicluna | 2010-08-08 20:06:13 +0200 (dim., 08 août 2010) | 2 lines

  Issue #7564: Skip test_ioctl if another process is attached to /dev/tty.
........
  r83878 | florent.xicluna | 2010-08-09 10:29:08 +0200 (lun., 09 août 2010) | 1 line

  Merge the 2to3 script from /sandbox/trunk/2to3/2to3, revision 72867 (latest).
........
  r84019 | florent.xicluna | 2010-08-14 17:56:42 +0200 (sam., 14 août 2010) | 11 lines

  Merged manually from 2.7 branch to 3.x trunk.

    ------------------------------------------------------------------------
    r79925 | nick.coghlan | 2010-04-10 16:24:36 +0200 (sam. 10 avril 2010)

    Try to turn some buildbots green by allowing test_multiprocessing to
    pass even if it hits the sys.exc_clear code in the threading module, and
    improve the test coverage by making the ctypes dependencies a bit more
    granular (two of the cited ctypes objects don't exist on my system)
    ------------------------------------------------------------------------
........
  r84025 | florent.xicluna | 2010-08-14 18:56:27 +0200 (sam., 14 août 2010) | 1 line

  List Misc/python-config.in in Misc/README.  Fix few typos.
........
  r84028 | florent.xicluna | 2010-08-14 19:02:49 +0200 (sam., 14 août 2010) | 1 line

  Fix order.
........
  r84032 | florent.xicluna | 2010-08-14 19:15:31 +0200 (sam., 14 août 2010) | 1 line

  Convert to spaces.
........
  r84036 | florent.xicluna | 2010-08-14 20:03:19 +0200 (sam., 14 août 2010) | 1 line

  Remove bad merge (from svnmerge r82301)
........
This commit is contained in:
Florent Xicluna 2010-08-14 18:24:40 +00:00
parent 3554473309
commit b4efb3d81e
16 changed files with 156 additions and 112 deletions

View File

@ -1163,10 +1163,6 @@ functions based on regular expressions.
You can use :meth:`str.maketrans` to create a translation map from
character-to-character mappings in different formats.
You can use the :func:`~string.maketrans` helper function in the :mod:`string`
module to create a translation table. For string objects, set the *table*
argument to ``None`` for translations that only delete characters:
.. note::
An even more flexible approach is to create a custom character mapping

View File

@ -164,7 +164,7 @@ class SampleCallbacksTestCase(unittest.TestCase):
result = integrate(0.0, 1.0, CALLBACK(func), 10)
diff = abs(result - 1./3.)
self.assertTrue(diff < 0.01, "%s not less than 0.01" % diff)
self.assertLess(diff, 0.01, "%s not less than 0.01" % diff)
################################################################

View File

@ -397,7 +397,7 @@ def _make_iterencode(markers, _default, _encoder, _indent, _floatstr,
yield 'true'
elif o is False:
yield 'false'
elif isinstance(o, (int, int)):
elif isinstance(o, int):
yield str(o)
elif isinstance(o, float):
yield _floatstr(o)

View File

@ -733,7 +733,7 @@ pylong = StackObject(
pyinteger_or_bool = StackObject(
name='int_or_bool',
obtype=(int, int, bool),
obtype=(int, bool),
doc="A Python integer object (short or long), or "
"a Python bool.")

View File

@ -15,7 +15,7 @@ def isint(x):
def isnum(x):
"""Test whether an object is an instance of a built-in numeric type."""
for T in int, int, float, complex:
for T in int, float, complex:
if isinstance(x, T):
return 1
return 0

View File

@ -7,9 +7,17 @@ get_attribute(termios, 'TIOCGPGRP') #Can't run tests without this feature
try:
tty = open("/dev/tty", "r")
tty.close()
except IOError:
raise unittest.SkipTest("Unable to open /dev/tty")
else:
# Skip if another process is in foreground
r = fcntl.ioctl(tty, termios.TIOCGPGRP, " ")
tty.close()
rpgrp = struct.unpack("i", r)[0]
if rpgrp not in (os.getpgrp(), os.getsid(0)):
raise unittest.SkipTest("Neither the process group nor the session "
"are attached to /dev/tty")
del tty, r, rpgrp
try:
import pty

View File

@ -14,7 +14,6 @@ import os
import gc
import signal
import array
import copy
import socket
import random
import logging
@ -68,11 +67,21 @@ WIN32 = (sys.platform == "win32")
#
try:
from ctypes import Structure, Value, copy, c_int, c_double
from ctypes import Structure, c_int, c_double
except ImportError:
Structure = object
c_int = c_double = None
try:
from ctypes import Value
except ImportError:
Value = None
try:
from ctypes import copy as ctypes_copy
except ImportError:
ctypes_copy = None
#
# Creates a wrapper for a function which records the time it takes to finish
#
@ -1103,11 +1112,9 @@ def baz():
yield i*i
class IteratorProxy(BaseProxy):
_exposed_ = ('next', '__next__')
_exposed_ = ('__next__',)
def __iter__(self):
return self
def __next__(self):
return self._callmethod('next')
def __next__(self):
return self._callmethod('__next__')
@ -1565,7 +1572,7 @@ class _TestSharedCTypes(BaseTestCase):
for i in range(len(arr)):
arr[i] *= 2
@unittest.skipIf(c_int is None, "requires _ctypes")
@unittest.skipIf(Value is None, "requires ctypes.Value")
def test_sharedctypes(self, lock=False):
x = Value('i', 7, lock=lock)
y = Value(ctypes.c_double, 1.0/3.0, lock=lock)
@ -1586,13 +1593,14 @@ class _TestSharedCTypes(BaseTestCase):
self.assertAlmostEqual(arr[i], i*2)
self.assertEqual(string.value, latin('hellohello'))
@unittest.skipIf(Value is None, "requires ctypes.Value")
def test_synchronize(self):
self.test_sharedctypes(lock=True)
@unittest.skipIf(c_int is None, "requires _ctypes")
@unittest.skipIf(ctypes_copy is None, "requires ctypes.copy")
def test_copy(self):
foo = _Foo(2, 5.0)
bar = copy(foo)
bar = ctypes_copy(foo)
foo.x = 0
foo.y = 0
self.assertEqual(bar.x, 2)

View File

@ -18,14 +18,14 @@ class PowTest(unittest.TestCase):
self.assertEquals(pow(2, i), pow2)
if i != 30 : pow2 = pow2*2
for othertype in int, int:
for othertype in (int,):
for i in list(range(-10, 0)) + list(range(1, 10)):
ii = type(i)
for j in range(1, 11):
jj = -othertype(j)
pow(ii, jj)
for othertype in int, int, float:
for othertype in int, float:
for i in range(1, 100):
zero = type(0)
exp = -othertype(i/10.0)

View File

@ -79,7 +79,6 @@ class SysModuleTest(unittest.TestCase):
# Python/pythonrun.c::PyErr_PrintEx() is tricky.
def test_exit(self):
import subprocess
self.assertRaises(TypeError, sys.exit, 42, 42)
@ -458,7 +457,6 @@ class SysModuleTest(unittest.TestCase):
sys._clear_type_cache()
def test_ioencoding(self):
import subprocess,os
env = dict(os.environ)
# Test character: cent sign, encoded as 0x4A (ASCII J) in CP424,
@ -480,7 +478,7 @@ class SysModuleTest(unittest.TestCase):
# Issue #7774: Ensure that sys.executable is an empty string if argv[0]
# has been set to an non existent program name and Python is unable to
# retrieve the real program name
import subprocess
# For a normal installation, it should work without 'cwd'
# argument. For test runs in the build directory, see #7774.
python_dir = os.path.dirname(os.path.realpath(sys.executable))

View File

@ -103,7 +103,7 @@ class urlopen_FileTests(unittest.TestCase):
self.assertEqual(self.returned_obj.geturl(), self.pathname)
def test_getcode(self):
self.assertEqual(self.returned_obj.getcode(), None)
self.assertIsNone(self.returned_obj.getcode())
def test_iter(self):
# Test iterator
@ -132,7 +132,7 @@ class ProxyTests(unittest.TestCase):
self.env.set('NO_PROXY', 'localhost')
proxies = urllib.request.getproxies_environment()
# getproxies_environment use lowered case truncated (no '_proxy') keys
self.assertEquals('localhost', proxies['no'])
self.assertEqual('localhost', proxies['no'])
class urlopen_HttpTests(unittest.TestCase):

View File

@ -46,7 +46,7 @@ class TrivialTests(unittest.TestCase):
('a="b\\"c", d="e\\,f", g="h\\\\i"',
['a="b"c"', 'd="e,f"', 'g="h\\i"'])]
for string, list in tests:
self.assertEquals(urllib.request.parse_http_list(string), list)
self.assertEqual(urllib.request.parse_http_list(string), list)
def test_request_headers_dict():
@ -744,9 +744,9 @@ class HandlerTests(unittest.TestCase):
h.file_open(req)
# XXXX remove OSError when bug fixed
except (urllib.error.URLError, OSError):
self.assertTrue(not ftp)
self.assertFalse(ftp)
else:
self.assertTrue(o.req is req)
self.assertIs(o.req, req)
self.assertEqual(req.type, "ftp")
self.assertEqual(req.type is "ftp", ftp)
@ -849,19 +849,19 @@ class HandlerTests(unittest.TestCase):
# all 2xx are passed through
r = MockResponse(200, "OK", {}, "", url)
newr = h.http_response(req, r)
self.assertTrue(r is newr)
self.assertTrue(not hasattr(o, "proto")) # o.error not called
self.assertIs(r, newr)
self.assertFalse(hasattr(o, "proto")) # o.error not called
r = MockResponse(202, "Accepted", {}, "", url)
newr = h.http_response(req, r)
self.assertTrue(r is newr)
self.assertTrue(not hasattr(o, "proto")) # o.error not called
self.assertIs(r, newr)
self.assertFalse(hasattr(o, "proto")) # o.error not called
r = MockResponse(206, "Partial content", {}, "", url)
newr = h.http_response(req, r)
self.assertTrue(r is newr)
self.assertTrue(not hasattr(o, "proto")) # o.error not called
self.assertIs(r, newr)
self.assertFalse(hasattr(o, "proto")) # o.error not called
# anything else calls o.error (and MockOpener returns None, here)
r = MockResponse(502, "Bad gateway", {}, "", url)
self.assertTrue(h.http_response(req, r) is None)
self.assertIsNone(h.http_response(req, r))
self.assertEqual(o.proto, "http") # o.error called
self.assertEqual(o.args, (req, r, 502, "Bad gateway", {}))
@ -873,12 +873,14 @@ class HandlerTests(unittest.TestCase):
req = Request("http://example.com/")
r = MockResponse(200, "OK", {}, "")
newreq = h.http_request(req)
self.assertTrue(cj.ach_req is req is newreq)
self.assertEquals(req.get_origin_req_host(), "example.com")
self.assertTrue(not req.is_unverifiable())
self.assertIs(cj.ach_req, req)
self.assertIs(cj.ach_req, newreq)
self.assertEqual(req.get_origin_req_host(), "example.com")
self.assertFalse(req.is_unverifiable())
newr = h.http_response(req, r)
self.assertTrue(cj.ec_req is req)
self.assertTrue(cj.ec_r is r is newr)
self.assertIs(cj.ec_req, req)
self.assertIs(cj.ec_r, r)
self.assertIs(r, newr)
def test_redirect(self):
from_url = "http://example.com/a.html"
@ -906,7 +908,7 @@ class HandlerTests(unittest.TestCase):
try:
self.assertEqual(o.req.get_method(), "GET")
except AttributeError:
self.assertTrue(not o.req.has_data())
self.assertFalse(o.req.has_data())
# now it's a GET, there should not be headers regarding content
# (possibly dragged from before being a POST)
@ -965,7 +967,7 @@ class HandlerTests(unittest.TestCase):
cp = urllib.request.HTTPCookieProcessor(cj)
o = build_test_opener(hh, hdeh, hrh, cp)
o.open("http://www.example.com/")
self.assertTrue(not hh.req.has_header("Cookie"))
self.assertFalse(hh.req.has_header("Cookie"))
def test_proxy(self):
o = OpenerDirector()
@ -1199,11 +1201,8 @@ class MiscTests(unittest.TestCase):
self.opener_has_handler(o, MyOtherHTTPHandler)
def opener_has_handler(self, opener, handler_class):
for h in opener.handlers:
if h.__class__ == handler_class:
break
else:
self.assertTrue(False)
self.assertTrue(any(h.__class__ == handler_class
for h in opener.handlers))
class RequestTests(unittest.TestCase):
@ -1218,7 +1217,7 @@ class RequestTests(unittest.TestCase):
self.assertEqual("GET", self.get.get_method())
def test_add_data(self):
self.assertTrue(not self.get.has_data())
self.assertFalse(self.get.has_data())
self.assertEqual("GET", self.get.get_method())
self.get.add_data("spam")
self.assertTrue(self.get.has_data())
@ -1244,7 +1243,7 @@ class RequestTests(unittest.TestCase):
self.assertEqual("www.python.org", req.get_host())
def test_proxy(self):
self.assertTrue(not self.get.has_proxy())
self.assertFalse(self.get.has_proxy())
self.get.set_proxy("www.perl.org", "http")
self.assertTrue(self.get.has_proxy())
self.assertEqual("www.python.org", self.get.get_origin_req_host())

View File

@ -172,7 +172,7 @@ class DigestAuthHandler:
auth_validated = False
# MSIE uses short_path in its validation, but Python's
# urllib2 uses the full path, so we're going to see if
# urllib.request uses the full path, so we're going to see if
# either of them works here.
for path in [request_handler.path, request_handler.short_path]:
@ -298,8 +298,9 @@ def GetRequestHandler(responses):
def do_GET(self):
body = self.send_head()
if body:
self.wfile.write(body)
while body:
done = self.wfile.write(body)
body = body[done:]
def do_POST(self):
content_length = self.headers["Content-Length"]
@ -330,7 +331,7 @@ def GetRequestHandler(responses):
class TestUrlopen(unittest.TestCase):
"""Tests urllib2.urlopen using the network.
"""Tests urllib.request.urlopen using the network.
These tests are not exhaustive. Assuming that testing using files does a
good job overall of some of the basic interface features. There are no
@ -380,8 +381,8 @@ class TestUrlopen(unittest.TestCase):
handler = self.start_server(responses)
data = self.urlopen("http://localhost:%s/" % handler.port)
self.assertEquals(data, expected_response)
self.assertEquals(handler.requests, ["/", "/somewhere_else"])
self.assertEqual(data, expected_response)
self.assertEqual(handler.requests, ["/", "/somewhere_else"])
def test_chunked(self):
expected_response = b"hello world"
@ -395,7 +396,7 @@ class TestUrlopen(unittest.TestCase):
response = [(200, [("Transfer-Encoding", "chunked")], chunked_start)]
handler = self.start_server(response)
data = self.urlopen("http://localhost:%s/" % handler.port)
self.assertEquals(data, expected_response)
self.assertEqual(data, expected_response)
def test_404(self):
expected_response = b"Bad bad bad..."
@ -409,23 +410,23 @@ class TestUrlopen(unittest.TestCase):
else:
self.fail("404 should raise URLError")
self.assertEquals(data, expected_response)
self.assertEquals(handler.requests, ["/weeble"])
self.assertEqual(data, expected_response)
self.assertEqual(handler.requests, ["/weeble"])
def test_200(self):
expected_response = b"pycon 2008..."
handler = self.start_server([(200, [], expected_response)])
data = self.urlopen("http://localhost:%s/bizarre" % handler.port)
self.assertEquals(data, expected_response)
self.assertEquals(handler.requests, ["/bizarre"])
self.assertEqual(data, expected_response)
self.assertEqual(handler.requests, ["/bizarre"])
def test_200_with_parameters(self):
expected_response = b"pycon 2008..."
handler = self.start_server([(200, [], expected_response)])
data = self.urlopen("http://localhost:%s/bizarre" % handler.port,
b"get=with_feeling")
self.assertEquals(data, expected_response)
self.assertEquals(handler.requests, ["/bizarre", b"get=with_feeling"])
self.assertEqual(data, expected_response)
self.assertEqual(handler.requests, ["/bizarre", b"get=with_feeling"])
def test_sending_headers(self):
handler = self.start_server()
@ -489,6 +490,25 @@ class TestUrlopen(unittest.TestCase):
urllib.request.urlopen,
"http://sadflkjsasf.i.nvali.d./")
def test_iteration(self):
expected_response = b"pycon 2008..."
handler = self.start_server([(200, [], expected_response)])
data = urllib.request.urlopen("http://localhost:%s" % handler.port)
for line in data:
self.assertEqual(line, expected_response)
def test_line_iteration(self):
lines = [b"We\n", b"got\n", b"here\n", b"verylong " * 8192 + b"\n"]
expected_response = b"".join(lines)
handler = self.start_server([(200, [], expected_response)])
data = urllib.request.urlopen("http://localhost:%s" % handler.port)
for index, line in enumerate(data):
self.assertEqual(line, lines[index],
"Fetched line number %s doesn't match expected:\n"
" Expected length was %s, got %s" %
(index, len(lines[index]), len(line)))
self.assertEqual(index + 1, len(lines))
def test_main():
support.run_unittest(ProxyAuthTests, TestUrlopen)

View File

@ -479,6 +479,8 @@ Build
Tests
-----
- Issue #7564: Skip test_ioctl if another process is attached to /dev/tty.
- Issue #8857: Provide a test case for socket.getaddrinfo.
- Issue #8433: Fix test_curses failure with newer versions of ncurses.

View File

@ -7,34 +7,35 @@ documents are only of historic importance.
Files found here
----------------
ACKS Acknowledgements
AIX-NOTES Notes for building Python on AIX
build.sh Script to build and test latest Python from the repository
cheatsheet Quick summary of Python by Ken Manheimer
developers.txt A history of who got developer permissions, and why
gdbinit Handy stuff to put in your .gdbinit file, if you use gdb
HISTORY News from previous releases -- oldest last
indent.pro GNU indent profile approximating my C style
maintainers.txt A list of maintainers for library modules
NEWS News for this release (for some meaning of "this")
NEWS.help How to edit NEWS
Porting Mini-FAQ on porting to new platforms
PURIFY.README Information for Purify users
pymemcompat.h Memory interface compatibility file.
python.man UNIX man page for the python interpreter
python-mode.el Emacs mode for editing Python programs
python.pc.in Package configuration info template for pkg-config
python-wing.wpr Wing IDE project file
README The file you're reading now
README.coverity Information about running Coverity's Prevent on Python
README.klocwork Information about running Klocwork's K7 on Python
README.OpenBSD Help for building problems on OpenBSD
README.valgrind Information for Valgrind users, see valgrind-python.supp
RFD Request For Discussion about a Python newsgroup
RPM (Old) tools to build RPMs
setuid-prog.c C helper program for set-uid Python scripts
SpecialBuilds.txt Describes extra symbols you can set for debug builds
TextMate A TextMate bundle for Python development
valgrind-python.supp Valgrind suppression file, see README.valgrind
vgrindefs Python configuration for vgrind (a generic pretty printer)
Vim Python development utilities for the Vim editor
ACKS Acknowledgements
AIX-NOTES Notes for building Python on AIX
build.sh Script to build and test latest Python from the repository
cheatsheet Quick summary of Python by Ken Manheimer
developers.txt A history of who got developer permissions, and why
gdbinit Handy stuff to put in your .gdbinit file, if you use gdb
HISTORY News from previous releases -- oldest last
indent.pro GNU indent profile approximating my C style
maintainers.rst A list of maintainers for library modules
NEWS News for this release (for some meaning of "this")
NEWS.help How to edit NEWS
Porting Mini-FAQ on porting to new platforms
PURIFY.README Information for Purify users
pymemcompat.h Memory interface compatibility file.
python-config.in Python script template for python-config
python.man UNIX man page for the python interpreter
python-mode.el Emacs mode for editing Python programs
python.pc.in Package configuration info template for pkg-config
python-wing.wpr Wing IDE project file
README The file you're reading now
README.coverity Information about running Coverity's Prevent on Python
README.klocwork Information about running Klocwork's K7 on Python
README.OpenBSD Help for building problems on OpenBSD
README.valgrind Information for Valgrind users, see valgrind-python.supp
RFD Request For Discussion about a Python newsgroup
RPM (Old) tools to build RPMs
setuid-prog.c C helper program for set-uid Python scripts
SpecialBuilds.txt Describes extra symbols you can set for debug builds
TextMate A TextMate bundle for Python development
valgrind-python.supp Valgrind suppression file, see README.valgrind
vgrindefs Python configuration for vgrind (a generic pretty printer)
Vim Python development utilities for the Vim editor

View File

@ -11,6 +11,10 @@ final judgement on a feature or bug. If no active maintainer is listed for
a given module, then questionable changes should go to python-dev, while
any other issues can and should be decided by any committer.
Unless a name is followed by a '*', you should never assign an issue to
that person, only make them nosy. Names followed by a '*' may be assigned
issues involving the module or topic for which the name has a '*'.
The Platform and Interest Area tables list broader fields in which various
people have expertise. These people can also be contacted for help,
opinions, and decisions when issues involve their areas.
@ -21,8 +25,8 @@ in this list by placing the word 'inactive' in parenthesis behind their
tracker id. They are of course free to remove that inactive mark at
any time.
Committers should update this table as their areas of expertise widen.
New topics may be added to the third table at will.
Committers should update these tables as their areas of expertise widen.
New topics may be added to the Interest Area table at will.
The existence of this list is not meant to indicate that these people
*must* be contacted for decisions; it is, rather, a resource to be used
@ -85,10 +89,10 @@ dbm
decimal facundobatista, rhettinger, mark.dickinson
difflib tim_one
dis
distutils tarek
distutils tarek*, eric.araujo*
doctest tim_one (inactive)
dummy_threading brett.cannon
email barry, r.david.murray
email barry, r.david.murray*
encodings lemburg, loewis
errno
exceptions
@ -147,7 +151,7 @@ optparse aronacher
os loewis
ossaudiodev
parser
pdb georg.brandl
pdb georg.brandl*
pickle alexandre.vassalotti, pitrou
pickletools alexandre.vassalotti
pipes
@ -157,7 +161,8 @@ plistlib
poplib
posix
pprint fdrake
pstats
profile georg.brandl
pstats georg.brandl
pty
pwd
py_compile
@ -167,7 +172,7 @@ pydoc
queue rhettinger
quopri
random rhettinger
re effbot (inactive), pitrou
re effbot (inactive), pitrou, ezio.melotti
readline
reprlib
resource
@ -189,7 +194,7 @@ spwd
sqlite3 ghaering
ssl janssen, pitrou, giampaolo.rodola
stat
string
string georg.brandl*
stringprep
struct mark.dickinson
subprocess astrand (inactive)
@ -202,18 +207,18 @@ syslog jafo
tabnanny tim_one
tarfile lars.gustaebel
telnetlib
tempfile
tempfile georg.brandl
termios
test
textwrap
textwrap georg.brandl
threading pitrou
time alexander.belopolsky
timeit
timeit georg.brandl
tkinter gpolo
token georg.brandl
tokenize
trace alexander.belopolsky
traceback georg.brandl
traceback georg.brandl*
tty
turtle gregorlingl
types
@ -226,14 +231,21 @@ warnings brett.cannon
wave
weakref fdrake, pitrou
webbrowser georg.brandl
winreg
winreg brian.curtin
winsound effbot (inactive)
wsgiref pje
xdrlib
xml loewis
xml.dom
xml.dom.minidom
xml.dom.pulldom
xml.etree effbot (inactive)
xml.parsers.expat
xml.sax
xml.sax.handler
xml.sax.saxutils
xml.sax.xmlreader
xmlrpc loewis
zipfile
zipfile alanmcintyre
zipimport
zlib
================== ===========
@ -243,6 +255,7 @@ zlib
Tool Maintainers
------------------ -----------
pybench lemburg
================== ===========
================== ===========
@ -268,6 +281,7 @@ algorithms
ast/compiler ncoghlan, benjamin.peterson, brett.cannon, georg.brandl
autoconf/makefiles
bsd
bug tracker ezio.melotti
buildbots
bytecode pitrou
data formats mark.dickinson, georg.brandl
@ -286,10 +300,9 @@ py3 transition benjamin.peterson
release management tarek, lemburg, benjamin.peterson, barry, loewis,
gvanrossum, anthonybaxter
str.format eric.smith
testing michael.foord, pitrou, giampaolo.rodola
threads pitrou
time and dates lemburg
testing michael.foord, pitrou
threads
tracker
unicode lemburg, ezio.melotti, haypo
version control
================== ===========

View File

@ -1,6 +1,5 @@
#!/usr/bin/env python
from lib2to3.main import main
import sys
import os
from lib2to3.main import main
sys.exit(main("lib2to3.fixes"))