Skip to main content

taskferry-scheduler

Portable "when to fire" triggering. Ships alongside Taskferry, the portable execution layer. Plain Python, no Django required.

A Schedule decides when; it never runs business logic itself. It triggers another capability — a Task, a Job, or an Event — by composition.

pip install taskferry-scheduler            # in-process scheduler
pip install taskferry-scheduler[gcp]       # + Google Cloud Scheduler

Usage

from taskferry_scheduler import Schedule, CronTrigger, HttpTarget, schedulers

schedulers.configure(
    {
        "default": {
            "factory": "taskferry_scheduler.adapters.gcp:make_cloud_scheduler",
            "project": "my-proj",
            "location": "us-central1",
        },
    }
)

schedulers["default"].create(
    Schedule(
        name="nightly-report",
        trigger=CronTrigger("0 2 * * *", timezone="Europe/Madrid"),
        # Fire a Task by hitting your Django task webhook (composition):
        target=HttpTarget("https://my-service.run.app/_taskferry/execute"),
    )
)

Local development / testing (in-process, deterministic):

from taskferry_scheduler import LocalScheduler, Schedule, IntervalTrigger, CallableTarget
from datetime import datetime, timedelta, UTC

s = LocalScheduler()
s.create(Schedule("beat", IntervalTrigger(seconds=60), CallableTarget(lambda: print("tick"))))
s.run_pending(datetime.now(UTC) + timedelta(minutes=2))  # deterministic firing
# or s.start()  # background thread for real-time firing

Triggers, targets, capabilities

  • Triggers: CronTrigger, IntervalTrigger, OneShotTrigger.
  • Targets: HttpTarget (fire a Task/service), PubSubTarget (fire an Event), CallableTarget (in-process, local only).

Schedulers differ, and the capability set says so honestly:

Adapter Provider Capabilities
LocalScheduler local one_shot, interval, pause, resume, update, delete
CloudSchedulerScheduler gcp cron, timezone, pause, resume, update, delete
EventBridgeScheduler aws cron, interval, one_shot, timezone, pause, resume, update, delete
KubernetesCronJobScheduler kubernetes cron, timezone, pause, resume, update, delete

LocalScheduler rejects a CronTrigger and Cloud Scheduler / CronJob reject an IntervalTrigger with UnsupportedCapabilityError — no silent misbehavior.

Roadmap: Azure scheduling (no single equivalent — Logic Apps / Functions timer).

Composition, not orchestration

A schedule fires one capability. Taskferry does not provide DAG workflows or state machines — that is out of scope (see the family composition docs).

License

Apache-2.0.

Release files for taskferry-scheduler 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for taskferry-scheduler 0.2.0
File Size Uploaded
taskferry_scheduler-0.2.0.tar.gz 16.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for taskferry-scheduler 0.2.0
File Interpreter ABI Platform
taskferry_scheduler-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 40.0 kB

Release files / taskferry_scheduler-0.2.0.tar.gz

Download URL taskferry_scheduler-0.2.0.tar.gz
Size 16.6 kB
Tags Source
SHA-256 checksum
How to use checksums
0d79d00ca89676b957f94f598ac5daa25c855a6082a944afbac1b06fd1877976
BLAKE2b-256 checksum
How to use checksums
cc8c7f5e876f8195b611754ec59b6c2789e3af3641b157edd01991d0654863f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.

Transparency log

Release files / taskferry_scheduler-0.2.0-py3-none-any.whl

Download URL taskferry_scheduler-0.2.0-py3-none-any.whl
Size 23.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6942470f97024921a6a0ab3d578e66e2b1691ab6fcc02df4db8983cf71a3a718
BLAKE2b-256 checksum
How to use checksums
3277f08a695637b54ed47a3d5c3edd531200ecc317c07d63748be75177d19cb9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page