From e658d61f13acaa193fd31d080740851e5f7b1592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20F=C3=B6rster?= Date: Sat, 22 Jun 2024 00:58:40 +0200 Subject: [PATCH] [dev-python/pymongocrypt] add --- dev-python/pymongocrypt/Manifest | 1 + .../files/pymongocrypt-1.9.2-hatch.patch | 59 +++++++ dev-python/pymongocrypt/metadata.xml | 28 +++ .../pymongocrypt/pymongocrypt-1.9.2.ebuild | 161 ++++++++++++++++++ 4 files changed, 249 insertions(+) create mode 100644 dev-python/pymongocrypt/Manifest create mode 100644 dev-python/pymongocrypt/files/pymongocrypt-1.9.2-hatch.patch create mode 100644 dev-python/pymongocrypt/metadata.xml create mode 100644 dev-python/pymongocrypt/pymongocrypt-1.9.2.ebuild diff --git a/dev-python/pymongocrypt/Manifest b/dev-python/pymongocrypt/Manifest new file mode 100644 index 0000000..64baa17 --- /dev/null +++ b/dev-python/pymongocrypt/Manifest @@ -0,0 +1 @@ +DIST pymongocrypt-1.9.2.tar.gz 49997 BLAKE2B f35ad1a0dddc3277c1b79c53f40466235f83cc1a2cea00198d1e705411ee640825c6600739c2950c99b8acb91fff07db5f8a94f3700c219d9262f5749bea5d6b SHA512 0ba48f58cce130e6da4cf7a39cce946f57b4130ca328672f04693a8ddf36bbeec5b6d4eec3bc1eb10c4a40c6d22dc6f944226532ae73583788f2fe0ffd46cd7d diff --git a/dev-python/pymongocrypt/files/pymongocrypt-1.9.2-hatch.patch b/dev-python/pymongocrypt/files/pymongocrypt-1.9.2-hatch.patch new file mode 100644 index 0000000..9ce650a --- /dev/null +++ b/dev-python/pymongocrypt/files/pymongocrypt-1.9.2-hatch.patch @@ -0,0 +1,59 @@ +adapted from upstream dadf22c1ce1501f8fef8d6f2adbf9f2eb9dd3eca + +--- a/pyproject.toml 2024-05-28 20:44:03.000000000 +0200 ++++ b/pyproject.toml 2024-06-18 17:12:03.000000000 +0200 +@@ -1,6 +1,6 @@ + [build-system] +-requires = ["setuptools>=63.0", "wheel"] +-build-backend = "setuptools.build_meta" ++requires = ["hatchling>1.24"] ++build-backend = "hatchling.build" + + [project] + name = "pymongocrypt" +@@ -49,11 +49,5 @@ + [project.urls] + Homepage = "https://github.com/mongodb/libmongocrypt/tree/master/bindings/python" + +-[tool.setuptools.dynamic] +-version = {attr = "pymongocrypt.version.__version__"} +- +-[tool.setuptools.packages.find] +-include = ["pymongocrypt"] +- +-[tool.setuptools.package-data] +-pymongocrypt=['*.dll', '*.so', '*.dylib'] ++[tool.hatch.version] ++path = "pymongocrypt/version.py" +--- a/setup.py 2024-05-28 20:44:03.000000000 +0200 ++++ b/dev/null 2024-04-07 00:22:51.151700697 +0200 +@@ -1,29 +0,0 @@ +-import sys +-from setuptools import setup +- +-# Make our Windows and macOS wheels platform specific because we embed +-# libmongocrypt. On Linux we ship manylinux2010 wheels which cannot do this or +-# else auditwheel raises the following error: +-# RuntimeError: Invalid binary wheel, found the following shared +-# library/libraries in purelib folder: +-# libmongocrypt.so +-# The wheel has to be platlib compliant in order to be repaired by auditwheel. +-cmdclass = {} +-if sys.platform in ('win32', 'darwin'): +- try: +- from wheel.bdist_wheel import bdist_wheel as _bdist_wheel +- class bdist_wheel(_bdist_wheel): +- def finalize_options(self): +- _bdist_wheel.finalize_options(self) +- self.root_is_pure = False +- def get_tag(self): +- python, abi, plat = _bdist_wheel.get_tag(self) +- # Our python source is py3 compatible. +- python, abi = 'py3', 'none' +- return python, abi, plat +- cmdclass['bdist_wheel'] = bdist_wheel +- except ImportError: +- # Version of wheel is too old, use None to fail a bdist_wheel attempt. +- cmdclass['bdist_wheel'] = None +- +-setup(cmdclass=cmdclass) diff --git a/dev-python/pymongocrypt/metadata.xml b/dev-python/pymongocrypt/metadata.xml new file mode 100644 index 0000000..dee6e50 --- /dev/null +++ b/dev-python/pymongocrypt/metadata.xml @@ -0,0 +1,28 @@ + + + + + ultrabug@gentoo.org + Alexys Jacob + + + python@gentoo.org + Python + + + PyMongo is a Python distribution containing tools for working + with MongoDB, and is the recommended way to work with MongoDB + from Python. + + + Compiles native C extensions + + Run test suite in full, including tests that run a local + database instance. + + + + pymongo + mongodb/mongo-python-driver + + diff --git a/dev-python/pymongocrypt/pymongocrypt-1.9.2.ebuild b/dev-python/pymongocrypt/pymongocrypt-1.9.2.ebuild new file mode 100644 index 0000000..03f9521 --- /dev/null +++ b/dev-python/pymongocrypt/pymongocrypt-1.9.2.ebuild @@ -0,0 +1,161 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +DISTUTILS_EXT=1 +DISTUTILS_USE_PEP517=hatchling +PYTHON_COMPAT=( pypy3 python3_{10..12} ) + +inherit distutils-r1 pypi + +DESCRIPTION="Python bindings for libmongocrypt" +HOMEPAGE=" + https://github.com/mongodb/libmongocrypt/ + https://pypi.org/project/pymongocrypt +" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86" + +RDEPEND=" + dev-libs/libmongocrypt + dev-python/cffi[${PYTHON_USEDEP}] + dev-python/cryptography[${PYTHON_USEDEP}] + dev-python/packaging[${PYTHON_USEDEP}] + dev-python/httpx[${PYTHON_USEDEP}] + +" +BDEPEND=" + test? ( + dev-python/cffi[${PYTHON_USEDEP}] + dev-python/pymongo[${PYTHON_USEDEP}] + dev-python/respx[${PYTHON_USEDEP}] + dev-python/unasync[${PYTHON_USEDEP}] + ) +" + +# adjust after 1.9.3 +PATCHES=( + "${FILESDIR}/${P}-hatch.patch" +) + +distutils_enable_tests pytest + +#reqcheck() { +# if use test && use test-full; then +# # During the tests, database size reaches 1.5G. +# local CHECKREQS_DISK_BUILD=1536M +# +# check-reqs_${1} +# fi +#} + +#pkg_pretend() { +# reqcheck pkg_pretend +#} + +#pkg_setup() { +# reqcheck pkg_setup +#} + +#python_compile() { +# # causes build errors to be fatal +# local -x TOX_ENV_NAME=whatever +# local DISTUTILS_ARGS=() +# # unconditionally implicitly disabled on pypy3 +# if ! use native-extensions; then +# DISTUTILS_ARGS+=( --no_ext ) +# else +# export PYMONGO_C_EXT_MUST_BUILD=1 +# fi + +# distutils-r1_python_compile +#} + +#python_test() { +# rm -rf bson pymongo || die + +# local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 +# local EPYTEST_DESELECT=( + # network-sandbox +# test/test_client.py::ClientUnitTest::test_connection_timeout_ms_propagates_to_DNS_resolver +# test/test_client.py::ClientUnitTest::test_detected_environment_logging +# test/test_client.py::ClientUnitTest::test_detected_environment_warning +# test/test_client.py::TestClient::test_service_name_from_kwargs +# test/test_client.py::TestClient::test_srv_max_hosts_kwarg +# test/test_dns.py::TestCaseInsensitive::test_connect_case_insensitive +# test/test_srv_polling.py +# test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_custom_srvServiceName +# test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_invalid_type_for_srvMaxHosts +# test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_negative_integer_for_srvMaxHosts +# test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_positive_srvMaxHosts_and_loadBalanced=fa +# test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts +# test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts=0_and_loadBalanced=true +# test/test_uri_spec.py::TestAllScenarios::test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts=0_and_replicaSet + + # broken regularly by changes in mypy +# test/test_typing.py::TestMypyFails::test_mypy_failures + + # fragile to timing? fails because we're getting too many logs +# test/test_connection_logging.py::TestConnectionLoggingConnectionPoolOptions::test_maxConnecting_should_be_included_in_connection_pool_created_message_when_specified +# ) + +# if ! use test-full; then + # .invalid is guaranteed to return NXDOMAIN per RFC 6761 +# local -x DB_IP=mongodb.invalid +# epytest +# return +# fi + + # Yes, we need TCP/IP for that... +# local -x DB_IP=127.0.0.1 +# local -x DB_PORT=27000 + +# local dbpath=${TMPDIR}/mongo.db +# local logpath=${TMPDIR}/mongod.log + + # Now, the hard part: we need to find a free port for mongod. + # We're just trying to run it random port numbers and check the log + # for bind errors. It shall be noted that 'mongod --fork' does not + # return failure when it fails to bind. + +# mkdir -p "${dbpath}" || die +# while true; do +# ebegin "Trying to start mongod on port ${DB_PORT}" + +# LC_ALL=C \ +# mongod --dbpath "${dbpath}" --nojournal \ +# --bind_ip ${DB_IP} --port ${DB_PORT} \ +# --unixSocketPrefix "${TMPDIR}" \ +# --logpath "${logpath}" --fork \ +# && sleep 2 + + # Now we need to check if the server actually started... +# if [[ ${?} -eq 0 && -S "${TMPDIR}"/mongodb-${DB_PORT}.sock ]]; then + # yay! +# eend 0 +# break +# elif grep -q 'Address already in use' "${logpath}"; then + # ay, someone took our port! +# eend 1 +# : $(( DB_PORT += 1 )) +# continue +# else +# eend 1 +# eerror "Unable to start mongod for tests. See the server log:" +# eerror " ${logpath}" +# die "Unable to start mongod for tests." +# fi +# done + +# local failed +# nonfatal epytest || failed=1 + +# mongod --dbpath "${dbpath}" --shutdown || die + +# [[ ${failed} ]] && die "Tests fail with ${EPYTHON}" + +# rm -rf "${dbpath}" || die +#}