summaryrefslogtreecommitdiff
path: root/dev-python/cloudflare/cloudflare-5.1.0.ebuild
diff options
context:
space:
mode:
Diffstat (limited to 'dev-python/cloudflare/cloudflare-5.1.0.ebuild')
-rw-r--r--dev-python/cloudflare/cloudflare-5.1.0.ebuild94
1 files changed, 94 insertions, 0 deletions
diff --git a/dev-python/cloudflare/cloudflare-5.1.0.ebuild b/dev-python/cloudflare/cloudflare-5.1.0.ebuild
new file mode 100644
index 000000000000..d691a5ced040
--- /dev/null
+++ b/dev-python/cloudflare/cloudflare-5.1.0.ebuild
@@ -0,0 +1,94 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..14} )
+DISTUTILS_USE_PEP517="hatchling"
+inherit distutils-r1 eapi9-ver
+DESCRIPTION="Python wrapper for the Cloudflare v4 API"
+HOMEPAGE="https://pypi.org/project/cloudflare/"
+if [ "${PV}" == 9999 ]; then
+ EGIT_REPO_URI="https://github.com/cloudflare/cloudflare-python"
+ inherit git-r3
+ RESTRICT="test"
+else
+ MYPV=$(ver_rs 3 -)
+ MYPV=${MYPV/beta/beta.}
+ MYPN="cloudflare-python"
+ SRC_URI="https://github.com/cloudflare/cloudflare-python/archive/refs/tags/v${MYPV}.tar.gz -> ${P}.gh.tar.gz
+ test? ( https://github.com/Phoenix591/${MYPN}/releases/download/${MYPV}/${MYPN}-${MYPV}-prism.tar.gz )"
+ #Prism archive generated by workflow
+ # https://github.com/Phoenix591/cloudflare-python/blob/master/.github/workflows/test-tar.yml
+ S="${WORKDIR}/${MYPN}-${MYPV}"
+ KEYWORDS=""
+fi
+LICENSE="MIT test? ( ISC Apache-2.0 MIT BSD CC0-1.0 0BSD )"
+# nodejs module and deps used to test
+SLOT="0"
+RDEPEND=" ${DEPEND}
+ >=dev-python/httpx-0.23.0[${PYTHON_USEDEP}]
+ >=dev-python/pydantic-2.9.2[${PYTHON_USEDEP}]
+ >=dev-python/typing-extensions-4.7.0[${PYTHON_USEDEP}]
+ >=dev-python/anyio-4.3.0[${PYTHON_USEDEP}]
+ >=dev-python/distro-1.7.0[${PYTHON_USEDEP}]
+ >=dev-python/sniffio-1.3.1[${PYTHON_USEDEP}]
+ "
+
+BDEPEND="test? (
+ >=dev-python/httpx-aiohttp-0.1.9[${PYTHON_USEDEP}]
+ >=net-libs/nodejs-18.20.1
+ dev-python/time-machine[${PYTHON_USEDEP}]
+ dev-python/dirty-equals[${PYTHON_USEDEP}]
+ ${RDEPEND}
+)"
+EPYTEST_PLUGINS=( pytest-xdist pytest-asyncio respx )
+distutils_enable_tests pytest
+RESTRICT+=" !test? ( test )"
+DOCS="docs/migration-guides/v5.0.0-migration-guide.md"
+
+src_unpack() {
+ unpack "${P}.gh.tar.gz"
+ use test && cd "${S}" && unpack "cloudflare-python-${MYPV}-prism.tar.gz"
+}
+
+python_test() {
+ # these 2 tests fail in our sandbox for some reason
+ local EPYTEST_DESELECT=(
+ tests/test_client.py::TestCloudflare::test_validate_headers
+ tests/test_client.py::TestAsyncCloudflare::test_validate_headers )
+ epytest
+}
+
+src_test() {
+ start_mock
+ distutils-r1_src_test
+ stop_mock
+}
+start_mock() {
+# Run prism mock api server, this is what needs nodejs
+ node --no-warnings node_modules/@stainless-api/prism-cli/dist/index.js mock \
+ "cloudflare-spec.yml" >prism.log || die "Failed starting prism" &
+ echo $! >"${T}/mock.pid" || die
+ # Wait for server to come online
+ echo -n "Waiting for mockserver"
+ while ! grep -q "✖ fatal\|Prism is listening" "prism.log" ; do
+ echo -n "." || die
+ sleep 0.5
+ done
+ if grep -q "✖ fatal" prism.log; then
+ die "Prism mock server failed"
+ fi
+}
+stop_mock() {
+ kill $(cat "${T}/mock.pid") || die
+}
+
+pkg_postinst() {
+ if ver_replacing -lt "5.0.0_beta1"; then
+ elog "Cloudflare 5 has several breaking changes"
+ elog "See /usr/share/doc/${P}/docs/v5-migration-guide.md"
+ elog "It also includes a new optional dependency on httpx-aiohttp"
+ elog "Check the README for details"
+ fi
+}