[Python-checkins] cpython: Fix writing of the RESOURCES file by packaging (#12386)

eric.araujo python-checkins at python.org
Fri Oct 14 17:06:08 CEST 2011


http://hg.python.org/cpython/rev/1f3459b08298
changeset:   72934:1f3459b08298
user:        Éric Araujo <merwok at netwok.org>
date:        Fri Oct 14 16:58:23 2011 +0200
summary:
  Fix writing of the RESOURCES file by packaging (#12386)

files:
  Lib/packaging/command/install_distinfo.py            |   2 +-
  Lib/packaging/tests/test_command_install_data.py     |  57 +++++++++-
  Lib/packaging/tests/test_command_install_distinfo.py |   5 +-
  Misc/NEWS                                            |   4 +-
  4 files changed, 62 insertions(+), 6 deletions(-)


diff --git a/Lib/packaging/command/install_distinfo.py b/Lib/packaging/command/install_distinfo.py
--- a/Lib/packaging/command/install_distinfo.py
+++ b/Lib/packaging/command/install_distinfo.py
@@ -104,7 +104,7 @@
                                               'RESOURCES')
                 logger.info('creating %s', resources_path)
                 if not self.dry_run:
-                    with open(resources_path, 'wb') as f:
+                    with open(resources_path, 'w') as f:
                         writer = csv.writer(f, delimiter=',',
                                             lineterminator='\n',
                                             quotechar='"')
diff --git a/Lib/packaging/tests/test_command_install_data.py b/Lib/packaging/tests/test_command_install_data.py
--- a/Lib/packaging/tests/test_command_install_data.py
+++ b/Lib/packaging/tests/test_command_install_data.py
@@ -1,28 +1,37 @@
 """Tests for packaging.command.install_data."""
 import os
+import sys
 import sysconfig
+import packaging.database
 from sysconfig import _get_default_scheme
 from packaging.tests import unittest, support
 from packaging.command.install_data import install_data
+from packaging.command.install_dist import install_dist
+from packaging.command.install_distinfo import install_distinfo
 
 
 class InstallDataTestCase(support.TempdirManager,
                           support.LoggingCatcher,
                           unittest.TestCase):
 
-    def test_simple_run(self):
+    def setUp(self):
+        super(InstallDataTestCase, self).setUp()
         scheme = _get_default_scheme()
         old_items = sysconfig._SCHEMES.items(scheme)
+
         def restore():
             sysconfig._SCHEMES.remove_section(scheme)
             sysconfig._SCHEMES.add_section(scheme)
             for option, value in old_items:
                 sysconfig._SCHEMES.set(scheme, option, value)
+
         self.addCleanup(restore)
 
+    def test_simple_run(self):
         pkg_dir, dist = self.create_dist()
         cmd = install_data(dist)
         cmd.install_dir = inst = os.path.join(pkg_dir, 'inst')
+        scheme = _get_default_scheme()
 
         sysconfig._SCHEMES.set(scheme, 'inst',
                                os.path.join(pkg_dir, 'inst'))
@@ -67,8 +76,7 @@
         three = os.path.join(cmd.install_dir, 'three')
         self.write_file(three, 'xx')
 
-        sysconfig._SCHEMES.set(scheme, 'inst3',
-                               cmd.install_dir)
+        sysconfig._SCHEMES.set(scheme, 'inst3', cmd.install_dir)
 
         cmd.data_files = {one: '{inst}/one', two: '{inst2}/two',
                           three: '{inst3}/three'}
@@ -80,6 +88,49 @@
         self.assertTrue(os.path.exists(os.path.join(inst2, rtwo)))
         self.assertTrue(os.path.exists(os.path.join(inst, rone)))
 
+    def test_resources(self):
+        install_dir = self.mkdtemp()
+        scripts_dir = self.mkdtemp()
+        project_dir, dist = self.create_dist(
+            name='Spamlib', version='0.1',
+            data_files={'spamd': '{scripts}/spamd'})
+
+        os.chdir(project_dir)
+        self.write_file('spamd', '# Python script')
+        sysconfig._SCHEMES.set(_get_default_scheme(), 'scripts', scripts_dir)
+        sys.path.insert(0, install_dir)
+        self.addCleanup(sys.path.remove, install_dir)
+
+        cmd = install_dist(dist)
+        cmd.outputs = ['spamd']
+        cmd.install_lib = install_dir
+        dist.command_obj['install_dist'] = cmd
+
+        cmd = install_data(dist)
+        cmd.install_dir = install_dir
+        cmd.ensure_finalized()
+        dist.command_obj['install_data'] = cmd
+        cmd.run()
+
+        cmd = install_distinfo(dist)
+        cmd.ensure_finalized()
+        dist.command_obj['install_distinfo'] = cmd
+        cmd.run()
+
+        fn = os.path.join(install_dir, 'Spamlib-0.1.dist-info', 'RESOURCES')
+        with open(fn, encoding='utf-8') as fp:
+            content = fp.read().strip()
+
+        expected = 'spamd,%s' % os.path.join(scripts_dir, 'spamd')
+        self.assertEqual(content, expected)
+
+        # just to be sure, we also test that get_file works here, even though
+        # packaging.database has its own test file
+        with packaging.database.get_file('Spamlib', 'spamd') as fp:
+            content = fp.read()
+
+        self.assertEqual('# Python script', content)
+
 
 def test_suite():
     return unittest.makeSuite(InstallDataTestCase)
diff --git a/Lib/packaging/tests/test_command_install_distinfo.py b/Lib/packaging/tests/test_command_install_distinfo.py
--- a/Lib/packaging/tests/test_command_install_distinfo.py
+++ b/Lib/packaging/tests/test_command_install_distinfo.py
@@ -1,4 +1,7 @@
-"""Tests for ``packaging.command.install_distinfo``. """
+"""Tests for ``packaging.command.install_distinfo``.
+
+Writing of the RESOURCES file is tested in test_command_install_data.
+"""
 
 import os
 import csv
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,7 +12,7 @@
 
 - PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
 
-- Add internal API for static strings (_Py_identifier et.al.).
+- Add internal API for static strings (_Py_identifier et al.).
 
 - Issue #13063: the Windows error ERROR_NO_DATA (numbered 232 and described
   as "The pipe is being closed") is now mapped to POSIX errno EPIPE
@@ -304,6 +304,8 @@
 
 Library
 -------
+- Issue #12386: packaging does not fail anymore when writing the RESOURCES
+  file.
 
 - Issue #13158: Fix decoding and encoding of GNU tar specific base-256 number
   fields in tarfile.

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list