summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Krah <skrah@bytereef.org>2012-03-05 16:48:21 (GMT)
committerStefan Krah <skrah@bytereef.org>2012-03-05 16:48:21 (GMT)
commit1e88f3faa61dbaa9ea0d2404aa8563c1eeceba54 (patch)
tree9385c17c0bceed0627296ec2fa9e07c2e0afbdc1
parent1649c1b33a1d8f46ccf97b8373f62a22bbb3fde6 (diff)
parentc53d6242359cd0dcf736a6c455a6397074815d46 (diff)
downloadcpython-1e88f3faa61dbaa9ea0d2404aa8563c1eeceba54.zip
cpython-1e88f3faa61dbaa9ea0d2404aa8563c1eeceba54.tar.gz
cpython-1e88f3faa61dbaa9ea0d2404aa8563c1eeceba54.tar.bz2
Merge.
-rw-r--r--Doc/howto/advocacy.rst3
-rw-r--r--Doc/howto/cporting.rst4
-rw-r--r--Doc/howto/regex.rst4
-rw-r--r--Doc/library/markup.rst4
-rw-r--r--Doc/library/packaging.database.rst45
-rw-r--r--Lib/distutils/command/bdist_msi.py2
-rw-r--r--Lib/distutils/tests/test_bdist_msi.py19
-rw-r--r--Lib/packaging/command/bdist_msi.py2
-rw-r--r--Lib/packaging/database.py1
-rw-r--r--Lib/packaging/tests/test_command_bdist_msi.py13
-rw-r--r--Lib/xmlrpc/server.py2
-rw-r--r--Misc/NEWS3
-rw-r--r--Objects/frameobject.c1
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
diff --git a/Misc/NEWS b/Misc/NEWS
index 4b18715..52fd990 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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 */
};