diff options
author | Stefan Krah <skrah@bytereef.org> | 2012-03-05 16:48:21 (GMT) |
---|---|---|
committer | Stefan Krah <skrah@bytereef.org> | 2012-03-05 16:48:21 (GMT) |
commit | 1e88f3faa61dbaa9ea0d2404aa8563c1eeceba54 (patch) | |
tree | 9385c17c0bceed0627296ec2fa9e07c2e0afbdc1 | |
parent | 1649c1b33a1d8f46ccf97b8373f62a22bbb3fde6 (diff) | |
parent | c53d6242359cd0dcf736a6c455a6397074815d46 (diff) | |
download | cpython-1e88f3faa61dbaa9ea0d2404aa8563c1eeceba54.zip cpython-1e88f3faa61dbaa9ea0d2404aa8563c1eeceba54.tar.gz cpython-1e88f3faa61dbaa9ea0d2404aa8563c1eeceba54.tar.bz2 |
Merge.
-rw-r--r-- | Doc/howto/advocacy.rst | 3 | ||||
-rw-r--r-- | Doc/howto/cporting.rst | 4 | ||||
-rw-r--r-- | Doc/howto/regex.rst | 4 | ||||
-rw-r--r-- | Doc/library/markup.rst | 4 | ||||
-rw-r--r-- | Doc/library/packaging.database.rst | 45 | ||||
-rw-r--r-- | Lib/distutils/command/bdist_msi.py | 2 | ||||
-rw-r--r-- | Lib/distutils/tests/test_bdist_msi.py | 19 | ||||
-rw-r--r-- | Lib/packaging/command/bdist_msi.py | 2 | ||||
-rw-r--r-- | Lib/packaging/database.py | 1 | ||||
-rw-r--r-- | Lib/packaging/tests/test_command_bdist_msi.py | 13 | ||||
-rw-r--r-- | Lib/xmlrpc/server.py | 2 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Objects/frameobject.c | 1 |
13 files changed, 72 insertions, 31 deletions
diff --git a/Doc/howto/advocacy.rst b/Doc/howto/advocacy.rst index e67e201..2969d26 100644 --- a/Doc/howto/advocacy.rst +++ b/Doc/howto/advocacy.rst @@ -264,8 +264,7 @@ the organizations that use Python. **What are the restrictions on Python's use?** -They're practically nonexistent. Consult the :file:`Misc/COPYRIGHT` file in the -source distribution, or the section :ref:`history-and-license` for the full +They're practically nonexistent. Consult :ref:`history-and-license` for the full language, but it boils down to three conditions: * You have to leave the copyright notice on the software; if you don't include diff --git a/Doc/howto/cporting.rst b/Doc/howto/cporting.rst index 98db9dd..bea2153 100644 --- a/Doc/howto/cporting.rst +++ b/Doc/howto/cporting.rst @@ -261,8 +261,8 @@ behave slightly differently from real Capsules. Specifically: copy as you see fit.) You can find :file:`capsulethunk.h` in the Python source distribution -in the :file:`Doc/includes` directory. We also include it here for -your reference; here is :file:`capsulethunk.h`: +as :source:`Doc/includes/capsulethunk.h`. We also include it here for +your convenience: .. literalinclude:: ../includes/capsulethunk.h diff --git a/Doc/howto/regex.rst b/Doc/howto/regex.rst index 07a8b56..3ac03ca 100644 --- a/Doc/howto/regex.rst +++ b/Doc/howto/regex.rst @@ -360,7 +360,7 @@ and more. You can learn about this by interactively experimenting with the :mod:`re` module. If you have :mod:`tkinter` available, you may also want to look at -:file:`Tools/demo/redemo.py`, a demonstration program included with the +:source:`Tools/demo/redemo.py`, a demonstration program included with the Python distribution. It allows you to enter REs and strings, and displays whether the RE matches or fails. :file:`redemo.py` can be quite useful when trying to debug a complicated RE. Phil Schwartz's `Kodos @@ -495,7 +495,7 @@ more convenient. If a program contains a lot of regular expressions, or re-uses the same ones in several locations, then it might be worthwhile to collect all the definitions in one place, in a section of code that compiles all the REs ahead of time. To take an example from the standard library, here's an extract -from the now deprecated :file:`xmllib.py`:: +from the now-defunct Python 2 standard :mod:`xmllib` module:: ref = re.compile( ... ) entityref = re.compile( ... ) diff --git a/Doc/library/markup.rst b/Doc/library/markup.rst index 49794ef..1b4cca5 100644 --- a/Doc/library/markup.rst +++ b/Doc/library/markup.rst @@ -23,7 +23,7 @@ definition of the Python bindings for the DOM and SAX interfaces. html.rst html.parser.rst html.entities.rst - pyexpat.rst + xml.etree.elementtree.rst xml.dom.rst xml.dom.minidom.rst xml.dom.pulldom.rst @@ -31,4 +31,4 @@ definition of the Python bindings for the DOM and SAX interfaces. xml.sax.handler.rst xml.sax.utils.rst xml.sax.reader.rst - xml.etree.elementtree.rst + pyexpat.rst diff --git a/Doc/library/packaging.database.rst b/Doc/library/packaging.database.rst index aaa2cb9..9d750f0 100644 --- a/Doc/library/packaging.database.rst +++ b/Doc/library/packaging.database.rst @@ -15,6 +15,11 @@ Installed Python distributions are represented by instances of Most functions also provide an extra argument ``use_egg_info`` to take legacy distributions into account. +For the purpose of this module, "installed" means that the distribution's +:file:`.dist-info`, :file:`.egg-info` or :file:`egg` directory or file is found +on :data:`sys.path`. For example, if the parent directory of a +:file:`dist-info` directory is added to :envvar:`PYTHONPATH`, then it will be +available in the database. Classes representing installed distributions -------------------------------------------- @@ -128,7 +133,7 @@ Functions to work with the database for the first installed distribution matching *name*. Egg distributions are considered only if *use_egg_info* is true; if both a dist-info and an egg file are found, the dist-info prevails. The directories to be searched are - given in *paths*, which defaults to :data:`sys.path`. Return ``None`` if no + given in *paths*, which defaults to :data:`sys.path`. Returns ``None`` if no matching distribution is found. .. FIXME param should be named use_egg @@ -200,20 +205,23 @@ functions: Examples -------- -Print all information about a distribution -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Printing all information about a distribution +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Given a path to a ``.dist-info`` distribution, we shall print out all +Given the name of an installed distribution, we shall print out all information that can be obtained using functions provided in this module:: import sys import packaging.database - path = input() - # first create the Distribution instance try: - dist = packaging.database.Distribution(path) - except FileNotFoundError: + name = sys.argv[1] + except ValueError: + sys.exit('Not enough arguments') + + # first create the Distribution instance + dist = packaging.database.Distribution(path) + if dist is None: sys.exit('No such distribution') print('Information about %r' % dist.name) @@ -244,7 +252,7 @@ information from a :file:`.dist-info` directory. By typing in the console: .. code-block:: sh - $ echo /tmp/choxie/choxie-2.0.0.9.dist-info | python3 print_info.py + python print_info.py choxie we get the following output: @@ -299,10 +307,23 @@ we get the following output: * It was installed as a dependency -Find out obsoleted distributions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Getting metadata about a distribution +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Sometimes you're not interested about the packaging information contained in a +full :class:`Distribution` object but just want to do something with its +:attr:`~Distribution.metadata`:: + + >>> from packaging.database import get_distribution + >>> info = get_distribution('chocolate').metadata + >>> info['Keywords'] + ['cooking', 'happiness'] + + +Finding out obsoleted distributions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Now, we take tackle a different problem, we are interested in finding out +Now, we tackle a different problem, we are interested in finding out which distributions have been obsoleted. This can be easily done as follows:: import packaging.database diff --git a/Lib/distutils/command/bdist_msi.py b/Lib/distutils/command/bdist_msi.py index b3cfe9c..fde0f63 100644 --- a/Lib/distutils/command/bdist_msi.py +++ b/Lib/distutils/command/bdist_msi.py @@ -260,7 +260,7 @@ class bdist_msi(Command): self.db.Commit() if hasattr(self.distribution, 'dist_files'): - tup = 'bdist_msi', self.target_version or 'any', fullname + tup = 'bdist_msi', self.target_version or 'any', installer_name self.distribution.dist_files.append(tup) if not self.keep_temp: diff --git a/Lib/distutils/tests/test_bdist_msi.py b/Lib/distutils/tests/test_bdist_msi.py index 9308c79..e599461 100644 --- a/Lib/distutils/tests/test_bdist_msi.py +++ b/Lib/distutils/tests/test_bdist_msi.py @@ -1,12 +1,12 @@ """Tests for distutils.command.bdist_msi.""" -import unittest +import os import sys - +import unittest from test.support import run_unittest - from distutils.tests import support -@unittest.skipUnless(sys.platform=="win32", "These tests are only for win32") + +@unittest.skipUnless(sys.platform == 'win32', 'these tests require Windows') class BDistMSITestCase(support.TempdirManager, support.LoggingSilencer, unittest.TestCase): @@ -14,9 +14,18 @@ class BDistMSITestCase(support.TempdirManager, def test_minimal(self): # minimal test XXX need more tests from distutils.command.bdist_msi import bdist_msi - pkg_pth, dist = self.create_dist() + project_dir, dist = self.create_dist() cmd = bdist_msi(dist) cmd.ensure_finalized() + cmd.run() + + bdists = os.listdir(os.path.join(project_dir, 'dist')) + self.assertEqual(bdists, ['foo-0.1.msi']) + + # bug #13719: upload ignores bdist_msi files + self.assertEqual(dist.dist_files, + [('bdist_msi', 'any', 'dist/foo-0.1.msi')]) + def test_suite(): return unittest.makeSuite(BDistMSITestCase) diff --git a/Lib/packaging/command/bdist_msi.py b/Lib/packaging/command/bdist_msi.py index 995eec5..ad1edef 100644 --- a/Lib/packaging/command/bdist_msi.py +++ b/Lib/packaging/command/bdist_msi.py @@ -261,7 +261,7 @@ class bdist_msi(Command): self.db.Commit() if hasattr(self.distribution, 'dist_files'): - tup = 'bdist_msi', self.target_version or 'any', fullname + tup = 'bdist_msi', self.target_version or 'any', installer_name self.distribution.dist_files.append(tup) if not self.keep_temp: diff --git a/Lib/packaging/database.py b/Lib/packaging/database.py index b2fcb97..e028dc5 100644 --- a/Lib/packaging/database.py +++ b/Lib/packaging/database.py @@ -19,6 +19,7 @@ __all__ = [ 'get_distributions', 'get_distribution', 'get_file_users', 'provides_distribution', 'obsoletes_distribution', 'enable_cache', 'disable_cache', 'clear_cache', + # XXX these functions' names look like get_file_users but are not related 'get_file_path', 'get_file'] diff --git a/Lib/packaging/tests/test_command_bdist_msi.py b/Lib/packaging/tests/test_command_bdist_msi.py index fded962..25973ef 100644 --- a/Lib/packaging/tests/test_command_bdist_msi.py +++ b/Lib/packaging/tests/test_command_bdist_msi.py @@ -1,20 +1,29 @@ """Tests for distutils.command.bdist_msi.""" +import os import sys from packaging.tests import unittest, support +@unittest.skipUnless(sys.platform == 'win32', 'these tests require Windows') class BDistMSITestCase(support.TempdirManager, support.LoggingCatcher, unittest.TestCase): - @unittest.skipUnless(sys.platform == "win32", "runs only on win32") def test_minimal(self): # minimal test XXX need more tests from packaging.command.bdist_msi import bdist_msi - pkg_pth, dist = self.create_dist() + project_dir, dist = self.create_dist() cmd = bdist_msi(dist) cmd.ensure_finalized() + cmd.run() + + bdists = os.listdir(os.path.join(project_dir, 'dist')) + self.assertEqual(bdists, ['foo-0.1.msi']) + + # bug #13719: upload ignores bdist_msi files + self.assertEqual(dist.dist_files, + [('bdist_msi', 'any', 'dist/foo-0.1.msi')]) def test_suite(): diff --git a/Lib/xmlrpc/server.py b/Lib/xmlrpc/server.py index fc3fa4b..54e1726 100644 --- a/Lib/xmlrpc/server.py +++ b/Lib/xmlrpc/server.py @@ -1,4 +1,4 @@ -"""XML-RPC Servers. +r"""XML-RPC Servers. This module can be used to create simple XML-RPC servers by creating a server and either installing functions, a @@ -13,6 +13,9 @@ Core and Builtins Library ------- +- Issue #13719: Make the distutils and packaging upload commands aware of + bdist_msi products. + - Issue #14007: Accept incomplete TreeBuilder objects (missing start, end, data or close method) for the Python implementation as well. Drop the no-op TreeBuilder().xml() method from the C implementation. diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 9b05b9d..c1ec811 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -20,7 +20,6 @@ static PyMemberDef frame_memberlist[] = { {"f_builtins", T_OBJECT, OFF(f_builtins), READONLY}, {"f_globals", T_OBJECT, OFF(f_globals), READONLY}, {"f_lasti", T_INT, OFF(f_lasti), READONLY}, - {"f_yieldfrom", T_OBJECT, OFF(f_yieldfrom), READONLY}, {NULL} /* Sentinel */ }; |