Skip to content

Commit a807e97

Browse files
bbhtthfiguiere
authored andcommitted
pip: Ignore case and assume lowercase name when package is from pypi
pypi enforces case-insensitive naming https://peps.python.org/pep-0508/#names however we cannot say the same for vcs packages. Fixes #428
1 parent 38910e2 commit a807e97

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

pip/flatpak-pip-generator

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ with tempfile.TemporaryDirectory(prefix=tempdir_prefix) as tempdir:
328328
for filename in os.listdir(tempdir):
329329
name = get_package_name(filename)
330330
sha256 = get_file_hash(os.path.join(tempdir, filename))
331+
is_pypi = False
331332

332333
if name in vcs_packages:
333334
uri = vcs_packages[name]['uri']
@@ -344,6 +345,8 @@ with tempfile.TemporaryDirectory(prefix=tempdir_prefix) as tempdir:
344345
])
345346
is_vcs = True
346347
else:
348+
name = name.casefold()
349+
is_pypi = True
347350
url = get_pypi_url(name, filename)
348351
source = OrderedDict([
349352
('type', 'file'),
@@ -356,7 +359,7 @@ with tempfile.TemporaryDirectory(prefix=tempdir_prefix) as tempdir:
356359
if url.endswith(".whl"):
357360
source['x-checker-data']['packagetype'] = 'bdist_wheel'
358361
is_vcs = False
359-
sources[name] = {'source': source, 'vcs': is_vcs}
362+
sources[name] = {'source': source, 'vcs': is_vcs, 'pypi': is_pypi}
360363

361364
# Python3 packages that come as part of org.freedesktop.Sdk.
362365
system_packages = ['cython', 'easy_install', 'mako', 'markdown', 'meson', 'pip', 'pygments', 'setuptools', 'six', 'wheel']
@@ -415,10 +418,20 @@ for package in packages:
415418
package_sources = []
416419
for dependency in dependencies:
417420
casefolded = dependency.casefold()
418-
if casefolded in sources:
421+
if casefolded in sources and sources[casefolded].get("pypi") is True:
419422
source = sources[casefolded]
420-
elif casefolded.replace('_', '-') in sources:
421-
source = sources[casefolded.replace('_', '-')]
423+
elif dependency in sources and sources[dependency].get("pypi") is False:
424+
source = sources[dependency]
425+
elif (
426+
casefolded.replace("_", "-") in sources
427+
and sources[casefolded.replace("_", "-")].get("pypi") is True
428+
):
429+
source = sources[casefolded.replace("_", "-")]
430+
elif (
431+
dependency.replace("_", "-") in sources
432+
and sources[dependency.replace("_", "-")].get("pypi") is False
433+
):
434+
source = sources[dependency.replace("_", "-")]
422435
else:
423436
continue
424437

0 commit comments

Comments
 (0)