From 643238eb53805bc77148adbca83cd22e34d8aeba Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sun, 29 Sep 2013 01:48:40 +0200 Subject: Issue #4366: Fix building extensions on all platforms when --enable-shared is used. --- Lib/distutils/command/build_ext.py | 7 +++---- Misc/NEWS | 3 +++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py index 1ad0d5f..bc6a23f 100644 --- a/Lib/distutils/command/build_ext.py +++ b/Lib/distutils/command/build_ext.py @@ -247,11 +247,10 @@ class build_ext(Command): # building python standard extensions self.library_dirs.append('.') - # for extensions under Linux or Solaris with a shared Python library, + # For building extensions with a shared Python library, # Python's library directory must be appended to library_dirs - sysconfig.get_config_var('Py_ENABLE_SHARED') - if (sys.platform.startswith(('linux', 'gnu', 'sunos')) - and sysconfig.get_config_var('Py_ENABLE_SHARED')): + # See Issues: #1600860, #4366 + if (sysconfig.get_config_var('Py_ENABLE_SHARED')): if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")): # building third party extensions self.library_dirs.append(sysconfig.get_config_var('LIBDIR')) diff --git a/Misc/NEWS b/Misc/NEWS index 86a8e35..263712c 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -71,6 +71,9 @@ Core and Builtins Library ------- +- Issue #4366: Fix building extensions on all platforms when --enable-shared + is used. + - Issue #18950: Fix miscellaneous bugs in the sunau module. Au_read.readframes() now updates current file position and reads correct number of frames from multichannel stream. Au_write.writeframesraw() now -- cgit v0.12 From 05ab7028ba6dff61fee138fee395c20106f83a6f Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 29 Sep 2013 10:01:40 -0400 Subject: remove duplicate test from test_import (closes #19122) --- Lib/test/test_import.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py index e710122..df08e6a 100644 --- a/Lib/test/test_import.py +++ b/Lib/test/test_import.py @@ -264,17 +264,6 @@ class ImportTests(unittest.TestCase): if TESTFN in sys.modules: del sys.modules[TESTFN] - def test_import_name_binding(self): - # import x.y.z binds x in the current namespace. - import test as x - import test.support - self.assertIs(x, test, x.__name__) - self.assertTrue(hasattr(test.support, "__file__")) - - # import x.y.z as w binds z as w. - import test.support as y - self.assertIs(y, test.support, y.__name__) - def test_import_by_filename(self): path = os.path.abspath(TESTFN) encoding = sys.getfilesystemencoding() -- cgit v0.12 From 11f34caac4b6b6c975dc133180a36ca5663b8b6d Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 29 Sep 2013 10:39:51 -0400 Subject: delete duplicate test (closes #19123) --- Lib/test/test_regrtest.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py index 353874b..2bb8db1 100644 --- a/Lib/test/test_regrtest.py +++ b/Lib/test/test_regrtest.py @@ -168,12 +168,6 @@ class ParseArgsTestCase(unittest.TestCase): self.checkError(['--testdir'], 'expected one argument') def test_findleaks(self): - for opt in '-l', '--findleaks': - with self.subTest(opt=opt): - ns = regrtest._parse_args([opt]) - self.assertTrue(ns.findleaks) - - def test_findleaks(self): for opt in '-L', '--runleaks': with self.subTest(opt=opt): ns = regrtest._parse_args([opt]) -- cgit v0.12 From 1eca062be691af2fe82724c9c5c5acbfc7ed72f8 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 29 Sep 2013 10:46:31 -0400 Subject: fix test to run and test that smtpd does support ELHO (closes #19125) --- Lib/test/test_smtplib.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_smtplib.py b/Lib/test/test_smtplib.py index f93d355..8d1dbbf 100644 --- a/Lib/test/test_smtplib.py +++ b/Lib/test/test_smtplib.py @@ -239,14 +239,14 @@ class DebuggingServerTests(unittest.TestCase): self.assertEqual(smtp.rset(), expected) smtp.quit() - def testNotImplemented(self): + def testELHO(self): # EHLO isn't implemented in DebuggingServer smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3) - expected = (502, b'Error: command "EHLO" not implemented') + expected = (250, b'\nSIZE 33554432\nHELP') self.assertEqual(smtp.ehlo(), expected) smtp.quit() - def testNotImplemented(self): + def testEXPNNotImplemented(self): # EXPN isn't implemented in DebuggingServer smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3) expected = (502, b'EXPN not implemented') -- cgit v0.12 From e8c8a592e769196d3b15e85ff63fca04c670d391 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 29 Sep 2013 10:48:19 -0400 Subject: fix duplicate test name (closes #19126) --- Lib/test/test_webbrowser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_webbrowser.py b/Lib/test/test_webbrowser.py index 34b9364..c3292c4 100644 --- a/Lib/test/test_webbrowser.py +++ b/Lib/test/test_webbrowser.py @@ -158,7 +158,7 @@ class OperaCommandTest(CommandTestMixin, unittest.TestCase): options=['-remote'], arguments=['openURL({},new-window)'.format(URL)]) - def test_open_new(self): + def test_open_new_tab(self): self._test('open_new_tab', options=['-remote'], arguments=['openURL({},new-page)'.format(URL)]) -- cgit v0.12 From db0601f8716cfd035aa0957a63c6ddaf1fc03e93 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 29 Sep 2013 10:50:15 -0400 Subject: combine two tests to avoid duplicate names (closes #19116) --- Lib/test/test_complex.py | 1 - 1 file changed, 1 deletion(-) diff --git a/Lib/test/test_complex.py b/Lib/test/test_complex.py index 6b34ddc..1bf4097 100644 --- a/Lib/test/test_complex.py +++ b/Lib/test/test_complex.py @@ -101,7 +101,6 @@ class ComplexTest(unittest.TestCase): # FIXME: The following currently crashes on Alpha # self.assertRaises(OverflowError, pow, 1e200+1j, 1e200+1j) - def test_truediv(self): self.assertAlmostEqual(complex.__truediv__(2+0j, 1+1j), 1-1j) self.assertRaises(ZeroDivisionError, complex.__truediv__, 1+1j, 0+0j) -- cgit v0.12 From f8ab76039bac5ba46cfe159ffdd33a2e49ee24f3 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 29 Sep 2013 10:51:00 -0400 Subject: remove duplicate test_mkd (closes #19118) --- Lib/test/test_ftplib.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py index b39d753..2c45af3 100644 --- a/Lib/test/test_ftplib.py +++ b/Lib/test/test_ftplib.py @@ -533,10 +533,6 @@ class TestFTPClass(TestCase): dir = self.client.cwd('/foo') self.assertEqual(dir, '250 cwd ok') - def test_mkd(self): - dir = self.client.mkd('/foo') - self.assertEqual(dir, '/foo') - def test_pwd(self): dir = self.client.pwd() self.assertEqual(dir, 'pwd ok') -- cgit v0.12 From 52010b40f615671e2b2f5e1eb6af6cb0d6684808 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 29 Sep 2013 10:53:49 -0400 Subject: fix duplicate test names in test_dis (closes #19117) --- Lib/test/test_dis.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index 1bcd693..d1355bb 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -245,7 +245,6 @@ class DisTests(unittest.TestCase): expected = _BIG_LINENO_FORMAT % (i + 2) self.do_disassembly_test(func(i), expected) - def test_big_linenos(self): from test import dis_module self.do_disassembly_test(dis_module, dis_module_expected_results) @@ -271,9 +270,6 @@ class DisTests(unittest.TestCase): pass self.assertRaises(RuntimeError, dis.dis, None) - def test_dis_object(self): - self.assertRaises(TypeError, dis.dis, object()) - def test_dis_traceback(self): try: del sys.last_traceback -- cgit v0.12 From cc6ef3620fd368b639540ff4c2d92d7e84fc1f6b Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 29 Sep 2013 11:08:04 -0400 Subject: move helper function into its test method (closes #19112) --- Lib/test/test_multiprocessing.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Lib/test/test_multiprocessing.py b/Lib/test/test_multiprocessing.py index 5760969..a19bca0 100644 --- a/Lib/test/test_multiprocessing.py +++ b/Lib/test/test_multiprocessing.py @@ -3123,13 +3123,6 @@ def _ThisSubProcess(q): except pyqueue.Empty: pass -def _TestProcess(q): - queue = multiprocessing.Queue() - subProc = multiprocessing.Process(target=_ThisSubProcess, args=(queue,)) - subProc.daemon = True - subProc.start() - subProc.join() - def _afunc(x): return x*x @@ -3163,6 +3156,12 @@ class _file_like(object): class TestStdinBadfiledescriptor(unittest.TestCase): def test_queue_in_process(self): + def _TestProcess(q): + queue = multiprocessing.Queue() + subProc = multiprocessing.Process(target=_ThisSubProcess, args=(queue,)) + subProc.daemon = True + subProc.start() + subProc.join() queue = multiprocessing.Queue() proc = multiprocessing.Process(target=_TestProcess, args=(queue,)) proc.start() -- cgit v0.12 From 56b143d7580b06a4e6bd4d5e16a5ba1cff45f534 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 29 Sep 2013 11:13:27 -0400 Subject: condense two tests with the same name (closes #19114) --- Lib/distutils/tests/test_cmd.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/Lib/distutils/tests/test_cmd.py b/Lib/distutils/tests/test_cmd.py index 195045c..cf5197c 100644 --- a/Lib/distutils/tests/test_cmd.py +++ b/Lib/distutils/tests/test_cmd.py @@ -34,6 +34,18 @@ class CommandTestCase(unittest.TestCase): self.assertRaises(DistutilsOptionError, cmd.ensure_string_list, 'not_string_list2') + cmd.option1 = 'ok,dok' + cmd.ensure_string_list('option1') + self.assertEqual(cmd.option1, ['ok', 'dok']) + + cmd.option2 = ['xxx', 'www'] + cmd.ensure_string_list('option2') + + cmd.option3 = ['ok', 2] + self.assertRaises(DistutilsOptionError, cmd.ensure_string_list, + 'option3') + + def test_make_file(self): cmd = self.cmd @@ -77,19 +89,6 @@ class CommandTestCase(unittest.TestCase): cmd.option3 = 1 self.assertRaises(DistutilsOptionError, cmd.ensure_string, 'option3') - def test_ensure_string_list(self): - cmd = self.cmd - cmd.option1 = 'ok,dok' - cmd.ensure_string_list('option1') - self.assertEqual(cmd.option1, ['ok', 'dok']) - - cmd.option2 = ['xxx', 'www'] - cmd.ensure_string_list('option2') - - cmd.option3 = ['ok', 2] - self.assertRaises(DistutilsOptionError, cmd.ensure_string_list, - 'option3') - def test_ensure_filename(self): cmd = self.cmd cmd.option1 = __file__ -- cgit v0.12 From 72a98541f0938afb443ce924b7422f8dcfa1f1f9 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 29 Sep 2013 11:15:31 -0400 Subject: remove duplicate method (closes #19127) --- Lib/xml/dom/minidom.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/Lib/xml/dom/minidom.py b/Lib/xml/dom/minidom.py index 55c4ce1..6f71631 100644 --- a/Lib/xml/dom/minidom.py +++ b/Lib/xml/dom/minidom.py @@ -370,9 +370,6 @@ class Attr(Node): except AttributeError: return self.nodeName.split(":", 1)[-1] - def _get_name(self): - return self.name - def _get_specified(self): return self.specified -- cgit v0.12 From 8b3f5aafd3e04e22dec6740b790ea1dbdc361768 Mon Sep 17 00:00:00 2001 From: Richard Oudkerk Date: Sun, 29 Sep 2013 17:29:56 +0100 Subject: Issue #19112: avoid using function defined in method. --- Lib/test/test_multiprocessing.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Lib/test/test_multiprocessing.py b/Lib/test/test_multiprocessing.py index a19bca0..6d20782 100644 --- a/Lib/test/test_multiprocessing.py +++ b/Lib/test/test_multiprocessing.py @@ -3117,12 +3117,19 @@ class TestInitializers(unittest.TestCase): # Verifies os.close(sys.stdin.fileno) vs. sys.stdin.close() behavior # -def _ThisSubProcess(q): +def _this_sub_process(q): try: item = q.get(block=False) except pyqueue.Empty: pass +def _test_process(q): + queue = multiprocessing.Queue() + subProc = multiprocessing.Process(target=_this_sub_process, args=(queue,)) + subProc.daemon = True + subProc.start() + subProc.join() + def _afunc(x): return x*x @@ -3156,14 +3163,8 @@ class _file_like(object): class TestStdinBadfiledescriptor(unittest.TestCase): def test_queue_in_process(self): - def _TestProcess(q): - queue = multiprocessing.Queue() - subProc = multiprocessing.Process(target=_ThisSubProcess, args=(queue,)) - subProc.daemon = True - subProc.start() - subProc.join() queue = multiprocessing.Queue() - proc = multiprocessing.Process(target=_TestProcess, args=(queue,)) + proc = multiprocessing.Process(target=_test_process, args=(queue,)) proc.start() proc.join() -- cgit v0.12 From 9c99cc092eb150566ec0d3cb487ad6c72f6c3562 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Sun, 29 Sep 2013 19:02:35 +0200 Subject: Issue #19130: Correct PCbuild/readme.txt, Python 3.3 and 3.4 require VS 2010 --- Misc/NEWS | 2 ++ PCbuild/readme.txt | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index 263712c..6a4c05e 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -492,6 +492,8 @@ Tools/Demos Build ----- +- Issue #19130: Correct PCbuild/readme.txt, Python 3.3 and 3.4 require VS 2010. + - Issue #16067: Add description into MSI file to replace installer's temporary name. - Issue #18256: Compilation fix for recent AIX releases. Patch by diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt index 8acd152..ca2a47d 100644 --- a/PCbuild/readme.txt +++ b/PCbuild/readme.txt @@ -1,13 +1,13 @@ Building Python using VC++ 10.0 ------------------------------- +------------------------------- This directory is used to build Python for Win32 and x64 platforms, e.g. Windows 2000, XP, Vista and Windows Server 2008. In order to build 32-bit -debug and release executables, Microsoft Visual C++ 2008 Express Edition is +debug and release executables, Microsoft Visual C++ 2010 Express Edition is required at the very least. In order to build 64-bit debug and release -executables, Visual Studio 2008 Standard Edition is required at the very +executables, Visual Studio 2010 Standard Edition is required at the very least. In order to build all of the above, as well as generate release builds -that make use of Profile Guided Optimisation (PG0), Visual Studio 2008 +that make use of Profile Guided Optimisation (PG0), Visual Studio 2010 Professional Edition is required at the very least. The official Python releases are built with this version of Visual Studio. -- cgit v0.12 From 5176337bf597fd13491ae079756cc94aa10c9d3c Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Sun, 29 Sep 2013 19:10:07 +0200 Subject: Issue #19130: mention historic VS 2008 build dir, too --- PCbuild/readme.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt index ca2a47d..fc25955 100644 --- a/PCbuild/readme.txt +++ b/PCbuild/readme.txt @@ -57,6 +57,8 @@ PC/VS7.1/ Visual Studio 2003 (7.1) PC/VS8.0/ Visual Studio 2005 (8.0) +PC/VS9.0/ + Visual Studio 2008 (9.0) C RUNTIME -- cgit v0.12 From 20b85557f2cc8f5f10d7d98314a3181c60553e12 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sun, 29 Sep 2013 19:50:53 +0200 Subject: Issue #19095: SSLSocket.getpeercert() now raises ValueError when the SSL handshake hasn't been done. --- Doc/library/ssl.rst | 6 +++++- Lib/test/test_ssl.py | 8 +++++++- Misc/NEWS | 3 +++ Modules/_ssl.c | 10 +++++++++- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index 983c144..bb4ceca 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -659,7 +659,8 @@ SSL sockets also have the following additional methods and attributes: .. method:: SSLSocket.getpeercert(binary_form=False) If there is no certificate for the peer on the other end of the connection, - returns ``None``. + return ``None``. If the SSL handshake hasn't been done yet, raise + :exc:`ValueError`. If the ``binary_form`` parameter is :const:`False`, and a certificate was received from the peer, this method returns a :class:`dict` instance. If the @@ -716,6 +717,9 @@ SSL sockets also have the following additional methods and attributes: The returned dictionary includes additional items such as ``issuer`` and ``notBefore``. + .. versionchanged:: 3.4 + :exc:`ValueError` is raised when the handshake isn't done. + .. method:: SSLSocket.cipher() Returns a three-value tuple containing the name of the cipher being used, the diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 8915305..2605e68 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -1588,8 +1588,14 @@ else: context.load_cert_chain(CERTFILE) server = ThreadedEchoServer(context=context, chatty=False) with server: - s = context.wrap_socket(socket.socket()) + s = context.wrap_socket(socket.socket(), + do_handshake_on_connect=False) s.connect((HOST, server.port)) + # getpeercert() raise ValueError while the handshake isn't + # done. + with self.assertRaises(ValueError): + s.getpeercert() + s.do_handshake() cert = s.getpeercert() self.assertTrue(cert, "Can't get peer certificate.") cipher = s.cipher() diff --git a/Misc/NEWS b/Misc/NEWS index 6c17c04..48851db 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -15,6 +15,9 @@ Core and Builtins Library ------- +- Issue #19095: SSLSocket.getpeercert() now raises ValueError when the + SSL handshake hasn't been done. + - Issue #4366: Fix building extensions on all platforms when --enable-shared is used. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index e116d3d..3afe893 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -220,7 +220,8 @@ typedef struct { SSL *ssl; PySSLContext *ctx; /* weakref to SSL context */ X509 *peer_cert; - int shutdown_seen_zero; + char shutdown_seen_zero; + char handshake_done; enum py_ssl_server_or_client socket_type; } PySSLSocket; @@ -485,6 +486,7 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, self->ssl = NULL; self->Socket = NULL; self->ctx = sslctx; + self->handshake_done = 0; Py_INCREF(sslctx); /* Make sure the SSL error state is initialized */ @@ -590,6 +592,7 @@ static PyObject *PySSL_SSLdo_handshake(PySSLSocket *self) PySSL_BEGIN_ALLOW_THREADS self->peer_cert = SSL_get_peer_certificate(self->ssl); PySSL_END_ALLOW_THREADS + self->handshake_done = 1; Py_INCREF(Py_None); return Py_None; @@ -1153,6 +1156,11 @@ PySSL_peercert(PySSLSocket *self, PyObject *args) if (!PyArg_ParseTuple(args, "|p:peer_certificate", &binary_mode)) return NULL; + if (!self->handshake_done) { + PyErr_SetString(PyExc_ValueError, + "handshake not done yet"); + return NULL; + } if (!self->peer_cert) Py_RETURN_NONE; -- cgit v0.12 From 860aee75b83f8d026999682b7565e271c05433a4 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sun, 29 Sep 2013 19:52:45 +0200 Subject: Properly initialize all fields of a SSL object after allocation. --- Misc/NEWS | 2 ++ Modules/_ssl.c | 1 + 2 files changed, 3 insertions(+) diff --git a/Misc/NEWS b/Misc/NEWS index 6a4c05e..63601d8 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -71,6 +71,8 @@ Core and Builtins Library ------- +- Properly initialize all fields of a SSL object after allocation. + - Issue #4366: Fix building extensions on all platforms when --enable-shared is used. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 1ae543f..448114b 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -455,6 +455,7 @@ newPySSLSocket(SSL_CTX *ctx, PySocketSockObject *sock, self->peer_cert = NULL; self->ssl = NULL; self->Socket = NULL; + self->shutdown_seen_zero = 0; /* Make sure the SSL error state is initialized */ (void) ERR_get_state(); -- cgit v0.12 From dcdd79459de1eccf8a289558ab9c064dc1a045e1 Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Sun, 29 Sep 2013 11:46:50 -0700 Subject: Issue #19128: Remove nonfunctional, unused Mac help indexing tool from repo. --- .../HelpIndexingTool/Help_Indexing_Tool_Suite.py | 110 ------- .../HelpIndexingTool/Miscellaneous_Standards.py | 49 --- Mac/Tools/Doc/HelpIndexingTool/Required_Suite.py | 32 -- Mac/Tools/Doc/HelpIndexingTool/Standard_Suite.py | 343 --------------------- Mac/Tools/Doc/HelpIndexingTool/__init__.py | 78 ----- Mac/Tools/Doc/HelpIndexingTool/odds_and_ends.py | 49 --- Mac/Tools/Doc/README | 35 --- Mac/Tools/Doc/setup.py | 213 ------------- 8 files changed, 909 deletions(-) delete mode 100644 Mac/Tools/Doc/HelpIndexingTool/Help_Indexing_Tool_Suite.py delete mode 100644 Mac/Tools/Doc/HelpIndexingTool/Miscellaneous_Standards.py delete mode 100644 Mac/Tools/Doc/HelpIndexingTool/Required_Suite.py delete mode 100644 Mac/Tools/Doc/HelpIndexingTool/Standard_Suite.py delete mode 100644 Mac/Tools/Doc/HelpIndexingTool/__init__.py delete mode 100644 Mac/Tools/Doc/HelpIndexingTool/odds_and_ends.py delete mode 100644 Mac/Tools/Doc/README delete mode 100644 Mac/Tools/Doc/setup.py diff --git a/Mac/Tools/Doc/HelpIndexingTool/Help_Indexing_Tool_Suite.py b/Mac/Tools/Doc/HelpIndexingTool/Help_Indexing_Tool_Suite.py deleted file mode 100644 index 9b3ace4..0000000 --- a/Mac/Tools/Doc/HelpIndexingTool/Help_Indexing_Tool_Suite.py +++ /dev/null @@ -1,110 +0,0 @@ -"""Suite Help Indexing Tool Suite: Special events that just the Help Indexing Tool supports. -Level 0, version 0 - -Generated from /Developer/Applications/Apple Help Indexing Tool.app -AETE/AEUT resource version 1/1, language 0, script 0 -""" - -import aetools -import MacOS - -_code = 'HIT ' - -class Help_Indexing_Tool_Suite_Events: - - def turn_anchor_indexing(self, _object, _attributes={}, **_arguments): - """turn anchor indexing: Turns anchor indexing on or off. - Required argument: \xd2on\xd3 or \xd2off\xd3, to turn anchor indexing on or off - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'HIT ' - _subcode = 'tAnc' - - if _arguments: raise TypeError('No optional args expected') - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error(aetools.decodeerror(_arguments)) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - _argmap_turn_remote_root = { - 'with_root_url' : 'rURL', - } - - def turn_remote_root(self, _object, _attributes={}, **_arguments): - """turn remote root: Turn usage of remote root for content on the web on or off. If turning \xd2on\xd3, supply a string as second parameter. - Required argument: \xd2on\xd3 or \xd2off\xd3, to turn remote root on or off - Keyword argument with_root_url: The remote root to use, in the form of \xd2http://www.apple.com/help/\xd3. - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'HIT ' - _subcode = 'tRem' - - aetools.keysubst(_arguments, self._argmap_turn_remote_root) - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error(aetools.decodeerror(_arguments)) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - def use_tokenizer(self, _object, _attributes={}, **_arguments): - """use tokenizer: Tells the indexing tool which tokenizer to use. - Required argument: Specify \xd2English\xd3, \xd2European\xd3, \xd2Japanese\xd3, \xd2Korean\xd3, or \xd2Simple\xd3. - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'HIT ' - _subcode = 'uTok' - - if _arguments: raise TypeError('No optional args expected') - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error(aetools.decodeerror(_arguments)) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - -class application(aetools.ComponentItem): - """application - Application class """ - want = 'capp' -class _Prop_idleStatus(aetools.NProperty): - """idleStatus - """ - which = 'sIdl' - want = 'bool' -application._superclassnames = [] -application._privpropdict = { - 'idleStatus' : _Prop_idleStatus, -} -application._privelemdict = { -} - -# -# Indices of types declared in this module -# -_classdeclarations = { - 'capp' : application, -} - -_propdeclarations = { - 'sIdl' : _Prop_idleStatus, -} - -_compdeclarations = { -} - -_enumdeclarations = { -} diff --git a/Mac/Tools/Doc/HelpIndexingTool/Miscellaneous_Standards.py b/Mac/Tools/Doc/HelpIndexingTool/Miscellaneous_Standards.py deleted file mode 100644 index 616ae70..0000000 --- a/Mac/Tools/Doc/HelpIndexingTool/Miscellaneous_Standards.py +++ /dev/null @@ -1,49 +0,0 @@ -"""Suite Miscellaneous Standards: Useful events that aren\xd5t in any other suite -Level 0, version 0 - -Generated from /Developer/Applications/Apple Help Indexing Tool.app -AETE/AEUT resource version 1/1, language 0, script 0 -""" - -import aetools -import MacOS - -_code = 'misc' - -class Miscellaneous_Standards_Events: - - def revert(self, _object, _attributes={}, **_arguments): - """revert: Revert an object to the most recently saved version - Required argument: object to revert - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'misc' - _subcode = 'rvrt' - - if _arguments: raise TypeError('No optional args expected') - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error(aetools.decodeerror(_arguments)) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - -# -# Indices of types declared in this module -# -_classdeclarations = { -} - -_propdeclarations = { -} - -_compdeclarations = { -} - -_enumdeclarations = { -} diff --git a/Mac/Tools/Doc/HelpIndexingTool/Required_Suite.py b/Mac/Tools/Doc/HelpIndexingTool/Required_Suite.py deleted file mode 100644 index eb9fee0..0000000 --- a/Mac/Tools/Doc/HelpIndexingTool/Required_Suite.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Suite Required Suite: Terms that every application should support -Level 1, version 1 - -Generated from /Developer/Applications/Apple Help Indexing Tool.app -AETE/AEUT resource version 1/1, language 0, script 0 -""" - -import aetools -import MacOS - -_code = 'reqd' - -from StdSuites.Required_Suite import * -class Required_Suite_Events(Required_Suite_Events): - - pass - - -# -# Indices of types declared in this module -# -_classdeclarations = { -} - -_propdeclarations = { -} - -_compdeclarations = { -} - -_enumdeclarations = { -} diff --git a/Mac/Tools/Doc/HelpIndexingTool/Standard_Suite.py b/Mac/Tools/Doc/HelpIndexingTool/Standard_Suite.py deleted file mode 100644 index 7f0b63a..0000000 --- a/Mac/Tools/Doc/HelpIndexingTool/Standard_Suite.py +++ /dev/null @@ -1,343 +0,0 @@ -"""Suite Standard Suite: Common terms for most applications -Level 1, version 1 - -Generated from /Developer/Applications/Apple Help Indexing Tool.app -AETE/AEUT resource version 1/1, language 0, script 0 -""" - -import aetools -import MacOS - -_code = 'CoRe' - -from StdSuites.Standard_Suite import * -class Standard_Suite_Events(Standard_Suite_Events): - - _argmap_close = { - 'saving' : 'savo', - 'in_' : 'kfil', - } - - def close(self, _object, _attributes={}, **_arguments): - """close: Close an object - Required argument: the objects to close - Keyword argument saving: specifies whether or not changes should be saved before closing - Keyword argument in_: the file in which to save the object - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'core' - _subcode = 'clos' - - aetools.keysubst(_arguments, self._argmap_close) - _arguments['----'] = _object - - aetools.enumsubst(_arguments, 'savo', _Enum_savo) - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error(aetools.decodeerror(_arguments)) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - def data_size(self, _object, _attributes={}, **_arguments): - """data size: Return the size in bytes of an object - Required argument: the object whose data size is to be returned - Keyword argument _attributes: AppleEvent attribute dictionary - Returns: the size of the object in bytes - """ - _code = 'core' - _subcode = 'dsiz' - - if _arguments: raise TypeError('No optional args expected') - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error(aetools.decodeerror(_arguments)) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - def get(self, _object, _attributes={}, **_arguments): - """get: Get the data for an object - Required argument: the object whose data is to be returned - Keyword argument _attributes: AppleEvent attribute dictionary - Returns: The data from the object - """ - _code = 'core' - _subcode = 'getd' - - if _arguments: raise TypeError('No optional args expected') - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error(aetools.decodeerror(_arguments)) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - _argmap_make = { - 'new' : 'kocl', - 'at' : 'insh', - 'with_data' : 'data', - 'with_properties' : 'prdt', - } - - def make(self, _no_object=None, _attributes={}, **_arguments): - """make: Make a new element - Keyword argument new: the class of the new element - Keyword argument at: the location at which to insert the element - Keyword argument with_data: the initial data for the element - Keyword argument with_properties: the initial values for the properties of the element - Keyword argument _attributes: AppleEvent attribute dictionary - Returns: Object specifier for the new element - """ - _code = 'core' - _subcode = 'crel' - - aetools.keysubst(_arguments, self._argmap_make) - if _no_object is not None: raise TypeError('No direct arg expected') - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error(aetools.decodeerror(_arguments)) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - def open(self, _object, _attributes={}, **_arguments): - """open: Open the specified object(s) - Required argument: Objects to open. Can be a list of files or an object specifier. - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'aevt' - _subcode = 'odoc' - - if _arguments: raise TypeError('No optional args expected') - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error(aetools.decodeerror(_arguments)) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - def print_(self, _object, _attributes={}, **_arguments): - """print: Print the specified object(s) - Required argument: Objects to print. Can be a list of files or an object specifier. - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'aevt' - _subcode = 'pdoc' - - if _arguments: raise TypeError('No optional args expected') - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error(aetools.decodeerror(_arguments)) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - _argmap_save = { - 'in_' : 'kfil', - 'as' : 'fltp', - } - - def save(self, _object, _attributes={}, **_arguments): - """save: save a set of objects - Required argument: Objects to save. - Keyword argument in_: the file in which to save the object(s) - Keyword argument as: the file type of the document in which to save the data - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'core' - _subcode = 'save' - - aetools.keysubst(_arguments, self._argmap_save) - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error(aetools.decodeerror(_arguments)) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - _argmap_set = { - 'to' : 'data', - } - - def set(self, _object, _attributes={}, **_arguments): - """set: Set an object\xd5s data - Required argument: the object to change - Keyword argument to: the new value - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'core' - _subcode = 'setd' - - aetools.keysubst(_arguments, self._argmap_set) - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error(aetools.decodeerror(_arguments)) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - -class application(aetools.ComponentItem): - """application - An application program """ - want = 'capp' -# element 'cwin' as ['indx', 'name', 'rele'] -# element 'docu' as ['name'] - -class window(aetools.ComponentItem): - """window - A Window """ - want = 'cwin' -class _Prop_bounds(aetools.NProperty): - """bounds - the boundary rectangle for the window """ - which = 'pbnd' - want = 'qdrt' -class _Prop_closeable(aetools.NProperty): - """closeable - Does the window have a close box? """ - which = 'hclb' - want = 'bool' -class _Prop_floating(aetools.NProperty): - """floating - Does the window float? """ - which = 'isfl' - want = 'bool' -class _Prop_index(aetools.NProperty): - """index - the number of the window """ - which = 'pidx' - want = 'long' -class _Prop_modal(aetools.NProperty): - """modal - Is the window modal? """ - which = 'pmod' - want = 'bool' -class _Prop_name(aetools.NProperty): - """name - the title of the window """ - which = 'pnam' - want = 'itxt' -class _Prop_position(aetools.NProperty): - """position - upper left coordinates of window """ - which = 'ppos' - want = 'QDpt' -class _Prop_resizable(aetools.NProperty): - """resizable - Is the window resizable? """ - which = 'prsz' - want = 'bool' -class _Prop_titled(aetools.NProperty): - """titled - Does the window have a title bar? """ - which = 'ptit' - want = 'bool' -class _Prop_visible(aetools.NProperty): - """visible - is the window visible? """ - which = 'pvis' - want = 'bool' -class _Prop_zoomable(aetools.NProperty): - """zoomable - Is the window zoomable? """ - which = 'iszm' - want = 'bool' -class _Prop_zoomed(aetools.NProperty): - """zoomed - Is the window zoomed? """ - which = 'pzum' - want = 'bool' - -class document(aetools.ComponentItem): - """document - A Document """ - want = 'docu' -class _Prop_modified(aetools.NProperty): - """modified - Has the document been modified since the last save? """ - which = 'imod' - want = 'bool' -application._superclassnames = [] -application._privpropdict = { -} -application._privelemdict = { - 'document' : document, - 'window' : window, -} -window._superclassnames = [] -window._privpropdict = { - 'bounds' : _Prop_bounds, - 'closeable' : _Prop_closeable, - 'floating' : _Prop_floating, - 'index' : _Prop_index, - 'modal' : _Prop_modal, - 'name' : _Prop_name, - 'position' : _Prop_position, - 'resizable' : _Prop_resizable, - 'titled' : _Prop_titled, - 'visible' : _Prop_visible, - 'zoomable' : _Prop_zoomable, - 'zoomed' : _Prop_zoomed, -} -window._privelemdict = { -} -document._superclassnames = [] -document._privpropdict = { - 'modified' : _Prop_modified, - 'name' : _Prop_name, -} -document._privelemdict = { -} -_Enum_savo = { - 'yes' : 'yes ', # Save objects now - 'no' : 'no ', # Do not save objects - 'ask' : 'ask ', # Ask the user whether to save -} - - -# -# Indices of types declared in this module -# -_classdeclarations = { - 'capp' : application, - 'cwin' : window, - 'docu' : document, -} - -_propdeclarations = { - 'hclb' : _Prop_closeable, - 'imod' : _Prop_modified, - 'isfl' : _Prop_floating, - 'iszm' : _Prop_zoomable, - 'pbnd' : _Prop_bounds, - 'pidx' : _Prop_index, - 'pmod' : _Prop_modal, - 'pnam' : _Prop_name, - 'ppos' : _Prop_position, - 'prsz' : _Prop_resizable, - 'ptit' : _Prop_titled, - 'pvis' : _Prop_visible, - 'pzum' : _Prop_zoomed, -} - -_compdeclarations = { -} - -_enumdeclarations = { - 'savo' : _Enum_savo, -} diff --git a/Mac/Tools/Doc/HelpIndexingTool/__init__.py b/Mac/Tools/Doc/HelpIndexingTool/__init__.py deleted file mode 100644 index 5359df5..0000000 --- a/Mac/Tools/Doc/HelpIndexingTool/__init__.py +++ /dev/null @@ -1,78 +0,0 @@ -""" -Package generated from /Developer/Applications/Apple Help Indexing Tool.app -""" -import aetools -Error = aetools.Error -import Standard_Suite -import Help_Indexing_Tool_Suite -import odds_and_ends -import Miscellaneous_Standards -import Required_Suite - - -_code_to_module = { - 'CoRe' : Standard_Suite, - 'HIT ' : Help_Indexing_Tool_Suite, - 'Odds' : odds_and_ends, - 'misc' : Miscellaneous_Standards, - 'reqd' : Required_Suite, -} - - - -_code_to_fullname = { - 'CoRe' : ('HelpIndexingTool.Standard_Suite', 'Standard_Suite'), - 'HIT ' : ('HelpIndexingTool.Help_Indexing_Tool_Suite', 'Help_Indexing_Tool_Suite'), - 'Odds' : ('HelpIndexingTool.odds_and_ends', 'odds_and_ends'), - 'misc' : ('HelpIndexingTool.Miscellaneous_Standards', 'Miscellaneous_Standards'), - 'reqd' : ('HelpIndexingTool.Required_Suite', 'Required_Suite'), -} - -from Standard_Suite import * -from Help_Indexing_Tool_Suite import * -from odds_and_ends import * -from Miscellaneous_Standards import * -from Required_Suite import * - -def getbaseclasses(v): - if not getattr(v, '_propdict', None): - v._propdict = {} - v._elemdict = {} - for superclassname in getattr(v, '_superclassnames', []): - superclass = eval(superclassname) - getbaseclasses(superclass) - v._propdict.update(getattr(superclass, '_propdict', {})) - v._elemdict.update(getattr(superclass, '_elemdict', {})) - v._propdict.update(getattr(v, '_privpropdict', {})) - v._elemdict.update(getattr(v, '_privelemdict', {})) - -import StdSuites - -# -# Set property and element dictionaries now that all classes have been defined -# -getbaseclasses(window) -getbaseclasses(application) -getbaseclasses(document) -getbaseclasses(application) - -# -# Indices of types declared in this module -# -_classdeclarations = { - 'cwin' : window, - 'capp' : application, - 'docu' : document, - 'capp' : application, -} - - -class HelpIndexingTool(Standard_Suite_Events, - Help_Indexing_Tool_Suite_Events, - odds_and_ends_Events, - Miscellaneous_Standards_Events, - Required_Suite_Events, - aetools.TalkTo): - _signature = 'hiti' - - _moduleName = 'HelpIndexingTool' diff --git a/Mac/Tools/Doc/HelpIndexingTool/odds_and_ends.py b/Mac/Tools/Doc/HelpIndexingTool/odds_and_ends.py deleted file mode 100644 index 86ecb95..0000000 --- a/Mac/Tools/Doc/HelpIndexingTool/odds_and_ends.py +++ /dev/null @@ -1,49 +0,0 @@ -"""Suite odds and ends: Things that should be in some standard suite, but aren\xd5t -Level 1, version 1 - -Generated from /Developer/Applications/Apple Help Indexing Tool.app -AETE/AEUT resource version 1/1, language 0, script 0 -""" - -import aetools -import MacOS - -_code = 'Odds' - -class odds_and_ends_Events: - - def select(self, _object=None, _attributes={}, **_arguments): - """select: Select the specified object - Required argument: the object to select - Keyword argument _attributes: AppleEvent attribute dictionary - """ - _code = 'misc' - _subcode = 'slct' - - if _arguments: raise TypeError('No optional args expected') - _arguments['----'] = _object - - - _reply, _arguments, _attributes = self.send(_code, _subcode, - _arguments, _attributes) - if _arguments.get('errn', 0): - raise aetools.Error(aetools.decodeerror(_arguments)) - # XXXX Optionally decode result - if _arguments.has_key('----'): - return _arguments['----'] - - -# -# Indices of types declared in this module -# -_classdeclarations = { -} - -_propdeclarations = { -} - -_compdeclarations = { -} - -_enumdeclarations = { -} diff --git a/Mac/Tools/Doc/README b/Mac/Tools/Doc/README deleted file mode 100644 index 4f4d53d..0000000 --- a/Mac/Tools/Doc/README +++ /dev/null @@ -1,35 +0,0 @@ -In this directory you can build the Python documentation in a form that -is suitable for access with Apple Help Viewer. This will enable the -"Python Documentation" menu entries in the MacPython IDE Help menu. - -Unfortunately the procedure to build the docs is not very streamlined. - -First, edit setup.py. At the top, edit MAJOR_VERSION and MINOR_VERSION, -and check that DESTDIR makes sense. The documentation will be installed -inside PythonIDE.app. - -In DocBuild.initialize_options, set self.download to True if you want to -download the docs. Set it to False if you want to build the docs from -the source tree, but this requires LaTex and lots of other stuff. -Doable, but not easy. - -Second, if you want to download the docs you may need to do a couple -more edits. The way the docs are packaged will often change between -major releases. Fiddle DocBuild.downloadDocs to make it do the right -thing (download the docs from python.org, unpack them, rename the -directory to "build/html"). - -After these edits you should be ready to roll. "pythonw setup.py build" -should download and unpack (or build) the docs. Next, it will do some -magic to make the docs indexable. Finally, it will run the Apple Help -Indexing Tool. (This last step is the reason you must use "pythonw" as -opposed to "python"). Usually it will time out while waiting for AHIT to -do its work. Wait until AHIT is done. - -Now you're ready to install with "python setup.py install". - -After this is done test your work. Fire up PythonIDE, and check that -Help->Python Documentation brings up the documentation in the Help Viewer. -Also open an IDE edit window, type something like "import sys", select -"import", and use Help->Lookup in Python Documentation to check that the -index has been generated correctly. diff --git a/Mac/Tools/Doc/setup.py b/Mac/Tools/Doc/setup.py deleted file mode 100644 index a35152c..0000000 --- a/Mac/Tools/Doc/setup.py +++ /dev/null @@ -1,213 +0,0 @@ -# Build and install an Apple Help Viewer compatible version of the Python -# documentation into the framework. -# Code by Bill Fancher, with some modifications by Jack Jansen. -# -# You must run this as a two-step process -# 1. python setupDocs.py build -# 2. Wait for Apple Help Indexing Tool to finish -# 3. python setupDocs.py install -# -# To do: -# - test whether the docs are available locally before downloading -# - fix buildDocsFromSource -# - Get documentation version from sys.version, fallback to 2.2.1 -# - See if we can somehow detect that Apple Help Indexing Tool is finished -# - data_files to setup() doesn't seem the right way to pass the arguments -# -import sys, os, re -from distutils.cmd import Command -from distutils.command.build import build -from distutils.core import setup -from distutils.file_util import copy_file -from distutils.dir_util import copy_tree -from distutils.log import log -from distutils.spawn import spawn -from distutils import sysconfig, dep_util -from distutils.util import change_root -import HelpIndexingTool -import Carbon.File -import time - -MAJOR_VERSION='2.4' -MINOR_VERSION='2.4.1' -DESTDIR='/Applications/MacPython-%s/PythonIDE.app/Contents/Resources/English.lproj/PythonDocumentation' % MAJOR_VERSION - -class DocBuild(build): - def initialize_options(self): - build.initialize_options(self) - self.build_html = None - self.build_dest = None - self.download = 1 - self.doc_version = MINOR_VERSION # Only needed if download is true - - def finalize_options(self): - build.finalize_options(self) - if self.build_html is None: - self.build_html = os.path.join(self.build_base, 'html') - if self.build_dest is None: - self.build_dest = os.path.join(self.build_base, 'PythonDocumentation') - - def spawn(self, *args): - spawn(args, 1, self.verbose, self.dry_run) - - def downloadDocs(self): - workdir = os.getcwd() - # XXX Note: the next strings may change from version to version - url = 'http://www.python.org/ftp/python/doc/%s/html-%s.tar.bz2' % \ - (self.doc_version,self.doc_version) - tarfile = 'html-%s.tar.bz2' % self.doc_version - dirname = 'Python-Docs-%s' % self.doc_version - - if os.path.exists(self.build_html): - raise RuntimeError('%s: already exists, please remove and try again' % self.build_html) - os.chdir(self.build_base) - self.spawn('curl','-O', url) - self.spawn('tar', '-xjf', tarfile) - os.rename(dirname, 'html') - os.chdir(workdir) -## print "** Please unpack %s" % os.path.join(self.build_base, tarfile) -## print "** Unpack the files into %s" % self.build_html -## raise RuntimeError, "You need to unpack the docs manually" - - def buildDocsFromSource(self): - srcdir = '../../..' - docdir = os.path.join(srcdir, 'Doc') - htmldir = os.path.join(docdir, 'html') - spawn(('make','--directory', docdir, 'html'), 1, self.verbose, self.dry_run) - self.mkpath(self.build_html) - copy_tree(htmldir, self.build_html) - - def ensureHtml(self): - if not os.path.exists(self.build_html): - if self.download: - self.downloadDocs() - else: - self.buildDocsFromSource() - - def hackIndex(self): - ind_html = 'index.html' - #print 'self.build_dest =', self.build_dest - hackedIndex = file(os.path.join(self.build_dest, ind_html),'w') - origIndex = file(os.path.join(self.build_html,ind_html)) - r = re.compile('', re.DOTALL) - hackedIndex.write(r.sub('',origIndex.read())) - - def hackFile(self,d,f): - origPath = os.path.join(d,f) - assert(origPath[:len(self.build_html)] == self.build_html) - outPath = os.path.join(self.build_dest, d[len(self.build_html)+1:], f) - (name, ext) = os.path.splitext(f) - if os.path.isdir(origPath): - self.mkpath(outPath) - elif ext == '.html': - if self.verbose: print('hacking %s to %s' % (origPath,outPath)) - hackedFile = file(outPath, 'w') - origFile = file(origPath,'r') - hackedFile.write(self.r.sub('
', origFile.read())) - else: - copy_file(origPath, outPath) - - def hackHtml(self): - self.r = re.compile('
') - os.walk(self.build_html, self.visit, None) - - def visit(self, dummy, dirname, filenames): - for f in filenames: - self.hackFile(dirname, f) - - def makeHelpIndex(self): - app = '/Developer/Applications/Apple Help Indexing Tool.app' - self.spawn('open', '-a', app , self.build_dest) - print("Please wait until Apple Help Indexing Tool finishes before installing") - - def makeHelpIndex(self): - app = HelpIndexingTool.HelpIndexingTool(start=1) - app.open(Carbon.File.FSSpec(self.build_dest)) - sys.stderr.write("Waiting for Help Indexing Tool to start...") - while 1: - # This is bad design in the suite generation code! - idle = app._get(HelpIndexingTool.Help_Indexing_Tool_Suite._Prop_idleStatus()) - time.sleep(10) - if not idle: break - sys.stderr.write(".") - sys.stderr.write("\n") - sys.stderr.write("Waiting for Help Indexing Tool to finish...") - while 1: - # This is bad design in the suite generation code! - idle = app._get(HelpIndexingTool.Help_Indexing_Tool_Suite._Prop_idleStatus()) - time.sleep(10) - if idle: break - sys.stderr.write(".") - sys.stderr.write("\n") - - - def run(self): - self.ensure_finalized() - self.mkpath(self.build_base) - self.ensureHtml() - if not os.path.isdir(self.build_html): - raise RuntimeError("Can't find source folder for documentation.") - self.mkpath(self.build_dest) - if dep_util.newer(os.path.join(self.build_html,'index.html'), os.path.join(self.build_dest,'index.html')): - self.mkpath(self.build_dest) - self.hackHtml() - self.hackIndex() - self.makeHelpIndex() - -class AHVDocInstall(Command): - description = "install Apple Help Viewer html files" - user_options = [('install-doc=', 'd', - 'directory to install HTML tree'), - ('root=', None, - "install everything relative to this alternate root directory"), - ] - - def initialize_options(self): - self.build_dest = None - self.install_doc = None - self.prefix = None - self.root = None - - def finalize_options(self): - self.set_undefined_options('install', - ('prefix', 'prefix'), - ('root', 'root')) -# import pdb ; pdb.set_trace() - build_cmd = self.get_finalized_command('build') - if self.build_dest is None: - build_cmd = self.get_finalized_command('build') - self.build_dest = build_cmd.build_dest - if self.install_doc is None: - self.install_doc = os.path.join(self.prefix, DESTDIR) - print('INSTALL', self.build_dest, '->', self.install_doc) - - def run(self): - self.finalize_options() - self.ensure_finalized() - print("Running Installer") - instloc = self.install_doc - if self.root: - instloc = change_root(self.root, instloc) - self.mkpath(instloc) - copy_tree(self.build_dest, instloc) - print("Installation complete") - -def mungeVersion(infile, outfile): - i = file(infile,'r') - o = file(outfile,'w') - o.write(re.sub('\$\(VERSION\)',sysconfig.get_config_var('VERSION'),i.read())) - i.close() - o.close() - -def main(): - # turn off warnings when deprecated modules are imported -## import warnings -## warnings.filterwarnings("ignore",category=DeprecationWarning) - setup(name = 'Documentation', - version = '%d.%d' % sys.version_info[:2], - cmdclass = {'install_data':AHVDocInstall, 'build':DocBuild}, - data_files = ['dummy'], - ) - -if __name__ == '__main__': - main() -- cgit v0.12 From a5ec63b5ebb1678558e4411d1dda8f994145fde8 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 29 Sep 2013 14:49:17 -0400 Subject: remove unused imports --- Lib/venv/__init__.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py index 272a887..fc5b65b 100644 --- a/Lib/venv/__init__.py +++ b/Lib/venv/__init__.py @@ -25,18 +25,11 @@ optional arguments: --upgrade Upgrade the environment directory to use this version of Python, assuming Python has been upgraded in-place. """ -import base64 -import io import logging import os -import os.path import shutil import sys import sysconfig -try: - import threading -except ImportError: - threading = None import types logger = logging.getLogger(__name__) -- cgit v0.12 From 95536b8405e318457ea41f8f10ee645231b48faa Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 29 Sep 2013 15:18:43 -0400 Subject: rename some more tests to avoid duplicate names (#19123) --- Lib/test/test_regrtest.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py index 2bb8db1..a398a4f 100644 --- a/Lib/test/test_regrtest.py +++ b/Lib/test/test_regrtest.py @@ -167,13 +167,13 @@ class ParseArgsTestCase(unittest.TestCase): self.assertEqual(ns.testdir, os.path.join(support.SAVEDCWD, 'foo')) self.checkError(['--testdir'], 'expected one argument') - def test_findleaks(self): + def test_runleaks(self): for opt in '-L', '--runleaks': with self.subTest(opt=opt): ns = regrtest._parse_args([opt]) self.assertTrue(ns.runleaks) - def test_findleaks(self): + def test_huntrleaks(self): for opt in '-R', '--huntrleaks': with self.subTest(opt=opt): ns = regrtest._parse_args([opt, ':']) @@ -201,7 +201,7 @@ class ParseArgsTestCase(unittest.TestCase): self.checkError([opt, '2', '-l'], "don't go together") self.checkError([opt, '2', '-M', '4G'], "don't go together") - def test_findleaks(self): + def test_coverage(self): for opt in '-T', '--coverage': with self.subTest(opt=opt): ns = regrtest._parse_args([opt]) -- cgit v0.12 From 5d23e6d54352db7c64d152dbabef798340127ccb Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sun, 29 Sep 2013 22:18:38 +0200 Subject: Issue #5845: In site.py, only load readline history from ~/.python_history if no history has been read already. This avoids double writes to the history file at shutdown. --- Lib/site.py | 19 +++++++++++++------ Misc/NEWS | 4 ++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Lib/site.py b/Lib/site.py index 9f935a3..e1fa30e 100644 --- a/Lib/site.py +++ b/Lib/site.py @@ -405,12 +405,19 @@ def enablerlcompleter(): # want to ignore the exception. pass - history = os.path.join(os.path.expanduser('~'), '.python_history') - try: - readline.read_history_file(history) - except IOError: - pass - atexit.register(readline.write_history_file, history) + if readline.get_history_item(1) is None: + # If no history was loaded, default to .python_history. + # The guard is necessary to avoid doubling history size at + # each interpreter exit when readline was already configured + # through a PYTHONSTARTUP hook, see: + # http://bugs.python.org/issue5845#msg198636 + history = os.path.join(os.path.expanduser('~'), + '.python_history') + try: + readline.read_history_file(history) + except IOError: + pass + atexit.register(readline.write_history_file, history) sys.__interactivehook__ = register_readline diff --git a/Misc/NEWS b/Misc/NEWS index 8974c4b..8e28b01 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -15,6 +15,10 @@ Core and Builtins Library ------- +- Issue #5845: In site.py, only load readline history from ~/.python_history + if no history has been read already. This avoids double writes to the + history file at shutdown. + - Properly initialize all fields of a SSL object after allocation. - Issue #19095: SSLSocket.getpeercert() now raises ValueError when the -- cgit v0.12