]> granicus.if.org Git - python/commitdiff
Merged revisions 83212,83829,83833,83838-83839,83878,84019,84025,84028,84032,84036...
authorFlorent Xicluna <florent.xicluna@gmail.com>
Sat, 14 Aug 2010 18:24:40 +0000 (18:24 +0000)
committerFlorent Xicluna <florent.xicluna@gmail.com>
Sat, 14 Aug 2010 18:24:40 +0000 (18:24 +0000)
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)
........

16 files changed:
Doc/library/stdtypes.rst
Lib/ctypes/test/test_callbacks.py
Lib/json/encoder.py
Lib/pickletools.py
Lib/test/test_binop.py
Lib/test/test_ioctl.py
Lib/test/test_multiprocessing.py
Lib/test/test_pow.py
Lib/test/test_sys.py
Lib/test/test_urllib.py
Lib/test/test_urllib2.py
Lib/test/test_urllib2_localnet.py
Misc/NEWS
Misc/README
Misc/maintainers.rst
Tools/scripts/2to3

index ef1fbee851667e63d5d0e6c3b5a6100751f0ad65..8e5412086c20ef5231a9ae533ecec357b8a0cf85 100644 (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
index 1466f26ecc9fdfd0e20aae84f256b6939cd3362d..0fa2d9dba729b63f85a944f08213b2febb1ce23e 100644 (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)
 
 ################################################################
 
index 2beb10e358bd61ad54cf7613a4afb31cbbcc4054..d068e722165777a8d4fd8ed83084d9f9de8aa81d 100644 (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)
index 4f1c24f91b5956ef5e0bc172373c64c1abda4361..dc408101dbcb65915e49376581c12be410e667a8 100644 (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.")
 
index 5d77f234fe6f8320c6c5f68fe383a0b58661b22c..523ecbe2989b99da5d1db391ec6b0d1bedd6f693 100644 (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
index 50597cab4e2f8f8bffd135508d076dd5b60a5d5a..d63fdebabca39b88b78e7d62effdb85ce91ad938 100644 (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
index c5aeb14e510a69da94772fdbd8fbd5e22858cfe5..3f6fc8b896c94f448dc3e760f7d5b7fd35a85b7a 100644 (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)
index 859c3737b9097322ffea755e21a64fa6687ef967..60bb5330eb3e34663113655776203cb7cafb814f 100644 (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)
index 398243a7733e71999ac87e0ace2df02e74903317..ccad44a4d10d8d8b94740536a02b732c3c6ed6da 100644 (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))
index c573f147f14cd2786ca22a65a5cac719bc298882..80cd8ef313e2cf171e1c40835a8a040d9cf51929 100644 (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):
index 83bd467177bd2e5e1c0a14d78d68b93ea9b8dc17..0f8395e8ca181547c9c2d654bca55f0afb8afed0 100644 (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())
index 365742c8bffdc3eece2b632c80b1fa8becf6e99a..fbd21d2912cd6ccc5c1cfc80259b273ba138554d 100644 (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)
 
index 230160a243578dd5259c126052198ecdf9378eb0..478517bc5360a14908fdff79b8e0956a139c32e3 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.
index 8695b60aa09b9d3ff8309d382244c312727324d4..e7a59c7182982b07671def5eadcac901fdc7c09c 100644 (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
\ No newline at end of file
+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
index 31708187e22d1d9bd79ad1011f67f4f841de15d1..e7856109d8e74000eb19218ec9d8a3f14bc2eca3 100644 (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
 ==================  ===========
index 2a447cffeaf3608ff8d7e73e07fafc99adccb107..fbd4aa6b838234014af3619fd3f4d8d9c999025d 100755 (executable)
@@ -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"))