Imported Upstream version 58.5.3 upstream/58.5.3
authorDongHun Kwak <dh0128.kwak@samsung.com>
Mon, 18 Jul 2022 06:39:03 +0000 (15:39 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Mon, 18 Jul 2022 06:39:03 +0000 (15:39 +0900)
CHANGES.rst
PKG-INFO
setup.cfg
setuptools.egg-info/PKG-INFO
setuptools/command/egg_info.py
setuptools/tests/test_sdist.py

index 67d62cc..7285616 100644 (file)
@@ -1,3 +1,14 @@
+v58.5.3
+-------
+
+
+Misc
+^^^^
+* #2849: Add fallback for custom ``build_py`` commands inheriting directly from
+  :mod:`distutils`, while still handling ``include_package_data=True`` for
+  ``sdist``.
+
+
 v58.5.2
 -------
 
@@ -13,7 +24,7 @@ v58.5.1
 
 Misc
 ^^^^
-* #2486: Move PkgResourcesDeprecationWarning above implicitly-called function so that it's in the namespace when version warnings are generated in an environment that contains them.
+* #2846: Move PkgResourcesDeprecationWarning above implicitly-called function so that it's in the namespace when version warnings are generated in an environment that contains them.
 
 
 v58.5.0
index fdd158f..7b7d52e 100644 (file)
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: setuptools
-Version: 58.5.2
+Version: 58.5.3
 Summary: Easily download, build, install, upgrade, and uninstall Python packages
 Home-page: https://github.com/pypa/setuptools
 Author: Python Packaging Authority
index c2426ab..04d8ae6 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
 [metadata]
 name = setuptools
-version = 58.5.2
+version = 58.5.3
 author = Python Packaging Authority
 author_email = distutils-sig@python.org
 description = Easily download, build, install, upgrade, and uninstall Python packages
index fdd158f..7b7d52e 100644 (file)
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: setuptools
-Version: 58.5.2
+Version: 58.5.3
 Summary: Easily download, build, install, upgrade, and uninstall Python packages
 Home-page: https://github.com/pypa/setuptools
 Author: Python Packaging Authority
index 4165c35..8ae27d8 100644 (file)
@@ -618,7 +618,15 @@ class manifest_maker(sdist):
         Therefore, avoid triggering any attempt of
         analyzing/building the manifest again.
         """
-        return build_py.get_data_files_without_manifest()
+        if hasattr(build_py, 'get_data_files_without_manifest'):
+            return build_py.get_data_files_without_manifest()
+
+        log.warn(
+            "Custom 'build_py' does not implement "
+            "'get_data_files_without_manifest'.\nPlease extend command classes"
+            " from setuptools instead of distutils."
+        )
+        return build_py.get_data_files()
 
 
 def write_file(filename, contents):
index 34c32bb..e6d8e90 100644 (file)
@@ -6,6 +6,7 @@ import tempfile
 import unicodedata
 import contextlib
 import io
+from unittest import mock
 
 import pytest
 
@@ -106,6 +107,13 @@ class TestSdistTest:
         with tmpdir.as_cwd():
             yield
 
+    def assert_package_data_in_manifest(self, cmd):
+        manifest = cmd.filelist.files
+        assert os.path.join('sdist_test', 'a.txt') in manifest
+        assert os.path.join('sdist_test', 'b.txt') in manifest
+        assert os.path.join('sdist_test', 'c.rst') not in manifest
+        assert os.path.join('d', 'e.dat') in manifest
+
     def test_package_data_in_sdist(self):
         """Regression test for pull request #4: ensures that files listed in
         package_data are included in the manifest even if they're not added to
@@ -120,11 +128,7 @@ class TestSdistTest:
         with quiet():
             cmd.run()
 
-        manifest = cmd.filelist.files
-        assert os.path.join('sdist_test', 'a.txt') in manifest
-        assert os.path.join('sdist_test', 'b.txt') in manifest
-        assert os.path.join('sdist_test', 'c.rst') not in manifest
-        assert os.path.join('d', 'e.dat') in manifest
+        self.assert_package_data_in_manifest(cmd)
 
     def test_package_data_and_include_package_data_in_sdist(self):
         """
@@ -142,11 +146,58 @@ class TestSdistTest:
         with quiet():
             cmd.run()
 
-        manifest = cmd.filelist.files
-        assert os.path.join('sdist_test', 'a.txt') in manifest
-        assert os.path.join('sdist_test', 'b.txt') in manifest
-        assert os.path.join('sdist_test', 'c.rst') not in manifest
-        assert os.path.join('d', 'e.dat') in manifest
+        self.assert_package_data_in_manifest(cmd)
+
+    @mock.patch('setuptools.command.egg_info.log')
+    def test_custom_build_py(self, log_stub):
+        """
+        Ensure projects defining custom build_py don't break
+        when creating sdists (issue #2849)
+        """
+        from distutils.command.build_py import build_py as OrigBuildPy
+
+        using_custom_command_guard = mock.Mock()
+
+        class CustomBuildPy(OrigBuildPy):
+            """
+            Some projects have custom commands inheriting from `distutils`
+            """
+
+            def get_data_files(self):
+                using_custom_command_guard()
+                return super().get_data_files()
+
+        setup_attrs = {**SETUP_ATTRS, 'include_package_data': True}
+        assert setup_attrs['package_data']
+
+        dist = Distribution(setup_attrs)
+        dist.script_name = 'setup.py'
+        cmd = sdist(dist)
+        cmd.ensure_finalized()
+
+        # Make sure we use the custom command
+        cmd.cmdclass = {'build_py': CustomBuildPy}
+        cmd.distribution.cmdclass = {'build_py': CustomBuildPy}
+        assert cmd.distribution.get_command_class('build_py') == CustomBuildPy
+
+        with quiet():
+            cmd.run()
+
+        using_custom_command_guard.assert_called()
+        self.assert_package_data_in_manifest(cmd)
+
+        warn_stub = log_stub.warn
+        warn_stub.assert_called()
+        for call in warn_stub.call_args_list:
+            args, _kw = call
+            if "setuptools instead of distutils" in args[0]:
+                return
+        else:
+            raise AssertionError(
+                "The user should have been warned to extend setuptools command"
+                " classes instead of distutils",
+                warn_stub.call_args_list
+            )
 
     def test_setup_py_exists(self):
         dist = Distribution(SETUP_ATTRS)