commit:     7631422bf0e6ca3ee0bbacd361f84fa9c96d48ef
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 23 02:51:19 2022 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed Feb 23 02:51:52 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7631422b

dev-python/flit_core: backport relative import fix

Fixes emerging e.g. pyparsing.

Bug: https://github.com/pypa/flit/pull/530
Bug: https://github.com/pypa/flit/pull/531
Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...e-3.7.0-fix-relative-imports-init-version.patch | 107 +++++++++++++++++++++
 ...core-3.7.0.ebuild => flit_core-3.7.0-r1.ebuild} |   4 +
 2 files changed, 111 insertions(+)

diff --git 
a/dev-python/flit_core/files/flit_core-3.7.0-fix-relative-imports-init-version.patch
 
b/dev-python/flit_core/files/flit_core-3.7.0-fix-relative-imports-init-version.patch
new file mode 100644
index 000000000000..858e66aee0b0
--- /dev/null
+++ 
b/dev-python/flit_core/files/flit_core-3.7.0-fix-relative-imports-init-version.patch
@@ -0,0 +1,107 @@
+https://github.com/pypa/flit/issues/530
+https://github.com/pypa/flit/pull/531
+
+From c7c79459b61fe11ff0179d0ca7a72e8a90c0ee7b Mon Sep 17 00:00:00 2001
+From: Thomas Kluyver <tho...@kluyver.me.uk>
+Date: Tue, 22 Feb 2022 16:21:11 +0000
+Subject: [PATCH 1/2] Add failing test for issue gh-530
+
+---
+ .../samples/imported_version/package1/__init__.py      |  3 +++
+ .../samples/imported_version/package1/_version.py      |  1 +
+ .../tests/samples/imported_version/pyproject.toml      | 10 ++++++++++
+ flit_core/flit_core/tests/test_common.py               |  5 +++++
+ 4 files changed, 19 insertions(+)
+ create mode 100644 
flit_core/flit_core/tests/samples/imported_version/package1/__init__.py
+ create mode 100644 
flit_core/flit_core/tests/samples/imported_version/package1/_version.py
+ create mode 100644 
flit_core/flit_core/tests/samples/imported_version/pyproject.toml
+
+diff --git a/flit_core/tests/samples/imported_version/package1/__init__.py 
b/flit_core/tests/samples/imported_version/package1/__init__.py
+new file mode 100644
+index 0000000..49adc42
+--- /dev/null
++++ b/flit_core/tests/samples/imported_version/package1/__init__.py
+@@ -0,0 +1,3 @@
++"""This module has a __version__ that requires a relative import"""
++
++from ._version import __version__
+diff --git a/flit_core/tests/samples/imported_version/package1/_version.py 
b/flit_core/tests/samples/imported_version/package1/_version.py
+new file mode 100644
+index 0000000..91201fc
+--- /dev/null
++++ b/flit_core/tests/samples/imported_version/package1/_version.py
+@@ -0,0 +1 @@
++__version__ = '0.5.8'
+diff --git a/flit_core/tests/samples/imported_version/pyproject.toml 
b/flit_core/tests/samples/imported_version/pyproject.toml
+new file mode 100644
+index 0000000..b6d44e1
+--- /dev/null
++++ b/flit_core/tests/samples/imported_version/pyproject.toml
+@@ -0,0 +1,10 @@
++[build-system]
++requires = ["flit_core >=3.2,<4"]
++build-backend = "flit_core.buildapi"
++
++[project]
++name = "package1"
++authors = [
++    {name = "Sir Röbin", email = "ro...@camelot.uk"}
++]
++dynamic = ["version", "description"]
+diff --git a/flit_core/tests/test_common.py b/flit_core/tests/test_common.py
+index 02cfab7..bd0995b 100644
+--- a/flit_core/tests/test_common.py
++++ b/flit_core/tests/test_common.py
+@@ -75,6 +75,11 @@ def test_get_info_from_module(self):
+                                 'version': '1.2.3'}
+                          )
+ 
++        info = get_info_from_module(Module('package1', samples_dir / 
'imported_version'))
++        self.assertEqual(info, {'summary': 'This module has a __version__ 
that requires a relative import',
++                                'version': '0.5.8'}
++                         )
++
+         with self.assertRaises(InvalidVersion):
+             get_info_from_module(Module('invalid_version1', samples_dir))
+ 
+
+From 8a0ce8897a743dde3b82cca02f1d82516ad393fd Mon Sep 17 00:00:00 2001
+From: Thomas Kluyver <tho...@kluyver.me.uk>
+Date: Tue, 22 Feb 2022 16:49:46 +0000
+Subject: [PATCH 2/2] Fix relative imports in __init__.py when exec-ing to get
+ __version__
+
+---
+ flit_core/flit_core/common.py | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/flit_core/common.py b/flit_core/common.py
+index 0d6716c..ce69c95 100644
+--- a/flit_core/common.py
++++ b/flit_core/common.py
+@@ -3,6 +3,7 @@
+ import hashlib
+ import logging
+ import os
++import sys
+ 
+ from pathlib import Path
+ import re
+@@ -168,7 +169,15 @@ def get_docstring_and_version_via_import(target):
+     spec = spec_from_file_location(mod_name, target.file)
+     with _module_load_ctx():
+         m = module_from_spec(spec)
+-        spec.loader.exec_module(m)
++        # Add the module to sys.modules to allow relative imports to work.
++        # importlib has more code around this to handle the case where two
++        # threads are trying to load the same module at the same time, but 
Flit
++        # should always be running a single thread, so we won't duplicate 
that.
++        sys.modules[mod_name] = m
++        try:
++            spec.loader.exec_module(m)
++        finally:
++            sys.modules.pop(mod_name, None)
+ 
+     docstring = m.__dict__.get('__doc__', None)
+     version = m.__dict__.get('__version__', None)
+

diff --git a/dev-python/flit_core/flit_core-3.7.0.ebuild 
b/dev-python/flit_core/flit_core-3.7.0-r1.ebuild
similarity index 93%
rename from dev-python/flit_core/flit_core-3.7.0.ebuild
rename to dev-python/flit_core/flit_core-3.7.0-r1.ebuild
index 5a8e37d303be..65fd6ed76f45 100644
--- a/dev-python/flit_core/flit_core-3.7.0.ebuild
+++ b/dev-python/flit_core/flit_core-3.7.0-r1.ebuild
@@ -25,6 +25,10 @@ BDEPEND="
        test? ( dev-python/testpath[${PYTHON_USEDEP}] )
 "
 
+PATCHES=(
+       "${FILESDIR}"/${P}-fix-relative-imports-init-version.patch
+)
+
 distutils_enable_tests pytest
 
 src_prepare() {

Reply via email to