From: Stuart Henderson Subject: py-apscheduler update To: Sebastian Reitenbach Cc: ports Date: Thu, 15 Oct 2026 13:21:44 +0100 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 -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 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?= +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