Index | Thread | Search

From:
Stuart Henderson <stu@spacehopper.org>
Subject:
py-apscheduler update
To:
Sebastian Reitenbach <sebastia@openbsd.org>
Cc:
ports <ports@openbsd.org>
Date:
Thu, 15 Oct 2026 13:21:44 +0100

Download raw body.

Thread
  • Stuart Henderson:

    py-apscheduler update

this is another one of those ports where the distfile name for newer
versions got normalized by pypi, so portroach doesn't find it.

rather than add deps to fix tests for the additional job stores,
I just disabled those, they're pretty noisy.. I also added tests to
flask-apscheduler locally and they're still happy.

https://apscheduler.readthedocs.io/en/3.x/versionhistory.html

ok?

Index: Makefile
===================================================================
RCS file: /cvs/ports/sysutils/py-apscheduler/Makefile,v
diff -u -p -r1.6 Makefile
--- Makefile	16 Mar 2026 22:28:29 -0000	1.6
+++ Makefile	15 Oct 2026 12:18:43 -0000
@@ -1,11 +1,14 @@
 COMMENT =		schedule Python code
 
-MODPY_DISTV =	3.10.4
-DISTNAME =		APScheduler-${MODPY_DISTV}
-PKGNAME =		py-${DISTNAME:L}
+MODPY_DISTV =		3.11.3
+DISTNAME =		apscheduler-${MODPY_DISTV}
+PKGNAME =		py-${DISTNAME}
 CATEGORIES =		sysutils
 MAINTAINER =		Sebastian Reitenbach <sebastia@openbsd.org>
-REVISION =		3
+
+# https://github.com/agronholm/apscheduler
+# https://apscheduler.readthedocs.io/en/3.x/versionhistory.html
+HOMEPAGE =		https://apscheduler.readthedocs.io/en/3.x/
 
 # MIT
 PERMIT_PACKAGE =	Yes
@@ -14,19 +17,15 @@ MODULES =		lang/python
 MODPY_PI =		Yes
 MODPY_PYBUILD =		setuptools_scm
 
-RUN_DEPENDS +=		devel/py-six \
-			devel/py-tz \
-			devel/py-tzlocal
+RUN_DEPENDS +=		devel/py-tzlocal
 
-# besides skipped tests, tests pass with running redis and mongod
-# 2 errors io_loop caused by pytest-tornado missing in ports
-TEST_DEPENDS = 		databases/py-mongo \
-			databases/py-redis \
-			databases/py-sqlalchemy \
-			devel/py-gevent \
-			devel/py-test-asyncio \
-			devel/py-test-cov \
-			devel/py-twisted \
+TEST_DEPENDS =		net/py-anyio \
+			devel/py-test-timeout \
+			devel/py-tz \
 			www/py-tornado
+# some of the jobstore subtests pass if py-mongo, py-redis, py-sqlalchemy
+# are present, but there are various (quite noisy) failures from unported
+# modules: rethinkdb, etcd, zookeeper.
+MODPY_PYTEST_IGNORE =	tests/test_jobstores.py
 
 .include <bsd.port.mk>
Index: distinfo
===================================================================
RCS file: /cvs/ports/sysutils/py-apscheduler/distinfo,v
diff -u -p -r1.1.1.1 distinfo
--- distinfo	27 Oct 2023 18:47:00 -0000	1.1.1.1
+++ distinfo	15 Oct 2026 12:18:43 -0000
@@ -1,2 +1,2 @@
-SHA256 (APScheduler-3.10.4.tar.gz) = 5t8HGyfZvomOSGvHlAp75QtK8unafAjwdEqW1L1M70o=
-SIZE (APScheduler-3.10.4.tar.gz) = 100832
+SHA256 (apscheduler-3.11.3.tar.gz) = zS/MkzADmoGliTRyrUn6zyOm1WBMvh2RjINcbeeDTVo=
+SIZE (apscheduler-3.11.3.tar.gz) = 110312
Index: patches/patch-src_apscheduler_util_py
===================================================================
RCS file: patches/patch-src_apscheduler_util_py
diff -N patches/patch-src_apscheduler_util_py
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_apscheduler_util_py	15 Oct 2026 12:18:43 -0000
@@ -0,0 +1,21 @@
+From 00c880b81d1cf37ce1cc89c8f4b70143c3c8b758 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Alex=20Gr=C3=B6nholm?= <alex.gronholm@nextday.fi>
+Date: Sat, 26 Sep 2026 00:28:27 +0300
+Subject: [PATCH] Fixed compatibility with pytz 2026.4
+
+Index: src/apscheduler/util.py
+--- src/apscheduler/util.py.orig
++++ src/apscheduler/util.py
+@@ -115,7 +115,11 @@ def astimezone(obj):
+             if obj.zone:
+                 return ZoneInfo(obj.zone)
+ 
+-            return timezone(obj._offset)
++            try:
++                return timezone(obj._utcoffset)
++            except AttributeError:  # pragma: no cover
++                # pytz 2626.3 and earlier
++                return timezone(obj._offset)
+ 
+         return obj
+ 
Index: pkg/PLIST
===================================================================
RCS file: /cvs/ports/sysutils/py-apscheduler/pkg/PLIST,v
diff -u -p -r1.4 PLIST
--- pkg/PLIST	23 Oct 2025 13:20:21 -0000	1.4
+++ pkg/PLIST	15 Oct 2026 12:18:43 -0000
@@ -28,8 +28,6 @@ lib/python${MODPY_VERSION}/site-packages
 lib/python${MODPY_VERSION}/site-packages/apscheduler/executors/${MODPY_PYCACHE}asyncio.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/apscheduler/executors/${MODPY_PYCACHE}base.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
 lib/python${MODPY_VERSION}/site-packages/apscheduler/executors/${MODPY_PYCACHE}base.${MODPY_PYC_MAGIC_TAG}pyc
-lib/python${MODPY_VERSION}/site-packages/apscheduler/executors/${MODPY_PYCACHE}base_py3.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
-lib/python${MODPY_VERSION}/site-packages/apscheduler/executors/${MODPY_PYCACHE}base_py3.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/apscheduler/executors/${MODPY_PYCACHE}debug.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
 lib/python${MODPY_VERSION}/site-packages/apscheduler/executors/${MODPY_PYCACHE}debug.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/apscheduler/executors/${MODPY_PYCACHE}gevent.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
@@ -42,7 +40,6 @@ lib/python${MODPY_VERSION}/site-packages
 lib/python${MODPY_VERSION}/site-packages/apscheduler/executors/${MODPY_PYCACHE}twisted.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/apscheduler/executors/asyncio.py
 lib/python${MODPY_VERSION}/site-packages/apscheduler/executors/base.py
-lib/python${MODPY_VERSION}/site-packages/apscheduler/executors/base_py3.py
 lib/python${MODPY_VERSION}/site-packages/apscheduler/executors/debug.py
 lib/python${MODPY_VERSION}/site-packages/apscheduler/executors/gevent.py
 lib/python${MODPY_VERSION}/site-packages/apscheduler/executors/pool.py
@@ -56,6 +53,8 @@ lib/python${MODPY_VERSION}/site-packages
 lib/python${MODPY_VERSION}/site-packages/apscheduler/jobstores/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/apscheduler/jobstores/${MODPY_PYCACHE}base.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
 lib/python${MODPY_VERSION}/site-packages/apscheduler/jobstores/${MODPY_PYCACHE}base.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/apscheduler/jobstores/${MODPY_PYCACHE}etcd.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/apscheduler/jobstores/${MODPY_PYCACHE}etcd.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/apscheduler/jobstores/${MODPY_PYCACHE}memory.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
 lib/python${MODPY_VERSION}/site-packages/apscheduler/jobstores/${MODPY_PYCACHE}memory.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/apscheduler/jobstores/${MODPY_PYCACHE}mongodb.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
@@ -69,6 +68,7 @@ lib/python${MODPY_VERSION}/site-packages
 lib/python${MODPY_VERSION}/site-packages/apscheduler/jobstores/${MODPY_PYCACHE}zookeeper.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
 lib/python${MODPY_VERSION}/site-packages/apscheduler/jobstores/${MODPY_PYCACHE}zookeeper.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/apscheduler/jobstores/base.py
+lib/python${MODPY_VERSION}/site-packages/apscheduler/jobstores/etcd.py
 lib/python${MODPY_VERSION}/site-packages/apscheduler/jobstores/memory.py
 lib/python${MODPY_VERSION}/site-packages/apscheduler/jobstores/mongodb.py
 lib/python${MODPY_VERSION}/site-packages/apscheduler/jobstores/redis.py
@@ -111,6 +111,8 @@ lib/python${MODPY_VERSION}/site-packages
 lib/python${MODPY_VERSION}/site-packages/apscheduler/triggers/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/apscheduler/triggers/${MODPY_PYCACHE}base.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
 lib/python${MODPY_VERSION}/site-packages/apscheduler/triggers/${MODPY_PYCACHE}base.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/apscheduler/triggers/${MODPY_PYCACHE}calendarinterval.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/apscheduler/triggers/${MODPY_PYCACHE}calendarinterval.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/apscheduler/triggers/${MODPY_PYCACHE}combining.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
 lib/python${MODPY_VERSION}/site-packages/apscheduler/triggers/${MODPY_PYCACHE}combining.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/apscheduler/triggers/${MODPY_PYCACHE}date.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
@@ -118,6 +120,7 @@ lib/python${MODPY_VERSION}/site-packages
 lib/python${MODPY_VERSION}/site-packages/apscheduler/triggers/${MODPY_PYCACHE}interval.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
 lib/python${MODPY_VERSION}/site-packages/apscheduler/triggers/${MODPY_PYCACHE}interval.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/apscheduler/triggers/base.py
+lib/python${MODPY_VERSION}/site-packages/apscheduler/triggers/calendarinterval.py
 lib/python${MODPY_VERSION}/site-packages/apscheduler/triggers/combining.py
 lib/python${MODPY_VERSION}/site-packages/apscheduler/triggers/cron/
 lib/python${MODPY_VERSION}/site-packages/apscheduler/triggers/cron/__init__.py