git: 32a7597817b9 - main - misc/py-runloop-api-client: New port: Official Python library for the runloop API

From: Yuri Victorovich <yuri_at_FreeBSD.org>
Date: Mon, 08 Sep 2025 02:52:46 UTC
The branch main has been updated by yuri:

URL: https://cgit.FreeBSD.org/ports/commit/?id=32a7597817b9f4847328b9de943a64b103948a2f

commit 32a7597817b9f4847328b9de943a64b103948a2f
Author:     Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2025-09-08 02:51:41 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2025-09-08 02:52:43 +0000

    misc/py-runloop-api-client: New port: Official Python library for the runloop API
---
 misc/Makefile                                      |  1 +
 misc/py-runloop-api-client/Makefile                | 46 ++++++++++++++++++++++
 misc/py-runloop-api-client/distinfo                |  3 ++
 .../files/patch-pyproject.toml                     | 11 ++++++
 misc/py-runloop-api-client/pkg-descr               |  4 ++
 5 files changed, 65 insertions(+)

diff --git a/misc/Makefile b/misc/Makefile
index 96108cce56a9..7e38343bfda8 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -532,6 +532,7 @@
     SUBDIR += py-pytorch
     SUBDIR += py-pytorch-lightning
     SUBDIR += py-pyviz-comms
+    SUBDIR += py-runloop-api-client
     SUBDIR += py-safetensors
     SUBDIR += py-sagemaker
     SUBDIR += py-sagemaker-core
diff --git a/misc/py-runloop-api-client/Makefile b/misc/py-runloop-api-client/Makefile
new file mode 100644
index 000000000000..722ff60fd332
--- /dev/null
+++ b/misc/py-runloop-api-client/Makefile
@@ -0,0 +1,46 @@
+PORTNAME=	runloop-api-client
+#DISTVERSIONPREFIX=	v
+DISTVERSION=	0.58.0
+CATEGORIES=	misc python # machine-learning
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
+DISTNAME=	${PORTNAME:S/-/_/g}-${PORTVERSION}
+
+MAINTAINER=	yuri@FreeBSD.org
+COMMENT=	Official Python library for the runloop API
+WWW=		https://github.com/runloopai/api-client-python
+
+LICENSE=	MIT
+LICENSE_FILES=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}hatchling>=1.26.3:devel/py-hatchling@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}hatch-fancy-pypi-readme>0:devel/py-hatch-fancy-pypi-readme@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}anyio>=3.5.05:devel/py-anyio@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}distro>=1.7.0:sysutils/py-distro@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}httpx>=0.23.0:www/py-httpx@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}pydantic2>=1.9.0:devel/py-pydantic2@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}sniffio>=0:devel/py-sniffio@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}typing-extensions>=4.10:devel/py-typing-extensions@${PY_FLAVOR}
+TEST_DEPENDS=	${PYTHON_PKGNAMEPREFIX}dirty-equals>=0.6.0:devel/py-dirty-equals@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}importlib-metadata>=6.7.0:devel/py-importlib-metadata@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}mypy>0:devel/py-mypy@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}nest-asyncio>=1.6.0:devel/py-nest-asyncio@${PY_FLAVOR} \
+		nox>0:devel/nox@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}pyright>=1.1.399:devel/py-pyright@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}pytest-asyncio>0:devel/py-pytest-asyncio@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}pytest-xdist>=3.6.1:devel/py-pytest-xdist@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}respx>=0:www/py-respx@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}rich>=13.7.1:textproc/py-rich@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}ruff>0:devel/py-ruff@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}time-machine>0:devel/py-time-machine@${PY_FLAVOR}
+
+USES=		python
+USE_PYTHON=	pep517 autoplist pytest
+
+NO_ARCH=	yes
+
+TEST_ENV=	${MAKE_ENV} PYTHONPATH=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}
+
+# tests run forever
+
+.include <bsd.port.mk>
diff --git a/misc/py-runloop-api-client/distinfo b/misc/py-runloop-api-client/distinfo
new file mode 100644
index 000000000000..df63ce2979d4
--- /dev/null
+++ b/misc/py-runloop-api-client/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1757290176
+SHA256 (runloop_api_client-0.58.0.tar.gz) = 03448b6d0408d588d6e5ff7b2f49e197b58a7d4932f8ec7ae905f9e61cb3f495
+SIZE (runloop_api_client-0.58.0.tar.gz) = 333006
diff --git a/misc/py-runloop-api-client/files/patch-pyproject.toml b/misc/py-runloop-api-client/files/patch-pyproject.toml
new file mode 100644
index 000000000000..d2b3917363f3
--- /dev/null
+++ b/misc/py-runloop-api-client/files/patch-pyproject.toml
@@ -0,0 +1,11 @@
+--- pyproject.toml.orig	2025-09-08 00:09:49 UTC
++++ pyproject.toml
+@@ -91,7 +91,7 @@ typecheck = { chain = [
+ "typecheck:mypy" = "mypy ."
+ 
+ [build-system]
+-requires = ["hatchling==1.26.3", "hatch-fancy-pypi-readme"]
++requires = ["hatchling>=1.26.3", "hatch-fancy-pypi-readme"]
+ build-backend = "hatchling.build"
+ 
+ [dependency-groups]
diff --git a/misc/py-runloop-api-client/pkg-descr b/misc/py-runloop-api-client/pkg-descr
new file mode 100644
index 000000000000..39622f2c3472
--- /dev/null
+++ b/misc/py-runloop-api-client/pkg-descr
@@ -0,0 +1,4 @@
+The Runloop Python library provides convenient access to the Runloop REST API
+from any Python 3.8+ application. The library includes type definitions for
+all request params and response fields, and offers both synchronous and
+asynchronous clients powered by httpx.