Commit d139b994 authored by Éric Araujo's avatar Éric Araujo

Fix writing of the RESOURCES file by packaging (#12386)

parent f598d60b
...@@ -104,7 +104,7 @@ class install_distinfo(Command): ...@@ -104,7 +104,7 @@ class install_distinfo(Command):
'RESOURCES') 'RESOURCES')
logger.info('creating %s', resources_path) logger.info('creating %s', resources_path)
if not self.dry_run: if not self.dry_run:
with open(resources_path, 'wb') as f: with open(resources_path, 'w') as f:
writer = csv.writer(f, delimiter=',', writer = csv.writer(f, delimiter=',',
lineterminator='\n', lineterminator='\n',
quotechar='"') quotechar='"')
......
"""Tests for packaging.command.install_data.""" """Tests for packaging.command.install_data."""
import os import os
import sys
import sysconfig import sysconfig
import packaging.database
from sysconfig import _get_default_scheme from sysconfig import _get_default_scheme
from packaging.tests import unittest, support from packaging.tests import unittest, support
from packaging.command.install_data import install_data 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, class InstallDataTestCase(support.TempdirManager,
support.LoggingCatcher, support.LoggingCatcher,
unittest.TestCase): unittest.TestCase):
def test_simple_run(self): def setUp(self):
super(InstallDataTestCase, self).setUp()
scheme = _get_default_scheme() scheme = _get_default_scheme()
old_items = sysconfig._SCHEMES.items(scheme) old_items = sysconfig._SCHEMES.items(scheme)
def restore(): def restore():
sysconfig._SCHEMES.remove_section(scheme) sysconfig._SCHEMES.remove_section(scheme)
sysconfig._SCHEMES.add_section(scheme) sysconfig._SCHEMES.add_section(scheme)
for option, value in old_items: for option, value in old_items:
sysconfig._SCHEMES.set(scheme, option, value) sysconfig._SCHEMES.set(scheme, option, value)
self.addCleanup(restore) self.addCleanup(restore)
def test_simple_run(self):
pkg_dir, dist = self.create_dist() pkg_dir, dist = self.create_dist()
cmd = install_data(dist) cmd = install_data(dist)
cmd.install_dir = inst = os.path.join(pkg_dir, 'inst') cmd.install_dir = inst = os.path.join(pkg_dir, 'inst')
scheme = _get_default_scheme()
sysconfig._SCHEMES.set(scheme, 'inst', sysconfig._SCHEMES.set(scheme, 'inst',
os.path.join(pkg_dir, 'inst')) os.path.join(pkg_dir, 'inst'))
...@@ -67,8 +76,7 @@ class InstallDataTestCase(support.TempdirManager, ...@@ -67,8 +76,7 @@ class InstallDataTestCase(support.TempdirManager,
three = os.path.join(cmd.install_dir, 'three') three = os.path.join(cmd.install_dir, 'three')
self.write_file(three, 'xx') self.write_file(three, 'xx')
sysconfig._SCHEMES.set(scheme, 'inst3', sysconfig._SCHEMES.set(scheme, 'inst3', cmd.install_dir)
cmd.install_dir)
cmd.data_files = {one: '{inst}/one', two: '{inst2}/two', cmd.data_files = {one: '{inst}/one', two: '{inst2}/two',
three: '{inst3}/three'} three: '{inst3}/three'}
...@@ -80,6 +88,49 @@ class InstallDataTestCase(support.TempdirManager, ...@@ -80,6 +88,49 @@ class InstallDataTestCase(support.TempdirManager,
self.assertTrue(os.path.exists(os.path.join(inst2, rtwo))) self.assertTrue(os.path.exists(os.path.join(inst2, rtwo)))
self.assertTrue(os.path.exists(os.path.join(inst, rone))) 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(): def test_suite():
return unittest.makeSuite(InstallDataTestCase) return unittest.makeSuite(InstallDataTestCase)
......
"""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 os
import csv import csv
......
...@@ -12,7 +12,7 @@ Core and Builtins ...@@ -12,7 +12,7 @@ Core and Builtins
- PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy. - 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 - 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 as "The pipe is being closed") is now mapped to POSIX errno EPIPE
...@@ -304,6 +304,8 @@ Core and Builtins ...@@ -304,6 +304,8 @@ Core and Builtins
Library 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 - Issue #13158: Fix decoding and encoding of GNU tar specific base-256 number
fields in tarfile. fields in tarfile.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment