diff options
author | Michał Górny <mgorny@gentoo.org> | 2023-01-31 20:27:56 +0100 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2023-02-05 06:10:28 +0100 |
commit | b73f8df2bf518d3811759c490e7b380312ffd0c3 (patch) | |
tree | 6d610449f6326a02eaf69a2d966c3d26076a7c59 /eclass/pypi.eclass | |
parent | app-metrics/bind_exporter: fix tests (diff) | |
download | gentoo-b73f8df2bf518d3811759c490e7b380312ffd0c3.tar.gz gentoo-b73f8df2bf518d3811759c490e7b380312ffd0c3.tar.bz2 gentoo-b73f8df2bf518d3811759c490e7b380312ffd0c3.zip |
pypi.eclass: A new eclass to aid creating PyPI SRC_URIs
Closes: https://github.com/gentoo/gentoo/pull/29361
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'eclass/pypi.eclass')
-rw-r--r-- | eclass/pypi.eclass | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/eclass/pypi.eclass b/eclass/pypi.eclass new file mode 100644 index 000000000000..12ce5d4ace15 --- /dev/null +++ b/eclass/pypi.eclass @@ -0,0 +1,117 @@ +# Copyright 2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: pypi.eclass +# @MAINTAINER: +# Michał Górny <mgorny@gentoo.org> +# @AUTHOR: +# Michał Górny <mgorny@gentoo.org> +# @SUPPORTED_EAPIS: 8 +# @BLURB: A helper eclass to generate PyPI source URIs +# @DESCRIPTION: +# The pypi.eclass can be used to easily obtain URLs for artifacts +# uploaded to PyPI.org. When inherited, the eclass defaults SRC_URI +# to fetch ${P}.tar.gz sdist. +# +# If necessary, SRC_URI can be overriden by the ebuild. Two helper +# functions, pypi_sdist_url and pypi_wheel_url are provided to generate +# URLs to artifacts of specified type, with customizable project name. +# Additionally, pypi_wheel_name can be used to generate wheel filename. +# +# @EXAMPLE: +# @CODE@ +# inherit pypi +# +# SRC_URI="$(pypi_sdist_url "${PN^}" "${PV}")" +# S=${WORKDIR}/${P^} +# @CODE@ + +case ${EAPI} in + 8) ;; + *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; +esac + +if [[ ! ${_PYPI_ECLASS} ]]; then +_PYPI_ECLASS=1 + +SRC_URI=" + https://files.pythonhosted.org/packages/source/${PN::1}/${PN}/${P}.tar.gz +" + +# @FUNCTION: pypi_sdist_url +# @USAGE: <project> [<version> [<suffix>]] +# @DESCRIPTION: +# Output the URL to PyPI sdist for specified project/version tuple. +# +# If <version> is unspecified, it defaults to ${PV}. +# +# If <format> is unspecified, it defaults to ".tar.gz". Another valid +# value is ".zip" (please remember to add a BDEPEND on app-arch/unzip). +pypi_sdist_url() { + if ! has "${#}" {1..3}; then + die "Usage: ${FUNCNAME} <project> [<version> [<suffix>]]" + fi + + local project=${1} + local version=${2-"${PV}"} + local suffix=${3-.tar.gz} + printf "https://files.pythonhosted.org/packages/source/%s" \ + "${project::1}/${project}/${project}-${version}${suffix}" +} + +# @FUNCTION: pypi_wheel_name +# @USAGE: <project> [<version> [<python-tag> [<abi-platform-tag>]]] +# @DESCRIPTION: +# Output the wheel filename for the specified project/version tuple. +# +# If <version> is unspecified, it defaults to ${PV}. +# +# If <python-tag> is unspecified, it defaults to "py3". It can also be +# "py2.py3", or a specific version in case of non-pure wheels. +# +# If <abi-platform-tag> is unspecified, it defaults to "none-any". +# You need to specify the correct value for non-pure wheels, +# e.g. "abi3-linux_x86_64". +pypi_wheel_name() { + if ! has "${#}" {1..4}; then + die "Usage: ${FUNCNAME} <project> [<version> [<python-tag> [<abi-platform-tag>]]]" + fi + + local project=${1} + local version=${2-"${PV}"} + local pytag=${3-py3} + local abitag=${4-none-any} + echo "${project}-${version}-${pytag}-${abitag}.whl" +} + +# @FUNCTION: pypi_wheel_url +# @USAGE: <project> [<version> [<python-tag> [<abi-platform-tag>]]] +# @DESCRIPTION: +# Output the URL to PyPI wheel for specified project/version tuple. +# +# If <version> is unspecified, it defaults to ${PV}. +# +# If <python-tag> is unspecified, it defaults to "py3". It can also be +# "py2.py3", or a specific version in case of non-pure wheels. +# +# If <abi-platform-tag> is unspecified, it defaults to "none-any". +# You need to specify the correct value for non-pure wheels, +# e.g. "abi3-linux_x86_64". +# +# Note that wheels are suffixed .whl by default and therefore are not +# unpacked automatically. If you need automatic unpacking, use "->" +# operator to rename it or call unzip directly. Remember to BDEPEND +# on app-arch/unzip. +pypi_wheel_url() { + if ! has "${#}" {1..4}; then + die "Usage: ${FUNCNAME} <project> [<version> [<python-tag> [<abi-platform-tag>]]]" + fi + + local project=${1} + local version=${2-"${PV}"} + local pytag=${3-py3} + printf "https://files.pythonhosted.org/packages/%s" \ + "${pytag}/${project::1}/${project}/$(pypi_wheel_name "${@}")" +} + +fi |