commit:     583f156d0d89e946104f8bc92921d0206ff7d89e
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Mar 21 16:37:28 2023 +0000
Commit:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
CommitDate: Fri Mar 24 13:56:06 2023 +0000
URL:        
https://gitweb.gentoo.org/proj/pkgcore/pkgcheck.git/commit/?id=583f156d

python: Include PYPI_PN opportunities in PythonInlinePyPIURI

Fixes #568

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
Closes: https://github.com/pkgcore/pkgcheck/pull/569
Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org>

 src/pkgcheck/checks/python.py                      |  13 +-
 .../PythonInlinePyPIURI/expected.json              |  42 +++---
 .../PythonInlinePyPIURI/fix.patch                  | 151 +++++++++++++--------
 .../python-inline-pypi-url/Manifest                |   2 +
 .../python-inline-pypi-url-2000.ebuild             |  15 ++
 testdata/repos/python/eclass/pypi.eclass           |  15 +-
 6 files changed, 153 insertions(+), 85 deletions(-)

diff --git a/src/pkgcheck/checks/python.py b/src/pkgcheck/checks/python.py
index 95295271..0cd5d229 100644
--- a/src/pkgcheck/checks/python.py
+++ b/src/pkgcheck/checks/python.py
@@ -708,6 +708,7 @@ class PythonInlinePyPIURI(results.VersionResult, 
results.Warning):
         replacement: typing.Optional[tuple[str, ...]] = None,
         normalize: typing.Optional[bool] = None,
         append: typing.Optional[bool] = None,
+        pypi_pn: typing.Optional[str] = None,
         **kwargs,
     ) -> None:
         super().__init__(**kwargs)
@@ -715,15 +716,17 @@ class PythonInlinePyPIURI(results.VersionResult, 
results.Warning):
         self.replacement = tuple(replacement) if replacement is not None else 
None
         self.normalize = normalize
         self.append = append
+        self.pypi_pn = pypi_pn
 
     @property
     def desc(self) -> str:
         if self.replacement is None:
             no_norm = "" if self.normalize else "set PYPI_NO_NORMALIZE=1, "
+            pypi_pn = "" if self.pypi_pn is None else f"set 
PYPI_PN={self.pypi_pn}, "
             final = "use SRC_URI+= for other URIs" if self.append else "remove 
SRC_URI"
             return (
                 "inline PyPI URI found matching pypi.eclass default, inherit 
the eclass, "
-                f"{no_norm}and {final} instead"
+                f"{no_norm}{pypi_pn}and {final} instead"
             )
         else:
             return (
@@ -823,9 +826,11 @@ class PythonFetchableCheck(Check):
                     if not normalize and filename_pn != pn:
                         # ignore malformed URLs
                         return
-                    if pn == pkg.package:
-                        yield PythonInlinePyPIURI(uri, normalize=normalize, 
append=append, pkg=pkg)
-                        return
+                    pn, _ = self.simplify_pn_pv(pn, None, pkg, True)
+                    yield PythonInlinePyPIURI(
+                        uri, normalize=normalize, append=append, pypi_pn=pn, 
pkg=pkg
+                    )
+                    return
 
         # otherwise, yield result for every URL, with suggested replacement
         for uri, dist_filename in pypi_uris:

diff --git 
a/testdata/data/repos/python/PythonFetchableCheck/PythonInlinePyPIURI/expected.json
 
b/testdata/data/repos/python/PythonFetchableCheck/PythonInlinePyPIURI/expected.json
index e8c01812..45757750 100644
--- 
a/testdata/data/repos/python/PythonFetchableCheck/PythonInlinePyPIURI/expected.json
+++ 
b/testdata/data/repos/python/PythonFetchableCheck/PythonInlinePyPIURI/expected.json
@@ -1,20 +1,22 @@
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "0", "url": 
"https://files.pythonhosted.org/packages/source/P/PythonInlinePyPIURL/PythonInlinePyPIURL-0.zip";,
 "replacement": ["pypi_sdist_url", "--no-normalize", "\"${PN}\"", "\"${PV}\"", 
".zip"], "normalize": null, "append": null}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "1_alpha1", "url": 
"https://files.pythonhosted.org/packages/source/P/PythonInlinePyPIURL/PythonInlinePyPIURL-1a1.tar.gz";,
 "replacement": null, "normalize": false, "append": false}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "1_alpha1-r1", "url": 
"https://files.pythonhosted.org/packages/source/P/PythonInlinePyPIURL/PythonInlinePyPIURL-1a1.tar.gz";,
 "replacement": null, "normalize": false, "append": true}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "2_p4", "url": 
"https://files.pythonhosted.org/packages/source/P/PythonInlinePyPIURL/pythoninlinepypiurl-2.post4.tar.gz";,
 "replacement": null, "normalize": true, "append": false}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "2_p4-r1", "url": 
"https://files.pythonhosted.org/packages/source/P/PythonInlinePyPIURL/pythoninlinepypiurl-2.post4.tar.gz";,
 "replacement": null, "normalize": true, "append": true}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "3", "url": 
"https://files.pythonhosted.org/packages/py3/p/pypi-url/pypi_url-3-py3-none-any.whl";,
 "replacement": ["pypi_wheel_url", "--unpack", "pypi-url"], "normalize": null, 
"append": null}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "3", "url": 
"https://files.pythonhosted.org/packages/source/p/pypi-url/pypi-url-3.zip";, 
"replacement": ["pypi_sdist_url", "--no-normalize", "pypi-url", "\"${PV}\"", 
".zip"], "normalize": null, "append": null}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "3-r1", "url": 
"https://files.pythonhosted.org/packages/py3/p/pypi-url/pypi_url-3-py3-none-any.whl";,
 "replacement": ["pypi_wheel_url", "pypi-url"], "normalize": null, "append": 
null}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "3-r1", "url": 
"https://files.pythonhosted.org/packages/source/p/pypi-url/pypi-url-3.tar.gz";, 
"replacement": ["pypi_sdist_url", "--no-normalize", "pypi-url"], "normalize": 
null, "append": null}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "4", "url": 
"https://files.pythonhosted.org/packages/cp310/P/PythonInlinePyPIURL/pythoninlinepypiurl-4-cp310-cp310-linux_x86_64.whl";,
 "replacement": ["pypi_wheel_url", "\"${PN}\"", "\"${PV}\"", "cp310", 
"cp310-linux_x86_64"], "normalize": null, "append": null}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "4", "url": 
"https://files.pythonhosted.org/packages/source/p/pypi-url/pypi_url-4.tar.gz";, 
"replacement": ["pypi_sdist_url", "pypi-url"], "normalize": null, "append": 
null}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "0", "url": 
"https://files.pythonhosted.org/packages/source/p/python.inline-pypi-url/python.inline-pypi-url-0.tar.gz";,
 "replacement": ["pypi_sdist_url", "--no-normalize", "\"${PN/-/.}\""], 
"normalize": null, "append": null}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "1", "url": 
"https://files.pythonhosted.org/packages/source/p/python.inline.pypi.url/python.inline.pypi.url-1.tar.gz";,
 "replacement": ["pypi_sdist_url", "--no-normalize", "\"${PN//-/.}\""], 
"normalize": null, "append": null}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "100", "url": 
"https://files.pythonhosted.org/packages/source/p/python_inline-pypi-url/python_inline-pypi-url-100.tar.gz";,
 "replacement": ["pypi_sdist_url", "--no-normalize", "\"${PN/-/_}\""], 
"normalize": null, "append": null}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "200", "url": 
"https://files.pythonhosted.org/packages/source/P/Python-inline-pypi-url/Python-inline-pypi-url-200.tar.gz";,
 "replacement": ["pypi_sdist_url", "--no-normalize", "\"${PN^}\""], 
"normalize": null, "append": null}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "1000", "url": 
"https://files.pythonhosted.org/packages/source/p/python.inline-pypi-url/python_inline_pypi_url-1000.tar.gz";,
 "replacement": ["pypi_sdist_url", "\"${PN/-/.}\""], "normalize": null, 
"append": null}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "1000-r1", "url": 
"https://files.pythonhosted.org/packages/source/p/python.inline.pypi.url/python_inline_pypi_url-1000.tar.gz";,
 "replacement": ["pypi_sdist_url", "\"${PN//-/.}\""], "normalize": null, 
"append": null}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "1000-r100", "url": 
"https://files.pythonhosted.org/packages/source/p/python_inline-pypi-url/python_inline_pypi_url-1000.tar.gz";,
 "replacement": ["pypi_sdist_url", "\"${PN/-/_}\""], "normalize": null, 
"append": null}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "1000-r101", "url": 
"https://files.pythonhosted.org/packages/source/p/python_inline_pypi_url/python_inline_pypi_url-1000.tar.gz";,
 "replacement": ["pypi_sdist_url", "\"${PN//-/_}\""], "normalize": null, 
"append": null}
-{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "1000-r200", "url": 
"https://files.pythonhosted.org/packages/source/P/Python-inline-pypi-url/python_inline_pypi_url-1000.tar.gz";,
 "replacement": ["pypi_sdist_url", "\"${PN^}\""], "normalize": null, "append": 
null}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "0", "url": 
"https://files.pythonhosted.org/packages/source/P/PythonInlinePyPIURL/PythonInlinePyPIURL-0.zip";,
 "replacement": ["pypi_sdist_url", "--no-normalize", "\"${PN}\"", "\"${PV}\"", 
".zip"], "normalize": null, "append": null, "pypi_pn": null}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "1_alpha1", "url": 
"https://files.pythonhosted.org/packages/source/P/PythonInlinePyPIURL/PythonInlinePyPIURL-1a1.tar.gz";,
 "replacement": null, "normalize": false, "append": false, "pypi_pn": null}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "1_alpha1-r1", "url": 
"https://files.pythonhosted.org/packages/source/P/PythonInlinePyPIURL/PythonInlinePyPIURL-1a1.tar.gz";,
 "replacement": null, "normalize": false, "append": true, "pypi_pn": null}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "2_p4", "url": 
"https://files.pythonhosted.org/packages/source/P/PythonInlinePyPIURL/pythoninlinepypiurl-2.post4.tar.gz";,
 "replacement": null, "normalize": true, "append": false, "pypi_pn": null}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "2_p4-r1", "url": 
"https://files.pythonhosted.org/packages/source/P/PythonInlinePyPIURL/pythoninlinepypiurl-2.post4.tar.gz";,
 "replacement": null, "normalize": true, "append": true, "pypi_pn": null}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "3", "url": 
"https://files.pythonhosted.org/packages/py3/p/pypi-url/pypi_url-3-py3-none-any.whl";,
 "replacement": ["pypi_wheel_url", "--unpack", "pypi-url"], "normalize": null, 
"append": null, "pypi_pn": null}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "3", "url": 
"https://files.pythonhosted.org/packages/source/p/pypi-url/pypi-url-3.zip";, 
"replacement": ["pypi_sdist_url", "--no-normalize", "pypi-url", "\"${PV}\"", 
".zip"], "normalize": null, "append": null, "pypi_pn": null}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "3-r1", "url": 
"https://files.pythonhosted.org/packages/py3/p/pypi-url/pypi_url-3-py3-none-any.whl";,
 "replacement": ["pypi_wheel_url", "pypi-url"], "normalize": null, "append": 
null, "pypi_pn": null}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "3-r1", "url": 
"https://files.pythonhosted.org/packages/source/p/pypi-url/pypi-url-3.tar.gz";, 
"replacement": ["pypi_sdist_url", "--no-normalize", "pypi-url"], "normalize": 
null, "append": null, "pypi_pn": null}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "4", "url": 
"https://files.pythonhosted.org/packages/cp310/P/PythonInlinePyPIURL/pythoninlinepypiurl-4-cp310-cp310-linux_x86_64.whl";,
 "replacement": ["pypi_wheel_url", "\"${PN}\"", "\"${PV}\"", "cp310", 
"cp310-linux_x86_64"], "normalize": null, "append": null, "pypi_pn": null}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "PythonInlinePyPIURL", "version": "4", "url": 
"https://files.pythonhosted.org/packages/source/p/pypi-url/pypi_url-4.tar.gz";, 
"replacement": ["pypi_sdist_url", "pypi-url"], "normalize": null, "append": 
null, "pypi_pn": null}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "0", "url": 
"https://files.pythonhosted.org/packages/source/p/python.inline-pypi-url/python.inline-pypi-url-0.tar.gz";,
 "replacement": null, "normalize": false, "append": false, "pypi_pn": 
"\"${PN/-/.}\""}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "1", "url": 
"https://files.pythonhosted.org/packages/source/p/python.inline.pypi.url/python.inline.pypi.url-1.tar.gz";,
 "replacement": null, "normalize": false, "append": false, "pypi_pn": 
"\"${PN//-/.}\""}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "100", "url": 
"https://files.pythonhosted.org/packages/source/p/python_inline-pypi-url/python_inline-pypi-url-100.tar.gz";,
 "replacement": null, "normalize": false, "append": false, "pypi_pn": 
"\"${PN/-/_}\""}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "200", "url": 
"https://files.pythonhosted.org/packages/source/P/Python-inline-pypi-url/Python-inline-pypi-url-200.tar.gz";,
 "replacement": null, "normalize": false, "append": false, "pypi_pn": 
"\"${PN^}\""}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "1000", "url": 
"https://files.pythonhosted.org/packages/source/p/python.inline-pypi-url/python_inline_pypi_url-1000.tar.gz";,
 "replacement": null, "normalize": true, "append": false, "pypi_pn": 
"\"${PN/-/.}\""}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "1000-r1", "url": 
"https://files.pythonhosted.org/packages/source/p/python.inline.pypi.url/python_inline_pypi_url-1000.tar.gz";,
 "replacement": null, "normalize": true, "append": false, "pypi_pn": 
"\"${PN//-/.}\""}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "1000-r100", "url": 
"https://files.pythonhosted.org/packages/source/p/python_inline-pypi-url/python_inline_pypi_url-1000.tar.gz";,
 "replacement": null, "normalize": true, "append": false, "pypi_pn": 
"\"${PN/-/_}\""}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "1000-r101", "url": 
"https://files.pythonhosted.org/packages/source/p/python_inline_pypi_url/python_inline_pypi_url-1000.tar.gz";,
 "replacement": null, "normalize": true, "append": false, "pypi_pn": 
"\"${PN//-/_}\""}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "1000-r200", "url": 
"https://files.pythonhosted.org/packages/source/P/Python-inline-pypi-url/python_inline_pypi_url-1000.tar.gz";,
 "replacement": null, "normalize": true, "append": false, "pypi_pn": 
"\"${PN^}\""}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "2000", "url": 
"https://files.pythonhosted.org/packages/source/p/python.inline-pypi-url/python_inline_pypi_url-2000.tar.gz";,
 "replacement": ["pypi_sdist_url", "\"${PN/-/.}\""], "normalize": null, 
"append": null, "pypi_pn": null}
+{"__class__": "PythonInlinePyPIURI", "category": "PythonFetchableCheck", 
"package": "python-inline-pypi-url", "version": "2000", "url": 
"https://files.pythonhosted.org/packages/source/p/python.inline-pypi-url_vectors/python.inline-pypi-url_vectors-151.tar.gz";,
 "replacement": ["pypi_sdist_url", "--no-normalize", 
"python.inline-pypi-url_vectors", "151"], "normalize": null, "append": null, 
"pypi_pn": null}

diff --git 
a/testdata/data/repos/python/PythonFetchableCheck/PythonInlinePyPIURI/fix.patch 
b/testdata/data/repos/python/PythonFetchableCheck/PythonInlinePyPIURI/fix.patch
index e30ff89e..28e27b9e 100644
--- 
a/testdata/data/repos/python/PythonFetchableCheck/PythonInlinePyPIURI/fix.patch
+++ 
b/testdata/data/repos/python/PythonFetchableCheck/PythonInlinePyPIURI/fix.patch
@@ -1,155 +1,194 @@
 diff -Naur 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-0.ebuild
 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-0.ebuild
---- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-0.ebuild
 2023-02-13 18:02:07.141313182 +0100
-+++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-0.ebuild
  2023-02-13 18:16:47.391898323 +0100
-@@ -3,9 +3,11 @@
+--- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-0.ebuild
 2023-03-02 17:59:30.071679391 +0100
++++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-0.ebuild
  2023-03-21 17:27:31.612748202 +0100
+@@ -3,10 +3,13 @@
  
  EAPI=8
  
++PYPI_NO_NORMALIZE=1
++PYPI_PN=${PN/-/.}
++
 +inherit pypi
 +
  DESCRIPTION="Ebuild with PyPI URL"
  HOMEPAGE="https://example.com";
 -SRC_URI="mirror://pypi/${PN::1}/${PN/-/.}/${P/-/.}.tar.gz"
-+SRC_URI="$(pypi_sdist_url --no-normalize "${PN/-/.}")"
- S=${WORKDIR}/${P/-/.}
+-S=${WORKDIR}/${P/-/.}
  
  LICENSE="BSD"
+ SLOT="0"
 diff -Naur 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000.ebuild
 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000.ebuild
---- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000.ebuild
      2023-02-13 18:02:37.101867819 +0100
-+++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000.ebuild
       2023-02-13 18:16:52.222022177 +0100
-@@ -3,10 +3,11 @@
+--- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000.ebuild
      2023-03-02 17:59:30.071679391 +0100
++++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000.ebuild
       2023-03-21 17:28:15.590371586 +0100
+@@ -3,10 +3,12 @@
  
  EAPI=8
  
++PYPI_PN=${PN/-/.}
++
 +inherit pypi
 +
  DESCRIPTION="Ebuild with PyPI URL"
  HOMEPAGE="https://example.com";
 -SRC_URI="mirror://pypi/${PN::1}/${PN/-/.}/${PN//-/_}-${PV}.tar.gz"
 -S=${WORKDIR}/${PN//-/_}-${PV}
-+SRC_URI="$(pypi_sdist_url "${PN/-/.}")"
  
  LICENSE="BSD"
  SLOT="0"
 diff -Naur 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r100.ebuild
 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r100.ebuild
---- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r100.ebuild
 2023-02-13 18:05:32.871560794 +0100
-+++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r100.ebuild
  2023-02-13 18:16:55.365435891 +0100
-@@ -3,10 +3,11 @@
+--- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r100.ebuild
 2023-03-02 17:59:30.071679391 +0100
++++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r100.ebuild
  2023-03-21 17:28:22.750527209 +0100
+@@ -3,10 +3,12 @@
  
  EAPI=8
  
++PYPI_PN=${PN/-/_}
++
 +inherit pypi
 +
  DESCRIPTION="Ebuild with PyPI URL"
  HOMEPAGE="https://example.com";
 -SRC_URI="mirror://pypi/${PN::1}/${PN/-/_}/${PN//-/_}-${PV}.tar.gz"
 -S=${WORKDIR}/${PN//-/_}-${PV}
-+SRC_URI="$(pypi_sdist_url "${PN/-/_}")"
  
  LICENSE="BSD"
  SLOT="0"
 diff -Naur 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r101.ebuild
 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r101.ebuild
---- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r101.ebuild
 2023-02-13 18:05:45.775104791 +0100
-+++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r101.ebuild
  2023-02-13 18:16:57.982169331 +0100
-@@ -3,10 +3,11 @@
+--- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r101.ebuild
 2023-03-02 17:59:30.071679391 +0100
++++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r101.ebuild
  2023-03-21 17:28:29.327336791 +0100
+@@ -3,10 +3,12 @@
  
  EAPI=8
  
++PYPI_PN=${PN//-/_}
++
 +inherit pypi
 +
  DESCRIPTION="Ebuild with PyPI URL"
  HOMEPAGE="https://example.com";
 -SRC_URI="mirror://pypi/${PN::1}/${PN//-/_}/${PN//-/_}-${PV}.tar.gz"
 -S=${WORKDIR}/${PN//-/_}-${PV}
-+SRC_URI="$(pypi_sdist_url "${PN//-/_}")"
  
  LICENSE="BSD"
  SLOT="0"
 diff -Naur 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r1.ebuild
 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r1.ebuild
---- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r1.ebuild
   2023-02-13 18:04:32.533891351 +0100
-+++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r1.ebuild
    2023-02-13 18:17:01.165583737 +0100
-@@ -3,10 +3,11 @@
+--- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r1.ebuild
   2023-03-02 17:59:30.071679391 +0100
++++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r1.ebuild
    2023-03-21 17:28:35.514137872 +0100
+@@ -3,10 +3,12 @@
  
  EAPI=8
  
++PYPI_PN=${PN//-/.}
++
 +inherit pypi
 +
  DESCRIPTION="Ebuild with PyPI URL"
  HOMEPAGE="https://example.com";
 -SRC_URI="mirror://pypi/${PN::1}/${PN//-/.}/${PN//-/_}-${PV}.tar.gz"
 -S=${WORKDIR}/${PN//-/_}-${PV}
-+SRC_URI="$(pypi_sdist_url "${PN//-/.}")"
  
  LICENSE="BSD"
  SLOT="0"
 diff -Naur 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r200.ebuild
 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r200.ebuild
---- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r200.ebuild
 2023-02-13 18:06:26.842434235 +0100
-+++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r200.ebuild
  2023-02-13 18:17:04.392332387 +0100
-@@ -3,10 +3,11 @@
+--- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r200.ebuild
 2023-03-02 17:59:30.071679391 +0100
++++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1000-r200.ebuild
  2023-03-21 17:28:42.704294057 +0100
+@@ -3,10 +3,12 @@
  
  EAPI=8
  
++PYPI_PN=${PN^}
++
 +inherit pypi
 +
  DESCRIPTION="Ebuild with PyPI URL"
  HOMEPAGE="https://example.com";
 -SRC_URI="mirror://pypi/P/${PN^}/${PN//-/_}-${PV}.tar.gz"
 -S=${WORKDIR}/${PN//-/_}-${PV}
-+SRC_URI="$(pypi_sdist_url "${PN^}")"
  
  LICENSE="BSD"
  SLOT="0"
 diff -Naur 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-100.ebuild
 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-100.ebuild
---- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-100.ebuild
       2023-02-13 18:10:56.409921917 +0100
-+++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-100.ebuild
        2023-02-13 18:17:19.662717926 +0100
-@@ -3,9 +3,11 @@
+--- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-100.ebuild
       2023-03-02 17:59:30.071679391 +0100
++++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-100.ebuild
        2023-03-21 17:28:57.301277709 +0100
+@@ -3,10 +3,12 @@
  
  EAPI=8
  
++PYPI_PN=${PN/-/_}
++
 +inherit pypi
 +
  DESCRIPTION="Ebuild with PyPI URL"
  HOMEPAGE="https://example.com";
 -SRC_URI="mirror://pypi/${PN::1}/${PN/-/_}/${P/-/_}.tar.gz"
-+SRC_URI="$(pypi_sdist_url --no-normalize "${PN/-/_}")"
- S=${WORKDIR}/${P/-/_}
+-S=${WORKDIR}/${P/-/_}
  
  LICENSE="BSD"
+ SLOT="0"
 diff -Naur 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1.ebuild
 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1.ebuild
---- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1.ebuild
 2023-02-13 18:10:03.499125550 +0100
-+++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1.ebuild
  2023-02-13 18:17:19.666051344 +0100
-@@ -3,9 +3,11 @@
+--- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1.ebuild
 2023-03-02 17:59:30.071679391 +0100
++++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-1.ebuild
  2023-03-21 17:27:53.069881865 +0100
+@@ -3,10 +3,13 @@
  
  EAPI=8
  
++PYPI_NO_NORMALIZE=1
++PYPI_PN=${PN//-/.}
++
 +inherit pypi
 +
  DESCRIPTION="Ebuild with PyPI URL"
  HOMEPAGE="https://example.com";
 -SRC_URI="mirror://pypi/${PN::1}/${PN//-/.}/${PN//-/.}-${PV}.tar.gz"
-+SRC_URI="$(pypi_sdist_url --no-normalize "${PN//-/.}")"
- S=${WORKDIR}/${PN//-/.}-${PV}
+-S=${WORKDIR}/${PN//-/.}-${PV}
+ 
+ LICENSE="BSD"
+ SLOT="0"
+diff -Naur 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-2000.ebuild
 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-2000.ebuild
+--- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-2000.ebuild
      2023-03-21 17:20:27.603389499 +0100
++++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-2000.ebuild
       2023-03-21 17:30:27.623252678 +0100
+@@ -3,13 +3,15 @@
+ 
+ EAPI=8
+ 
++PYPI_PN=${PN/-/.}
++
++inherit pypi
++
+ DESCRIPTION="Ebuild with two PyPI URLs"
+ HOMEPAGE="https://example.com";
+-SRC_URI="
+-      mirror://pypi/${PN::1}/${PN/-/.}/${PN//-/_}-${PV}.tar.gz
+-      mirror://pypi/${PN::1}/${PN/-/.}_vectors/${PN/-/.}_vectors-151.tar.gz
++SRC_URI+="
++      $(pypi_sdist_url --no-normalize python.inline-pypi-url_vectors 151)
+ "
+-S=${WORKDIR}/${PN//-/_}-${PV}
  
  LICENSE="BSD"
+ SLOT="0"
 diff -Naur 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-200.ebuild
 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-200.ebuild
---- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-200.ebuild
       2023-02-13 18:12:05.330950479 +0100
-+++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-200.ebuild
        2023-02-13 18:17:19.666051344 +0100
-@@ -3,9 +3,11 @@
+--- 
python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-200.ebuild
       2023-03-02 17:59:30.071679391 +0100
++++ 
fixed/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-200.ebuild
        2023-03-21 17:28:06.286835989 +0100
+@@ -3,10 +3,13 @@
  
  EAPI=8
  
++PYPI_NO_NORMALIZE=1
++PYPI_PN=${PN^}
++
 +inherit pypi
 +
  DESCRIPTION="Ebuild with PyPI URL"
  HOMEPAGE="https://example.com";
 -SRC_URI="mirror://pypi/P/${PN^}/${P^}.tar.gz"
-+SRC_URI="$(pypi_sdist_url --no-normalize "${PN^}")"
- S=${WORKDIR}/${P^}
+-S=${WORKDIR}/${P^}
  
  LICENSE="BSD"
+ SLOT="0"
 diff -Naur 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-0.ebuild 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-0.ebuild
---- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-0.ebuild    
   2023-02-13 13:53:39.474144315 +0100
-+++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-0.ebuild     
   2023-02-13 18:13:52.757100032 +0100
+--- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-0.ebuild    
   2023-03-02 17:59:30.068345977 +0100
++++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-0.ebuild     
   2023-03-21 17:26:48.258469809 +0100
 @@ -3,9 +3,11 @@
  
  EAPI=8
@@ -164,8 +203,8 @@ diff -Naur 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-0
  LICENSE="BSD"
  SLOT="0"
 diff -Naur 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-1_alpha1.ebuild
 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-1_alpha1.ebuild
---- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-1_alpha1.ebuild
        2023-02-13 13:45:21.784711215 +0100
-+++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-1_alpha1.ebuild
 2023-02-13 18:13:52.757100032 +0100
+--- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-1_alpha1.ebuild
        2023-03-02 17:59:30.068345977 +0100
++++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-1_alpha1.ebuild
 2023-03-21 17:26:48.258469809 +0100
 @@ -3,11 +3,11 @@
  
  EAPI=8
@@ -182,8 +221,8 @@ diff -Naur 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-1
  LICENSE="BSD"
  SLOT="0"
 diff -Naur 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-1_alpha1-r1.ebuild
 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-1_alpha1-r1.ebuild
---- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-1_alpha1-r1.ebuild
     2023-02-13 13:45:46.604987058 +0100
-+++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-1_alpha1-r1.ebuild
      2023-02-13 18:13:52.757100032 +0100
+--- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-1_alpha1-r1.ebuild
     2023-03-02 17:59:30.068345977 +0100
++++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-1_alpha1-r1.ebuild
      2023-03-21 17:26:48.258469809 +0100
 @@ -3,14 +3,14 @@
  
  EAPI=8
@@ -204,8 +243,8 @@ diff -Naur 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-1
  LICENSE="BSD"
  SLOT="0"
 diff -Naur 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-2_p4.ebuild 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-2_p4.ebuild
---- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-2_p4.ebuild 
   2023-02-13 13:46:34.949608190 +0100
-+++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-2_p4.ebuild  
   2023-02-13 18:13:52.757100032 +0100
+--- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-2_p4.ebuild 
   2023-03-02 17:59:30.068345977 +0100
++++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-2_p4.ebuild  
   2023-03-21 17:26:48.258469809 +0100
 @@ -3,11 +3,10 @@
  
  EAPI=8
@@ -221,8 +260,8 @@ diff -Naur 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-2
  LICENSE="BSD"
  SLOT="0"
 diff -Naur 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-2_p4-r1.ebuild
 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-2_p4-r1.ebuild
---- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-2_p4-r1.ebuild
 2023-02-13 13:46:34.949608190 +0100
-+++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-2_p4-r1.ebuild
  2023-02-13 18:13:52.757100032 +0100
+--- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-2_p4-r1.ebuild
 2023-03-02 17:59:30.068345977 +0100
++++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-2_p4-r1.ebuild
  2023-03-21 17:26:48.258469809 +0100
 @@ -3,14 +3,13 @@
  
  EAPI=8
@@ -242,8 +281,8 @@ diff -Naur 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-2
  LICENSE="BSD"
  SLOT="0"
 diff -Naur 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-3.ebuild 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-3.ebuild
---- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-3.ebuild    
   2023-02-13 15:30:06.802489789 +0100
-+++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-3.ebuild     
   2023-02-13 18:13:52.757100032 +0100
+--- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-3.ebuild    
   2023-03-02 17:59:30.071679391 +0100
++++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-3.ebuild     
   2023-03-21 17:26:48.258469809 +0100
 @@ -3,13 +3,14 @@
  
  EAPI=8
@@ -263,8 +302,8 @@ diff -Naur 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-3
  S=${WORKDIR}/${MY_P}
  
 diff -Naur 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-3-r1.ebuild 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-3-r1.ebuild
---- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-3-r1.ebuild 
   2023-02-13 15:24:31.819467907 +0100
-+++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-3-r1.ebuild  
   2023-02-13 18:13:52.757100032 +0100
+--- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-3-r1.ebuild 
   2023-03-02 17:59:30.071679391 +0100
++++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-3-r1.ebuild  
   2023-03-21 17:26:48.258469809 +0100
 @@ -3,12 +3,14 @@
  
  EAPI=8
@@ -283,8 +322,8 @@ diff -Naur 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-3
  S=${WORKDIR}/${MY_P}
  
 diff -Naur 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-4.ebuild 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-4.ebuild
---- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-4.ebuild    
   2023-02-13 15:30:54.598707954 +0100
-+++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-4.ebuild     
   2023-02-13 18:13:52.757100032 +0100
+--- 
python/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-4.ebuild    
   2023-03-02 17:59:30.071679391 +0100
++++ 
fixed/PythonFetchableCheck/PythonInlinePyPIURL/PythonInlinePyPIURL-4.ebuild     
   2023-03-21 17:26:48.258469809 +0100
 @@ -3,12 +3,14 @@
  
  EAPI=8

diff --git 
a/testdata/repos/python/PythonFetchableCheck/python-inline-pypi-url/Manifest 
b/testdata/repos/python/PythonFetchableCheck/python-inline-pypi-url/Manifest
index d541566b..b9341b16 100644
--- a/testdata/repos/python/PythonFetchableCheck/python-inline-pypi-url/Manifest
+++ b/testdata/repos/python/PythonFetchableCheck/python-inline-pypi-url/Manifest
@@ -3,3 +3,5 @@ DIST python.inline.pypi.url-1.tar.gz 153310 BLAKE2B 
b7484cd9bebe912f9c8877c0f09d
 DIST python_inline-pypi-url-100.tar.gz 153310 BLAKE2B 
b7484cd9bebe912f9c8877c0f09df059130c2dc5c4da8c926f8df7945bcb7b255cdf810ce8cd16a987fb5bca3d1e71c088cd894968641db5dfae1c4c059df836
 SHA512 
86ff9e1c4b9353b1fbb475c7bb9d2a97bd9db8421ea5190b5a84832930b34cb5b79f8c3da68a5eb8db334f06851ec129cc6611a371e47b7c5de7a615feec5e05
 DIST Python-inline-pypi-url-200.tar.gz 153310 BLAKE2B 
b7484cd9bebe912f9c8877c0f09df059130c2dc5c4da8c926f8df7945bcb7b255cdf810ce8cd16a987fb5bca3d1e71c088cd894968641db5dfae1c4c059df836
 SHA512 
86ff9e1c4b9353b1fbb475c7bb9d2a97bd9db8421ea5190b5a84832930b34cb5b79f8c3da68a5eb8db334f06851ec129cc6611a371e47b7c5de7a615feec5e05
 DIST python_inline_pypi_url-1000.tar.gz 153310 BLAKE2B 
b7484cd9bebe912f9c8877c0f09df059130c2dc5c4da8c926f8df7945bcb7b255cdf810ce8cd16a987fb5bca3d1e71c088cd894968641db5dfae1c4c059df836
 SHA512 
86ff9e1c4b9353b1fbb475c7bb9d2a97bd9db8421ea5190b5a84832930b34cb5b79f8c3da68a5eb8db334f06851ec129cc6611a371e47b7c5de7a615feec5e05
+DIST python_inline_pypi_url-2000.tar.gz 153310 BLAKE2B 
b7484cd9bebe912f9c8877c0f09df059130c2dc5c4da8c926f8df7945bcb7b255cdf810ce8cd16a987fb5bca3d1e71c088cd894968641db5dfae1c4c059df836
 SHA512 
86ff9e1c4b9353b1fbb475c7bb9d2a97bd9db8421ea5190b5a84832930b34cb5b79f8c3da68a5eb8db334f06851ec129cc6611a371e47b7c5de7a615feec5e05
+DIST python.inline-pypi-url_vectors-151.tar.gz 153310 BLAKE2B 
b7484cd9bebe912f9c8877c0f09df059130c2dc5c4da8c926f8df7945bcb7b255cdf810ce8cd16a987fb5bca3d1e71c088cd894968641db5dfae1c4c059df836
 SHA512 
86ff9e1c4b9353b1fbb475c7bb9d2a97bd9db8421ea5190b5a84832930b34cb5b79f8c3da68a5eb8db334f06851ec129cc6611a371e47b7c5de7a615feec5e05

diff --git 
a/testdata/repos/python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-2000.ebuild
 
b/testdata/repos/python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-2000.ebuild
new file mode 100644
index 00000000..2598d665
--- /dev/null
+++ 
b/testdata/repos/python/PythonFetchableCheck/python-inline-pypi-url/python-inline-pypi-url-2000.ebuild
@@ -0,0 +1,15 @@
+# Copyright 2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Ebuild with two PyPI URLs"
+HOMEPAGE="https://example.com";
+SRC_URI="
+       mirror://pypi/${PN::1}/${PN/-/.}/${PN//-/_}-${PV}.tar.gz
+       mirror://pypi/${PN::1}/${PN/-/.}_vectors/${PN/-/.}_vectors-151.tar.gz
+"
+S=${WORKDIR}/${PN//-/_}-${PV}
+
+LICENSE="BSD"
+SLOT="0"

diff --git a/testdata/repos/python/eclass/pypi.eclass 
b/testdata/repos/python/eclass/pypi.eclass
index af21dc7f..8485bf6e 100644
--- a/testdata/repos/python/eclass/pypi.eclass
+++ b/testdata/repos/python/eclass/pypi.eclass
@@ -13,6 +13,11 @@
 # @DEFAULT_UNSET
 # @DESCRIPTION:
 
+# @ECLASS_VARIABLE: PYPI_PN
+# @PRE_INHERIT
+# @DESCRIPTION:
+: ${PYPI_PN:=${PN}}
+
 # @FUNCTION: pypi_normalize_name
 # @USAGE: <name>
 # @DESCRIPTION:
@@ -56,7 +61,7 @@ pypi_sdist_url() {
                shift
        fi
 
-       local project=${1-"${PN}"}
+       local project=${1-"${PYPI_PN}"}
        local version=${2-"$(pypi_translate_version "${PV}")"}
        local suffix=${3-.tar.gz}
        local fn_project=${project}
@@ -69,7 +74,7 @@ pypi_sdist_url() {
 # @USAGE: [<project> [<version> [<python-tag> [<abi-platform-tag>]]]]
 # @DESCRIPTION:
 pypi_wheel_name() {
-       local project=$(pypi_normalize_name "${1-"${PN}"}")
+       local project=$(pypi_normalize_name "${1-"${PYPI_PN}"}")
        local version=${2-"$(pypi_translate_version "${PV}")"}
        local pytag=${3-py3}
        local abitag=${4-none-any}
@@ -87,7 +92,7 @@ pypi_wheel_url() {
        fi
 
        local filename=$(pypi_wheel_name "${@}")
-       local project=${1-"${PN}"}
+       local project=${1-"${PYPI_PN}"}
        local version=${2-"$(pypi_translate_version "${PV}")"}
        local pytag=${3-py3}
        printf "https://files.pythonhosted.org/packages/%s"; \
@@ -100,8 +105,8 @@ pypi_wheel_url() {
 
 if [[ ${PYPI_NO_NORMALIZE} ]]; then
        SRC_URI="$(pypi_sdist_url --no-normalize)"
-       S="${WORKDIR}/${PN}-$(pypi_translate_version "${PV}")"
+       S="${WORKDIR}/${PYPI_PN}-$(pypi_translate_version "${PV}")"
 else
        SRC_URI="$(pypi_sdist_url)"
-       S="${WORKDIR}/$(pypi_normalize_name "${PN}")-$(pypi_translate_version 
"${PV}")"
+       S="${WORKDIR}/$(pypi_normalize_name 
"${PYPI_PN}")-$(pypi_translate_version "${PV}")"
 fi


Reply via email to