diff options
Diffstat (limited to 'meta/classes-recipe/pypi.bbclass')
-rw-r--r-- | meta/classes-recipe/pypi.bbclass | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/meta/classes-recipe/pypi.bbclass b/meta/classes-recipe/pypi.bbclass index c6bbe8119a..eb30004a0f 100644 --- a/meta/classes-recipe/pypi.bbclass +++ b/meta/classes-recipe/pypi.bbclass | |||
@@ -28,16 +28,30 @@ def pypi_src_uri(d): | |||
28 | archive_downloadname = d.getVar('PYPI_ARCHIVE_NAME_PREFIX') + archive_name | 28 | archive_downloadname = d.getVar('PYPI_ARCHIVE_NAME_PREFIX') + archive_name |
29 | return 'https://files.pythonhosted.org/packages/source/%s/%s/%s;downloadfilename=%s' % (package[0], package, archive_name, archive_downloadname) | 29 | return 'https://files.pythonhosted.org/packages/source/%s/%s/%s;downloadfilename=%s' % (package[0], package, archive_name, archive_downloadname) |
30 | 30 | ||
31 | def pypi_normalize(d): | ||
32 | """" | ||
33 | Normalize the package names to match PEP625 (https://peps.python.org/pep-0625/). | ||
34 | For non-compliant packages, maintainers can set UPSTREAM_CHECK_PYPI_PACKAGE to override the normalization | ||
35 | """ | ||
36 | import re | ||
37 | return re.sub(r"[-_.]+", "-", d.getVar('PYPI_PACKAGE')).lower() | ||
38 | |||
31 | PYPI_SRC_URI ?= "${@pypi_src_uri(d)}" | 39 | PYPI_SRC_URI ?= "${@pypi_src_uri(d)}" |
32 | 40 | ||
33 | HOMEPAGE ?= "https://pypi.python.org/pypi/${PYPI_PACKAGE}/" | 41 | HOMEPAGE ?= "https://pypi.python.org/pypi/${PYPI_PACKAGE}/" |
34 | SECTION = "devel/python" | 42 | SECTION = "devel/python" |
35 | SRC_URI:prepend = "${PYPI_SRC_URI} " | 43 | SRC_URI:prepend = "${PYPI_SRC_URI} " |
36 | S = "${WORKDIR}/${PYPI_PACKAGE}-${PV}" | 44 | S = "${UNPACKDIR}/${PYPI_PACKAGE}-${PV}" |
37 | 45 | ||
38 | # Replace any '_' characters in the pypi URI with '-'s to follow the PyPi website naming conventions | 46 | # Replace any '_' characters in the pypi URI with '-'s to follow the PyPi website naming conventions |
39 | UPSTREAM_CHECK_PYPI_PACKAGE ?= "${@d.getVar('PYPI_PACKAGE').replace('_', '-')}" | 47 | UPSTREAM_CHECK_PYPI_PACKAGE ?= "${@pypi_normalize(d)}" |
40 | UPSTREAM_CHECK_URI ?= "https://pypi.org/project/${UPSTREAM_CHECK_PYPI_PACKAGE}/" | 48 | |
41 | UPSTREAM_CHECK_REGEX ?= "/${UPSTREAM_CHECK_PYPI_PACKAGE}/(?P<pver>(\d+[\.\-_]*)+)/" | 49 | # Use the simple repository API rather than the potentially unstable project URL |
50 | # More information on the pypi API specification is avaialble here: | ||
51 | # https://packaging.python.org/en/latest/specifications/simple-repository-api/ | ||
52 | # | ||
53 | # NOTE: All URLs for the simple API MUST request canonical normalized URLs per the spec | ||
54 | UPSTREAM_CHECK_URI ?= "https://pypi.org/simple/${@pypi_normalize(d)}" | ||
55 | UPSTREAM_CHECK_REGEX ?= "${UPSTREAM_CHECK_PYPI_PACKAGE}-(?P<pver>(\d+[\.\-_]*)+).(tar\.gz|tgz|zip|tar\.bz2)" | ||
42 | 56 | ||
43 | CVE_PRODUCT ?= "python:${PYPI_PACKAGE}" | 57 | CVE_PRODUCT ?= "python:${PYPI_PACKAGE}" |