dirigent-examples 0.20.0__tar.gz → 0.21.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/PKG-INFO +3 -3
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/pyproject.toml +3 -3
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/pyproject.toml.orig +3 -3
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/README.md +1 -1
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/queues/README.md +3 -1
- dirigent_examples-0.21.0/src/dirigent_examples/shelves/queues/kafka-watch-then-transform.yaml +88 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/triggers/README.md +6 -5
- dirigent_examples-0.21.0/src/dirigent_examples/shelves/triggers/watch-a-sensor.yaml +85 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/LICENSE +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/__init__.py +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/py.typed +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/composition/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/composition/chained-instances.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/composition/composition-child.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/composition/composition-parent.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/connections.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/demo/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/demo/markdown-showcase.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/demo/params-showcase.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/demo/requires.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/demo/weekly-import-malawi.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/demo/weekly-import-nepal.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/docker/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/docker/docker-build-push.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/docker/docker-build-run.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/docker/docker-compose-database.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/docker/docker-compose-failing-up.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/docker/docker-compose-file.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/docker/docker-compose-profiles-env.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/docker/docker-compose-stack.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/docker/docker-hello.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/docker/docker-remote-daemon.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/docker/docker-run-failing-teardown.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/docker/docker-ticker.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/execute/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/execute/long-log.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/failure/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/failure/error-handler.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/failure/optional-step.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/failure/retries.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/failure/retry-budget.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/failure/step-timeout.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/git/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/git/git-checkout-build.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/git/git-checkout-compose.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/git/git-checkout-public.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/graph/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/graph/deep-chain.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/graph/fan-in.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/graph/fan-out.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/graph/linear.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/graph/parallel-branches.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/graph/parallel-sleep.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/graph/skip-diamond.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/graph/wide-fan.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/hello-world.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/open-data/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/open-data/feeds-composition.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/open-data/gdacs-disaster-updates.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/open-data/github-releases-relay.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/open-data/hdx-dataset-watch.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/open-data/kobo-submissions-to-csv.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/open-data/nominatim-geocode-facilities.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/open-data/odk-central-submissions.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/open-data/open-meteo-weekly-report.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/open-data/overpass-health-facilities.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/open-data/usgs-earthquakes-alert.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/open-data/who-gho-indicators-to-parquet.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/open-data/wikidata-country-reference.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/open-data/world-bank-population-trend.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/concurrency-queue.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/concurrency-replace.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/concurrency-skip.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/connections-referenced-vs-carried.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/deadline-on-a-sensor.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/fan-out-continue.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/fan-out-fail-fast.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/fan-out-from-params.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/fan-out-item-wise.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/fan-out-literal-list.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/fan-out-nested-objects.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/fan-out-then-join.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/importance-critical.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/log-levels.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/outputs-inline-vs-storage.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/params-every-type.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/params-validation-refuses.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/pipeline-run-child.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/pipeline-run-fire-and-forget.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/pipeline-run-strict.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/pipeline-run-wait.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/pipeline-run-with-params.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/poll-cadence.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/priority-layered.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/references-cheat-sheet.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/retry-budget-exhausted.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/retry-exponential-backoff.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/retry-only-transient.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/retry-with-jitter.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/rule-all-done.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/rule-all-success.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/rule-always.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/rule-one-failed.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/schedule-at-once.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/schedule-cron-timezone.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/schedule-interval.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/schedule-window-half-open.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/sensor-http-ready.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/sensor-storage-exists.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/step-names-and-keys.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/timeout-fails-the-step.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/timeout-skips-the-step.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/webhook-mapping-nested-payload.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/patterns/webhook-signed.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/playground/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/playground/a-gate-catching-drift.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/playground/a-page-at-a-time.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/playground/a-stream-to-read.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/playground/generated-rows.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/playground/in-the-middle-of-a-flow.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/playground/retry-that-really-retries.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/playground/waiting-for-a-batch.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/preview/s3-parquet-to-ingestion.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/python/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/python/apply_and_run.py +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/python/ci_gate.py +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/python/connections.py +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/python/error_handling.py +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/python/follow_logs.py +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/python/list_and_filter.py +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/queues/kafka-consume-then-transform.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/queues/kafka-produce-then-consume.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/queues/rabbitmq-consume-ack-on-success.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/queues/report-to-kafka.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/queues/report-to-rabbitmq.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/csv-header-rules.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/csv-to-ndjson.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/etl-csv-clean-validate-parquet.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/filter-by-predicate.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/filter-then-map-then-reduce.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/http-fetch-validate-post.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/http-follow-redirects.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/http-get-with-query.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/http-headers-and-auth-connection.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/http-post-file-from-storage.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/http-post-json-body.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/http-post-report.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/http-save-body-to-storage.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/http-success-status-list.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/http-timeout-override.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/jq-dedupe-by-key.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/jq-defaults-and-nulls.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/jq-group-by-and-sum.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/jq-join-two-lists.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/jq-long-to-wide.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/jq-nested-to-flat.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/jq-pivot-wide-to-long.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/jq-running-totals.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/jq-string-cleaning.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/jq-top-n.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/jq-validate-in-jq-vs-schema.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/jq-window-dates.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/json-to-csv-flattening.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/large-output-to-storage.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/map-enrich-with-lookup.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/ndjson-to-parquet.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/pagination-by-fan-out.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/parquet-round-trip-types.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/reconcile-two-sources.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/report-built-in.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/report-daily-digest.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/report-to-file.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/report-to-webhook.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/schema-carried.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/schema-formats.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/schema-referenced.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/schema-refuses-then-rule.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/storage-copy-dated-archive.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/storage-exists-gate.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/storage-keep-past-the-run.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/storage-manifest-of-a-fan-out.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/storage-write-then-read.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/webhook-post-hmac.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/recipes/webhook-post-summary.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/s3/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/s3/report-to-s3.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/s3/s3-copy-and-verify.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/s3/s3-csv-report.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/s3/s3-parquet-report.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/s3/s3-round-trip.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/schemas/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/schemas/ou-record.json +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/schemas/playground-reading.json +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/schemas/station-reading.json +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/sensors/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/sensors/sensor-gate.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/sensors/time-window.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/showcase/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/showcase/morning-briefing.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/showcase/nightly-regional-load.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/showcase/one-region-refuses.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/sql/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/sql/duckdb-parquet-to-report.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/sql/sql-postgres-readonly.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/sql/sql-query-to-storage.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/sql/sql-sqlite-roundtrip.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/sql/warehouse.sql +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/transform/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/transform/csv-report.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/transform/jq-filter-and-map.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/transform/jq-group-and-aggregate.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/transform/jq-join-two-sources.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/transform/jq-reshape.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/transform/jq-stream-through-storage.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/transform/ndjson-round-trip.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/transform/parquet-round-trip.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/transform/std-convert-fan-out.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/transform/xml-feed-to-ndjson.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/transform/yaml-config-to-json.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/triggers/at-one-time.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/triggers/cron-nightly.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/triggers/cron-windowed.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/triggers/document-nightly.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/triggers/interval-rolling.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/triggers/managed-and-manual.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/triggers/webhook-trigger.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/validate/README.md +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/validate/expects-a-shape.yaml +0 -0
- {dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/validate/the-shape-is-wrong.yaml +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dirigent-examples
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.21.0
|
|
4
4
|
Summary: The dirigent example corpus: the shelves of runnable documents, installed.
|
|
5
5
|
License-Expression: LicenseRef-Proprietary
|
|
6
6
|
License-File: LICENSE
|
|
7
7
|
Classifier: Programming Language :: Python :: 3
|
|
8
8
|
Classifier: Programming Language :: Python :: 3.13
|
|
9
|
-
Requires-Dist: dirigent-client==0.
|
|
10
|
-
Requires-Dist: dirigent-plugin==0.
|
|
9
|
+
Requires-Dist: dirigent-client==0.21.0
|
|
10
|
+
Requires-Dist: dirigent-plugin==0.21.0
|
|
11
11
|
Requires-Python: >=3.13
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "dirigent-examples"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.21.0"
|
|
4
4
|
description = "The dirigent example corpus: the shelves of runnable documents, installed."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.13"
|
|
@@ -11,8 +11,8 @@ classifiers = [
|
|
|
11
11
|
"Programming Language :: Python :: 3.13",
|
|
12
12
|
]
|
|
13
13
|
dependencies = [
|
|
14
|
-
"dirigent-client==0.
|
|
15
|
-
"dirigent-plugin==0.
|
|
14
|
+
"dirigent-client==0.21.0",
|
|
15
|
+
"dirigent-plugin==0.21.0",
|
|
16
16
|
]
|
|
17
17
|
|
|
18
18
|
[project.entry-points."dirigent.plugins.v1"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "dirigent-examples"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.21.0"
|
|
4
4
|
description = "The dirigent example corpus: the shelves of runnable documents, installed."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.13"
|
|
@@ -12,8 +12,8 @@ classifiers = [
|
|
|
12
12
|
]
|
|
13
13
|
dependencies = [
|
|
14
14
|
# The python/ shelf is SDK scripts a reader runs, so the corpus carries the client.
|
|
15
|
-
"dirigent-client==0.
|
|
16
|
-
"dirigent-plugin==0.
|
|
15
|
+
"dirigent-client==0.21.0",
|
|
16
|
+
"dirigent-plugin==0.21.0",
|
|
17
17
|
]
|
|
18
18
|
|
|
19
19
|
[project.entry-points."dirigent.plugins.v1"]
|
{dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/README.md
RENAMED
|
@@ -18,7 +18,7 @@ The documents live on topic shelves, each with its own README:
|
|
|
18
18
|
| [`failure/`](failure) | Retries, budgets, timeouts, tolerated failures, and the cleanup edge. |
|
|
19
19
|
| [`transform/`](transform) | The reshaping verbs: jq programs and the `convert.std` codec, no allowlist anywhere. |
|
|
20
20
|
| [`recipes/`](recipes) | One question per file: how to group, join, pivot, clean, convert, check, store, and call. |
|
|
21
|
-
| [`triggers/`](triggers) | What starts a run on its own: the three clocks,
|
|
21
|
+
| [`triggers/`](triggers) | What starts a run on its own: the three clocks, the inbound webhook, and a watch on a sensor. |
|
|
22
22
|
| [`sensors/`](sensors) | Steps that wait for the world: a drop landing, a clock window opening. |
|
|
23
23
|
| [`queues/`](queues) | A run started by a message: a Kafka topic and a RabbitMQ queue, waited on as sensors. |
|
|
24
24
|
| [`execute/`](execute) | Code on the worker: a shell step behind the allowlist. |
|
{dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/queues/README.md
RENAMED
|
@@ -42,6 +42,7 @@ On the compose stack the brokers are the `infra/compose.brokers.yaml` overlay in
|
|
|
42
42
|
| File | What it teaches |
|
|
43
43
|
| --- | --- |
|
|
44
44
|
| [kafka-consume-then-transform.yaml](kafka-consume-then-transform.yaml) | Waiting on a topic: `min_messages` and `max_messages`, why the cursor rather than a consumer group holds the offsets, and the batch read by a downstream transform. |
|
|
45
|
+
| [kafka-watch-then-transform.yaml](kafka-watch-then-transform.yaml) | A topic read as a stream: a watch keeps one run waiting on `kafka.consume` and starts the next from where each batch ended, with no consumer group, while every batch is reshaped in the run that took it. |
|
|
45
46
|
| [kafka-produce-then-consume.yaml](kafka-produce-then-consume.yaml) | Publishing: the two shapes an element of `records` may take, where a message key comes from, what `acks: all` and an idempotent producer do and do not promise, and why this one consumes from `earliest`. |
|
|
46
47
|
| [report-to-kafka.yaml](report-to-kafka.yaml) | Publishing a rendered page: `report.render` hands its text on, and `kafka.produce` puts it on the topic as one keyed record. |
|
|
47
48
|
| [rabbitmq-consume-ack-on-success.yaml](rabbitmq-consume-ack-on-success.yaml) | When a message is acknowledged: why `ack: on_success` is the default, what a poke that parks does with the messages it took, and what `always` gives up in exchange. |
|
|
@@ -56,4 +57,5 @@ the state there. It replaces rather than merges, it is stored by the transaction
|
|
|
56
57
|
attempt -- which makes advancing it at-least-once, so a poke may read the same ground twice --
|
|
57
58
|
and it lives only as long as the waiting attempt, because a poke that succeeds ends the step.
|
|
58
59
|
Anything a later step needs is in the output, which is why `kafka.consume` reports the offsets
|
|
59
|
-
it ended at there.
|
|
60
|
+
it ended at there. A watch is the one thing that carries a cursor past a success: it stores
|
|
61
|
+
where the batch ended and starts its next run there.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# A topic read as a stream: a watch keeps one run waiting on it, and each batch it takes arms
|
|
2
|
+
# the next run from where that batch ended.
|
|
3
|
+
#
|
|
4
|
+
# NEEDS A BROKER, and a topic to read:
|
|
5
|
+
# docker compose -f infra/compose.queues.yaml up -d --wait
|
|
6
|
+
# docker exec -it dirigent-queues-redpanda-1 rpk topic create orders
|
|
7
|
+
# dg connection create kafka orders-topic --set bootstrap_servers='["127.0.0.1:9092"]'
|
|
8
|
+
# dg apply examples/queues/kafka-watch-then-transform.yaml
|
|
9
|
+
# Then produce to the topic in another shell, as often as you like, and watch the runs line up:
|
|
10
|
+
# docker exec -it dirigent-queues-redpanda-1 \
|
|
11
|
+
# rpk topic produce orders --format '%v\n' # then type JSON lines and press ctrl-d
|
|
12
|
+
# dg runs list --pipeline kafka-watch-then-transform
|
|
13
|
+
# On the compose stack the broker is the infra/compose.brokers.yaml overlay and the connection
|
|
14
|
+
# names it as `redpanda:9092`; docs/queues.md is the family's home.
|
|
15
|
+
#
|
|
16
|
+
# Two hops, and what each one hands on:
|
|
17
|
+
# take kafka.consume, the watched step. It parks until there is a batch, then hands on
|
|
18
|
+
# the messages, their count, and the offsets it ended at.
|
|
19
|
+
# summarise a jq transform over that batch, in the run that took it -- while the next run
|
|
20
|
+
# is already waiting on the topic.
|
|
21
|
+
#
|
|
22
|
+
# THE WATCH OWNS THE CURSOR, SO NO group_id. kafka.consume says where a batch ended, the watch
|
|
23
|
+
# stores it, and the next run's first poke reads on from exactly there. Nothing is committed
|
|
24
|
+
# to the broker, nothing on the cluster has to be arranged, and a second pipeline over the same
|
|
25
|
+
# topic still sees every message. Set a group_id as well if the broker should know how far this
|
|
26
|
+
# pipeline has read; the watch's cursor stays what the next run starts from.
|
|
27
|
+
#
|
|
28
|
+
# start: earliest APPLIES ONCE. It says where the very first run begins, which here is the
|
|
29
|
+
# oldest message the broker still holds. Every run after it starts from the watch's cursor, so
|
|
30
|
+
# nothing is replayed and nothing is skipped between two runs.
|
|
31
|
+
#
|
|
32
|
+
# NO deadline. A watched sensor waits as long as the topic is quiet, and that costs a row with a
|
|
33
|
+
# due time, not a worker. `dg watch pause kafka-watch-then-transform follow` stops it, cancelling
|
|
34
|
+
# the run that is waiting and keeping the cursor for `dg watch resume`.
|
|
35
|
+
#
|
|
36
|
+
# READING THE SAME GROUND TWICE. The cursor is stored by the transaction that settles the
|
|
37
|
+
# batch, so a worker that dies before that commit leaves the older offsets behind and the next
|
|
38
|
+
# poke reads those messages again. A step that must not act twice on a message makes itself
|
|
39
|
+
# idempotent; this one only reshapes, so it does not care.
|
|
40
|
+
#
|
|
41
|
+
# TO MAKE IT YOURS: point the connection at your own cluster, change the topic, and replace the
|
|
42
|
+
# summarise step with whatever consumes the batch.
|
|
43
|
+
|
|
44
|
+
format: dirigent/v1
|
|
45
|
+
kind: pipeline
|
|
46
|
+
code: kafka-watch-then-transform
|
|
47
|
+
name: Watch a Kafka topic, then transform each batch
|
|
48
|
+
description: |
|
|
49
|
+
A watch on kafka.consume reads a topic run after run from where the last batch ended, with
|
|
50
|
+
no consumer group, and each batch is reshaped in the run that took it.
|
|
51
|
+
|
|
52
|
+
tags: [queues, kafka, sensor, transform, triggers]
|
|
53
|
+
|
|
54
|
+
requires:
|
|
55
|
+
blocks:
|
|
56
|
+
- kafka.consume
|
|
57
|
+
- transform.jq
|
|
58
|
+
connections:
|
|
59
|
+
- orders-topic
|
|
60
|
+
|
|
61
|
+
steps:
|
|
62
|
+
take:
|
|
63
|
+
block: kafka.consume
|
|
64
|
+
poll: 5s
|
|
65
|
+
config:
|
|
66
|
+
connection: orders-topic
|
|
67
|
+
topic: orders
|
|
68
|
+
min_messages: 1
|
|
69
|
+
# Bounds what one run carries: a burst of a thousand messages becomes ten runs of a
|
|
70
|
+
# hundred, each summarised on its own while the next one is taken.
|
|
71
|
+
max_messages: 100
|
|
72
|
+
start: earliest
|
|
73
|
+
value_format: json
|
|
74
|
+
|
|
75
|
+
summarise:
|
|
76
|
+
block: transform.jq
|
|
77
|
+
depends_on: [take]
|
|
78
|
+
config:
|
|
79
|
+
input: ${steps.take.output}
|
|
80
|
+
program: >-
|
|
81
|
+
{count: .count, first_offset: (.messages | map(.offset) | min),
|
|
82
|
+
last_offset: (.messages | map(.offset) | max), resume_from: .cursor}
|
|
83
|
+
|
|
84
|
+
triggers:
|
|
85
|
+
watches:
|
|
86
|
+
- code: follow
|
|
87
|
+
name: Follow the orders
|
|
88
|
+
step: take
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Trigger examples
|
|
2
2
|
|
|
3
|
-
What starts a run on its own: a clock,
|
|
4
|
-
document and materialised by `dg apply`; the scheduler fires the clocks
|
|
5
|
-
answers the hooks,
|
|
6
|
-
last fired, the firing and delivery history
|
|
7
|
-
in these files. [docs/design.md](../../docs/design.md#the-misfire-policy) is the page behind
|
|
3
|
+
What starts a run on its own: a clock, an inbound webhook, or a watch. A trigger is declared
|
|
4
|
+
in the document and materialised by `dg apply`; the scheduler fires the clocks, the server
|
|
5
|
+
answers the hooks, and a watch keeps a run waiting on its sensor, on the instance the document
|
|
6
|
+
was applied to. Operational state -- paused, last fired, the firing and delivery history, the
|
|
7
|
+
cursor a watch holds -- stays in the instance, so none of it appears in these files. [docs/design.md](../../docs/design.md#the-misfire-policy) is the page behind
|
|
8
8
|
the clocks.
|
|
9
9
|
|
|
10
10
|
Each file is prefixed with the clock kind it teaches, the way `transform/`'s files are
|
|
@@ -34,6 +34,7 @@ dg run --local examples/triggers/cron-windowed.yaml --window 2026-06-01..2026-06
|
|
|
34
34
|
| [managed-and-manual.yaml](managed-and-manual.yaml) | Against a real instance: what an apply materialises, what it removes, and the hand-made schedule it leaves alone. |
|
|
35
35
|
| [document-nightly.yaml](document-nightly.yaml) | A `kind: triggers` document: clocks for a pipeline defined elsewhere, owning its own rows and refusing a pipeline no instance holds. |
|
|
36
36
|
| [webhook-trigger.yaml](webhook-trigger.yaml) | The inbound trigger: a token minted at apply, a strict payload-to-parameter mapping, and everything else in the POST ignored. |
|
|
37
|
+
| [watch-a-sensor.yaml](watch-a-sensor.yaml) | A watch: one run always waiting on `playground.arrive`, the next armed the moment a batch arrives, the runs overlapping and the offsets carrying on from batch to batch. |
|
|
37
38
|
|
|
38
39
|
A pipeline carries as many schedules as it needs, each with its own zone and its own
|
|
39
40
|
parameters: nightly against production and hourly against staging is two schedules on one
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# A sensor made a continuous source: one run always waiting on it, the next armed the moment
|
|
2
|
+
# it succeeds.
|
|
3
|
+
#
|
|
4
|
+
# A schedule starts a run at a moment and a webhook when somebody calls. A watch starts one
|
|
5
|
+
# whenever the last one has what it was waiting for: it keeps exactly one run of this pipeline
|
|
6
|
+
# waiting on the `arrive` step, and the transaction that settles that step's success arms the
|
|
7
|
+
# next run. The run that succeeded carries on downstream while the next one waits, so the runs
|
|
8
|
+
# overlap -- batch N is being summarised while batch N+1 is being waited for -- and the run list
|
|
9
|
+
# fills the way a topic being consumed does. Nothing here needs a network or an allowlist:
|
|
10
|
+
#
|
|
11
|
+
# dg apply examples/triggers/watch-a-sensor.yaml
|
|
12
|
+
# dg watch list watch-a-sensor # the run it has waiting, and where it left off
|
|
13
|
+
# dg runs list --pipeline watch-a-sensor # a new run every five seconds or so
|
|
14
|
+
# dg watch pause watch-a-sensor follow # cancels the waiting run, keeps the cursor
|
|
15
|
+
# dg watch resume watch-a-sensor follow # arms a run that reads on from there
|
|
16
|
+
#
|
|
17
|
+
# `dg run --local` runs the pipeline once, as an ordinary run: a throwaway instance runs the
|
|
18
|
+
# one run it was asked for, so the watch lands paused there.
|
|
19
|
+
#
|
|
20
|
+
# Hop by hop:
|
|
21
|
+
#
|
|
22
|
+
# arrive playground.arrive, parked for five seconds, then a batch of three generated
|
|
23
|
+
# readings. Under the watch its offsets carry on from the batch before: the
|
|
24
|
+
# first run's are 0 to 2, the next run's 3 to 5, and so on.
|
|
25
|
+
# summarise a jq transform over the batch, which reads it the way a step downstream of a
|
|
26
|
+
# topic would: how many, and the first and last offset.
|
|
27
|
+
#
|
|
28
|
+
# THE WATCH OWNS THE CURSOR. playground.arrive says where a batch ended, and the watch stores
|
|
29
|
+
# that and hands it to the next run's first poke. kafka.consume does the same with its
|
|
30
|
+
# offsets, which is how a watched topic is read on without a consumer group:
|
|
31
|
+
# examples/queues/kafka-watch-then-transform.yaml is the same shape against a real broker.
|
|
32
|
+
#
|
|
33
|
+
# A WAIT THAT FAILS BACKS OFF. Were `arrive` to fail after its retries, the watch would record
|
|
34
|
+
# why (`dg watch show watch-a-sensor follow` reads it as last_error) and arm again after five
|
|
35
|
+
# seconds, doubling up to five minutes, from the last cursor a success stored. A deadline
|
|
36
|
+
# that ran out under on_timeout: skip found nothing, which is no failure: it arms at once.
|
|
37
|
+
|
|
38
|
+
format: dirigent/v1
|
|
39
|
+
kind: pipeline
|
|
40
|
+
code: watch-a-sensor
|
|
41
|
+
name: Watch a sensor
|
|
42
|
+
description: |
|
|
43
|
+
A watch keeps one run waiting on a generated batch and arms the next the moment it
|
|
44
|
+
arrives, so the runs overlap and the offsets carry on from one batch to the next.
|
|
45
|
+
|
|
46
|
+
tags: [triggers, playground, sensor, jq, starter]
|
|
47
|
+
|
|
48
|
+
requires:
|
|
49
|
+
blocks:
|
|
50
|
+
- playground.arrive
|
|
51
|
+
- transform.jq
|
|
52
|
+
|
|
53
|
+
steps:
|
|
54
|
+
arrive:
|
|
55
|
+
block: playground.arrive
|
|
56
|
+
# A watch waits on a root step, one that depends on nothing, and on a sensor: the watch
|
|
57
|
+
# is refused at apply otherwise.
|
|
58
|
+
poll: 1s
|
|
59
|
+
deadline: 1m
|
|
60
|
+
config:
|
|
61
|
+
# Five seconds from when the attempt started, so a new batch lands every five seconds
|
|
62
|
+
# or so. after_pokes is zero because the clock is what this wait is about.
|
|
63
|
+
after: 5s
|
|
64
|
+
after_pokes: 0
|
|
65
|
+
rows: 3
|
|
66
|
+
fields:
|
|
67
|
+
station: city
|
|
68
|
+
reading: pyfloat
|
|
69
|
+
|
|
70
|
+
summarise:
|
|
71
|
+
block: transform.jq
|
|
72
|
+
depends_on: [arrive]
|
|
73
|
+
config:
|
|
74
|
+
input: ${steps.arrive.output}
|
|
75
|
+
program: >-
|
|
76
|
+
{count: .count, first_offset: .messages[0].offset,
|
|
77
|
+
last_offset: .messages[-1].offset, next_offset: .next_offset}
|
|
78
|
+
|
|
79
|
+
triggers:
|
|
80
|
+
watches:
|
|
81
|
+
- code: follow
|
|
82
|
+
name: Follow the arrivals
|
|
83
|
+
# The step every armed run waits on. Its success arms the next run; everything
|
|
84
|
+
# downstream of it runs in the run that succeeded.
|
|
85
|
+
step: arrive
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/connections.yaml
RENAMED
|
File without changes
|
{dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/demo/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/docker/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/git/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/graph/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/hello-world.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirigent_examples-0.20.0 → dirigent_examples-0.21.0}/src/dirigent_examples/shelves/python/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|