Skip to content

Commit 4face02

Browse files
committed
lint, add pep625 normalization example
1 parent 7981744 commit 4face02

File tree

2 files changed

+80
-4
lines changed

2 files changed

+80
-4
lines changed

conda_forge_tick/url_transforms.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
EXTS = [".tar.gz", ".zip", ".tar", ".tar.bz2", ".tar.xz", ".tgz"]
77
PYPI_URLS = ["https://pypi.io", "https://files.pythonhosted.org"]
88

9+
910
def _ext_munger(url):
1011
for old_ext, new_ext in permutations(EXTS, 2):
1112
if url.endswith(old_ext):
@@ -62,16 +63,25 @@ def _pypi_name_munger(url):
6263
is_pypi = any(url.startswith(pypi) for pypi in PYPI_URLS)
6364
has_version = re.search(r"\{\{\s*version", bn)
6465

65-
# try the original url first, as a fallback (probably can't be removed?)
66+
# try the original URL first, as a fallback (probably can't be removed?)
6667
yield url
6768

6869
if not (is_sdist and is_pypi and has_version):
6970
return
7071

7172
# try static PEP625 name with PEP345 distribution name (_ not -)
72-
yield os.path.join(dn, '%s-{{ version }}.tar.gz' % dist_bn.replace("-", "_"))
73-
# many legacy names had - which would match the name
74-
yield os.path.join(dn, '%s-{{ version }}.tar.gz' % dist_bn)
73+
patterns = [
74+
# fully normalized
75+
r"[\.\-]+",
76+
# older, partial normalization
77+
r"[\-]+",
78+
]
79+
80+
for pattern in patterns:
81+
for dist_bn_case in {dist_bn, dist_bn.lower()}:
82+
yield os.path.join(
83+
dn, "%s-{{ version }}.tar.gz" % re.sub(pattern, "_", dist_bn_case)
84+
)
7585

7686

7787
def _pypi_munger(url):

tests/test_url_transforms.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import os
22

3+
import pytest
4+
35
from conda_forge_tick.url_transforms import gen_transformed_urls
46

57

@@ -278,3 +280,67 @@ def test_url_transform_complicated_github():
278280
"https://github.com/releases/download/{{ version }}/{{ name }}/{{ name }}-{{ version }}.tar.bz2", # noqa
279281
"https://github.com/releases/download/{{ version }}/{{ name }}/{{ name }}-{{ version }}.tar.xz", # noqa
280282
}
283+
284+
285+
TRANFORM_URLS = {
286+
# a la https://github.com/conda-forge/packageurl-python-feedstock/pull/22
287+
"""
288+
https://pypi.io/packages/source/p/packageurl-python/packageurl-python-{{ version }}.tar.gz
289+
""".strip(): r"""
290+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl_python-{{ version }}.tar
291+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl_python-{{ version }}.tar.bz2
292+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl_python-{{ version }}.tar.gz
293+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl_python-{{ version }}.tar.xz
294+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl_python-{{ version }}.tgz
295+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl_python-{{ version }}.zip
296+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl_python-v{{ version }}.tar
297+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl_python-v{{ version }}.tar.bz2
298+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl_python-v{{ version }}.tar.gz
299+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl_python-v{{ version }}.tar.xz
300+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl_python-v{{ version }}.tgz
301+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl_python-v{{ version }}.zip
302+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl-python-{{ version }}.tar
303+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl-python-{{ version }}.tar.bz2
304+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl-python-{{ version }}.tar.gz
305+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl-python-{{ version }}.tar.xz
306+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl-python-{{ version }}.tgz
307+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl-python-{{ version }}.zip
308+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl-python-v{{ version }}.tar
309+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl-python-v{{ version }}.tar.bz2
310+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl-python-v{{ version }}.tar.gz
311+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl-python-v{{ version }}.tar.xz
312+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl-python-v{{ version }}.tgz
313+
https://files.pythonhosted.org/packages/source/p/packageurl-python/packageurl-python-v{{ version }}.zip
314+
https://pypi.io/packages/source/p/packageurl-python/packageurl_python-{{ version }}.tar
315+
https://pypi.io/packages/source/p/packageurl-python/packageurl_python-{{ version }}.tar.bz2
316+
https://pypi.io/packages/source/p/packageurl-python/packageurl_python-{{ version }}.tar.gz
317+
https://pypi.io/packages/source/p/packageurl-python/packageurl_python-{{ version }}.tar.xz
318+
https://pypi.io/packages/source/p/packageurl-python/packageurl_python-{{ version }}.tgz
319+
https://pypi.io/packages/source/p/packageurl-python/packageurl_python-{{ version }}.zip
320+
https://pypi.io/packages/source/p/packageurl-python/packageurl_python-v{{ version }}.tar
321+
https://pypi.io/packages/source/p/packageurl-python/packageurl_python-v{{ version }}.tar.bz2
322+
https://pypi.io/packages/source/p/packageurl-python/packageurl_python-v{{ version }}.tar.gz
323+
https://pypi.io/packages/source/p/packageurl-python/packageurl_python-v{{ version }}.tar.xz
324+
https://pypi.io/packages/source/p/packageurl-python/packageurl_python-v{{ version }}.tgz
325+
https://pypi.io/packages/source/p/packageurl-python/packageurl_python-v{{ version }}.zip
326+
https://pypi.io/packages/source/p/packageurl-python/packageurl-python-{{ version }}.tar
327+
https://pypi.io/packages/source/p/packageurl-python/packageurl-python-{{ version }}.tar.bz2
328+
https://pypi.io/packages/source/p/packageurl-python/packageurl-python-{{ version }}.tar.gz
329+
https://pypi.io/packages/source/p/packageurl-python/packageurl-python-{{ version }}.tar.xz
330+
https://pypi.io/packages/source/p/packageurl-python/packageurl-python-{{ version }}.tgz
331+
https://pypi.io/packages/source/p/packageurl-python/packageurl-python-{{ version }}.zip
332+
https://pypi.io/packages/source/p/packageurl-python/packageurl-python-v{{ version }}.tar
333+
https://pypi.io/packages/source/p/packageurl-python/packageurl-python-v{{ version }}.tar.bz2
334+
https://pypi.io/packages/source/p/packageurl-python/packageurl-python-v{{ version }}.tar.gz
335+
https://pypi.io/packages/source/p/packageurl-python/packageurl-python-v{{ version }}.tar.xz
336+
https://pypi.io/packages/source/p/packageurl-python/packageurl-python-v{{ version }}.tgz
337+
https://pypi.io/packages/source/p/packageurl-python/packageurl-python-v{{ version }}.zip
338+
"""
339+
}
340+
341+
342+
@pytest.mark.parametrize("url", TRANFORM_URLS)
343+
def test_url_transform(url):
344+
urls = {*gen_transformed_urls(url.strip())}
345+
expected = {line.strip() for line in TRANFORM_URLS[url].strip().splitlines()}
346+
assert urls == expected

0 commit comments

Comments
 (0)