# Copyright 2023 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: pypi.eclass # @MAINTAINER: # Michał Górny # @AUTHOR: # Michał Górny # @SUPPORTED_EAPIS: 7 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 7|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: [ [ []]] # @DESCRIPTION: # Output the URL to PyPI sdist for specified project/version tuple. # # If is unspecified, it defaults to ${PN}. # # If is unspecified, it defaults to ${PV}. # # If 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 [[ ${#} -gt 3 ]]; then die "Usage: ${FUNCNAME} [ []]" fi local project=${1-"${PN}"} 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: [ [ [ []]]] # @DESCRIPTION: # Output the wheel filename for the specified project/version tuple. # # If is unspecified, it defaults to ${PN}. # # If is unspecified, it defaults to ${PV}. # # If is unspecified, it defaults to "py3". It can also be # "py2.py3", or a specific version in case of non-pure wheels. # # If 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 [[ ${#} -gt 4 ]]; then die "Usage: ${FUNCNAME} [ [ []]]" fi local project=${1-"${PN}"} local version=${2-"${PV}"} local pytag=${3-py3} local abitag=${4-none-any} echo "${project}-${version}-${pytag}-${abitag}.whl" } # @FUNCTION: pypi_wheel_url # @USAGE: [ [ [ []]]] # @DESCRIPTION: # Output the URL to PyPI wheel for specified project/version tuple. # # If is unspecified, it defaults to ${PN}. # # If is unspecified, it defaults to ${PV}. # # If is unspecified, it defaults to "py3". It can also be # "py2.py3", or a specific version in case of non-pure wheels. # # If 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 [[ ${#} -gt 4 ]]; then die "Usage: ${FUNCNAME} [ [ []]]" fi local project=${1-"${PN}"} local version=${2-"${PV}"} local pytag=${3-py3} printf "https://files.pythonhosted.org/packages/%s" \ "${pytag}/${project::1}/${project}/$(pypi_wheel_name "${@}")" } fi