dirigent-examples 0.18.4__tar.gz → 0.19.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.18.4 → dirigent_examples-0.19.0}/PKG-INFO +3 -3
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/pyproject.toml +3 -3
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/pyproject.toml.orig +3 -3
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/README.md +1 -0
- dirigent_examples-0.19.0/src/dirigent_examples/shelves/playground/README.md +42 -0
- dirigent_examples-0.19.0/src/dirigent_examples/shelves/playground/a-gate-catching-drift.yaml +98 -0
- dirigent_examples-0.19.0/src/dirigent_examples/shelves/playground/a-page-at-a-time.yaml +90 -0
- dirigent_examples-0.19.0/src/dirigent_examples/shelves/playground/generated-rows.yaml +80 -0
- dirigent_examples-0.19.0/src/dirigent_examples/shelves/playground/in-the-middle-of-a-flow.yaml +73 -0
- dirigent_examples-0.19.0/src/dirigent_examples/shelves/playground/retry-that-really-retries.yaml +80 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/LICENSE +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/__init__.py +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/py.typed +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/composition/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/composition/chained-instances.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/composition/composition-child.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/composition/composition-parent.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/connections.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/demo/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/demo/markdown-showcase.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/demo/params-showcase.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/demo/requires.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/demo/weekly-import-malawi.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/demo/weekly-import-nepal.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/docker/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/docker/docker-build-push.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/docker/docker-build-run.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/docker/docker-compose-database.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/docker/docker-compose-failing-up.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/docker/docker-compose-file.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/docker/docker-compose-profiles-env.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/docker/docker-compose-stack.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/docker/docker-hello.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/docker/docker-remote-daemon.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/docker/docker-run-failing-teardown.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/docker/docker-ticker.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/execute/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/execute/long-log.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/failure/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/failure/error-handler.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/failure/optional-step.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/failure/retries.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/failure/retry-budget.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/failure/step-timeout.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/git/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/git/git-checkout-build.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/git/git-checkout-compose.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/git/git-checkout-public.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/graph/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/graph/deep-chain.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/graph/fan-in.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/graph/fan-out.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/graph/linear.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/graph/parallel-branches.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/graph/parallel-sleep.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/graph/skip-diamond.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/graph/wide-fan.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/hello-world.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/open-data/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/open-data/feeds-composition.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/open-data/gdacs-disaster-updates.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/open-data/github-releases-relay.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/open-data/hdx-dataset-watch.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/open-data/kobo-submissions-to-csv.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/open-data/nominatim-geocode-facilities.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/open-data/odk-central-submissions.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/open-data/open-meteo-weekly-report.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/open-data/overpass-health-facilities.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/open-data/usgs-earthquakes-alert.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/open-data/who-gho-indicators-to-parquet.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/open-data/wikidata-country-reference.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/open-data/world-bank-population-trend.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/concurrency-queue.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/concurrency-replace.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/concurrency-skip.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/connections-referenced-vs-carried.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/deadline-on-a-sensor.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/fan-out-continue.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/fan-out-fail-fast.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/fan-out-from-params.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/fan-out-item-wise.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/fan-out-literal-list.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/fan-out-nested-objects.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/fan-out-then-join.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/importance-critical.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/log-levels.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/outputs-inline-vs-storage.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/params-every-type.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/params-validation-refuses.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/pipeline-run-child.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/pipeline-run-fire-and-forget.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/pipeline-run-strict.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/pipeline-run-wait.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/pipeline-run-with-params.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/poll-cadence.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/priority-layered.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/references-cheat-sheet.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/retry-budget-exhausted.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/retry-exponential-backoff.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/retry-only-transient.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/retry-with-jitter.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/rule-all-done.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/rule-all-success.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/rule-always.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/rule-one-failed.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/schedule-at-once.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/schedule-cron-timezone.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/schedule-interval.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/schedule-window-half-open.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/sensor-http-ready.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/sensor-storage-exists.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/step-names-and-keys.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/timeout-fails-the-step.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/timeout-skips-the-step.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/webhook-mapping-nested-payload.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/patterns/webhook-signed.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/preview/s3-parquet-to-ingestion.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/python/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/python/apply_and_run.py +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/python/ci_gate.py +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/python/connections.py +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/python/error_handling.py +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/python/follow_logs.py +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/python/list_and_filter.py +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/queues/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/queues/kafka-consume-then-transform.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/queues/kafka-produce-then-consume.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/queues/rabbitmq-consume-ack-on-success.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/queues/report-to-kafka.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/queues/report-to-rabbitmq.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/csv-header-rules.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/csv-to-ndjson.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/etl-csv-clean-validate-parquet.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/filter-by-predicate.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/filter-then-map-then-reduce.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/http-fetch-validate-post.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/http-follow-redirects.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/http-get-with-query.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/http-headers-and-auth-connection.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/http-post-file-from-storage.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/http-post-json-echo.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/http-post-report.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/http-save-body-to-storage.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/http-success-status-list.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/http-timeout-override.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/jq-dedupe-by-key.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/jq-defaults-and-nulls.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/jq-group-by-and-sum.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/jq-join-two-lists.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/jq-long-to-wide.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/jq-nested-to-flat.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/jq-pivot-wide-to-long.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/jq-running-totals.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/jq-string-cleaning.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/jq-top-n.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/jq-validate-in-jq-vs-schema.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/jq-window-dates.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/json-to-csv-flattening.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/large-output-to-storage.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/map-enrich-with-lookup.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/ndjson-to-parquet.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/pagination-by-fan-out.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/parquet-round-trip-types.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/reconcile-two-sources.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/report-built-in.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/report-daily-digest.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/report-to-file.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/report-to-webhook.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/schema-carried.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/schema-formats.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/schema-referenced.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/schema-refuses-then-rule.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/storage-copy-dated-archive.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/storage-exists-gate.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/storage-keep-past-the-run.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/storage-manifest-of-a-fan-out.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/storage-write-then-read.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/webhook-post-hmac.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/recipes/webhook-post-summary.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/s3/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/s3/report-to-s3.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/s3/s3-copy-and-verify.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/s3/s3-csv-report.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/s3/s3-parquet-report.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/s3/s3-round-trip.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/schemas/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/schemas/echo-reading.json +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/schemas/ou-record.json +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/schemas/station-reading.json +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/sensors/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/sensors/sensor-gate.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/sensors/time-window.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/showcase/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/showcase/morning-briefing.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/showcase/nightly-regional-load.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/showcase/one-region-refuses.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/sql/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/sql/duckdb-parquet-to-report.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/sql/sql-postgres-readonly.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/sql/sql-query-to-storage.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/sql/sql-sqlite-roundtrip.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/sql/warehouse.sql +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/transform/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/transform/csv-report.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/transform/jq-filter-and-map.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/transform/jq-group-and-aggregate.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/transform/jq-join-two-sources.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/transform/jq-reshape.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/transform/jq-stream-through-storage.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/transform/ndjson-round-trip.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/transform/parquet-round-trip.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/transform/std-convert-fan-out.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/transform/xml-feed-to-ndjson.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/transform/yaml-config-to-json.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/triggers/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/triggers/at-one-time.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/triggers/cron-nightly.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/triggers/cron-windowed.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/triggers/document-nightly.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/triggers/interval-rolling.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/triggers/managed-and-manual.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/triggers/webhook-trigger.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/validate/README.md +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/validate/expects-a-shape.yaml +0 -0
- {dirigent_examples-0.18.4 → dirigent_examples-0.19.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.19.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.19.0
|
|
10
|
+
Requires-Dist: dirigent-plugin==0.19.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.19.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.19.0",
|
|
15
|
+
"dirigent-plugin==0.19.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.19.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.19.0",
|
|
16
|
+
"dirigent-plugin==0.19.0",
|
|
17
17
|
]
|
|
18
18
|
|
|
19
19
|
[project.entry-points."dirigent.plugins.v1"]
|
{dirigent_examples-0.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/README.md
RENAMED
|
@@ -14,6 +14,7 @@ The documents live on topic shelves, each with its own README:
|
|
|
14
14
|
| --- | --- |
|
|
15
15
|
| [`graph/`](graph) | The shapes a DAG takes: lines, branches, fans, joins, and skips. |
|
|
16
16
|
| [`patterns/`](patterns) | One engine behaviour per file: rules, retries, the two clocks, item policies, triggers, concurrency, and the reference language. |
|
|
17
|
+
| [`playground/`](playground) | Documents that need something to happen: generated rows, a step that fails twice, a shape that drifts, a page to walk. |
|
|
17
18
|
| [`failure/`](failure) | Retries, budgets, timeouts, tolerated failures, and the cleanup edge. |
|
|
18
19
|
| [`transform/`](transform) | The reshaping verbs: jq programs and the `convert.std` codec, no allowlist anywhere. |
|
|
19
20
|
| [`recipes/`](recipes) | One question per file: how to group, join, pivot, clean, convert, check, store, and call. |
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Playground examples
|
|
2
|
+
|
|
3
|
+
Documents that need something to *happen*, not something to call. `playground.generate` is a
|
|
4
|
+
node like any other: it takes an optional `input`, it emits an output, and it works at the
|
|
5
|
+
start of a flow, in the middle of one, or as its last step. It reaches nothing -- no
|
|
6
|
+
connection, no URL, no network, no file -- so a document here runs offline and runs the same
|
|
7
|
+
on every machine.
|
|
8
|
+
|
|
9
|
+
The knobs are what make it worth having. A fan-out needs a list to walk, a retry needs a step
|
|
10
|
+
that fails twice, a gate needs a shape that drifts, and an outputs-to-storage example needs a
|
|
11
|
+
payload over the threshold. Each of those is a knob rather than a contrivance:
|
|
12
|
+
|
|
13
|
+
| Knob | What it does |
|
|
14
|
+
| --- | --- |
|
|
15
|
+
| `fields` | Which Faker provider fills each output field. Any provider the installed Faker has. |
|
|
16
|
+
| `rows`, `locale`, `seed` | How many records, in which locale, from which seed. |
|
|
17
|
+
| `page`, `size` | Hand back one page of the records, and say how many pages there are. |
|
|
18
|
+
| `drift` | Emit a deliberately wrong shape: `strings`, `missing` or `extra`. |
|
|
19
|
+
| `payload` | Filler of a chosen size, to push an output past the inline limit. |
|
|
20
|
+
| `delay` | Take that long before answering, for a timeout or a deadline. |
|
|
21
|
+
| `fail_until` | Fail that many attempts before succeeding, for a retry. |
|
|
22
|
+
| `input` | A value from upstream to work from; absent, the knobs generate one. |
|
|
23
|
+
|
|
24
|
+
**Everything is seeded.** The same seed gives the same records on every run, which is what
|
|
25
|
+
lets a document here assert on what came out. With no seed the node draws one and reports it,
|
|
26
|
+
so a surprising answer can still be reproduced.
|
|
27
|
+
|
|
28
|
+
**The provider names are Faker's.** A reader cannot guess 280 of them, and a list pasted into
|
|
29
|
+
a page rots. `uv run faker` prints every provider the installed Faker offers with a sample of
|
|
30
|
+
each, and `uv run faker -l no_NO` prints them for one locale.
|
|
31
|
+
|
|
32
|
+
A document that is teaching HTTP itself -- a request with headers and a query, a status a
|
|
33
|
+
client has to handle, a redirect, a delay against a timeout -- wants a real HTTP hop instead,
|
|
34
|
+
and the instance serves one under `/api/v1/playground`.
|
|
35
|
+
|
|
36
|
+
| File | What it demonstrates |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| [generated-rows.yaml](generated-rows.yaml) | The lead case: a first step with no input, a field map, a row count and a seed. |
|
|
39
|
+
| [retry-that-really-retries.yaml](retry-that-really-retries.yaml) | `fail_until` reads the engine's attempt number, so the step really fails twice and really recovers. |
|
|
40
|
+
| [a-gate-catching-drift.yaml](a-gate-catching-drift.yaml) | `drift` makes the shape wrong on demand, so `validate.schema` is seen refusing it. |
|
|
41
|
+
| [a-page-at-a-time.yaml](a-page-at-a-time.yaml) | `page`/`size` give a fan-out a real page to walk, and `payload` pushes the output out to storage. |
|
|
42
|
+
| [in-the-middle-of-a-flow.yaml](in-the-middle-of-a-flow.yaml) | The node with an `input` from upstream, and again as the document's last step. |
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# A schema gate seen catching something, because the shape drifts on demand.
|
|
2
|
+
#
|
|
3
|
+
# A gate example is only convincing if the reader sees it refuse. `drift` makes the node emit
|
|
4
|
+
# a shape that is deliberately wrong, in one of three documented ways:
|
|
5
|
+
#
|
|
6
|
+
# strings every number and boolean comes back as a string a typed schema refuses it
|
|
7
|
+
# missing the field map's first field is left out a required-field schema refuses it
|
|
8
|
+
# extra a field the map never named is added a closed schema refuses it
|
|
9
|
+
#
|
|
10
|
+
# The schema is carried in this document's own `schemas:` section, so `dg run --local` runs
|
|
11
|
+
# the file alone. A server refuses a carried schema, and an instance names one instead.
|
|
12
|
+
#
|
|
13
|
+
# Hop by hop:
|
|
14
|
+
#
|
|
15
|
+
# reading three records: a station code and a numeric value each, drifted or not.
|
|
16
|
+
# gate validate.schema against `reading-records`. Passes the value through when it
|
|
17
|
+
# fits, and fails the run naming the path when it does not.
|
|
18
|
+
# report reads the gate's output, so the graph records that it saw a checked shape.
|
|
19
|
+
#
|
|
20
|
+
# EXPECT THIS RUN TO END completed with the default, and failed with any other drift. Read
|
|
21
|
+
# the gate's error on a failure: it names the path into the payload that is wrong.
|
|
22
|
+
#
|
|
23
|
+
# dg run --local examples/playground/a-gate-catching-drift.yaml # completed
|
|
24
|
+
# dg run --local examples/playground/a-gate-catching-drift.yaml -p drift=strings # fails at the gate
|
|
25
|
+
# dg run --local examples/playground/a-gate-catching-drift.yaml -p drift=missing # fails at the gate
|
|
26
|
+
|
|
27
|
+
format: dirigent/v1
|
|
28
|
+
kind: pipeline
|
|
29
|
+
code: a-gate-catching-drift
|
|
30
|
+
name: A gate catching drift
|
|
31
|
+
description: |
|
|
32
|
+
Generated records against a carried JSON Schema, with a knob that makes the shape wrong.
|
|
33
|
+
|
|
34
|
+
The gate passes good records through and refuses drifted ones, naming the path.
|
|
35
|
+
|
|
36
|
+
tags: [playground, validate, transform, jq, params]
|
|
37
|
+
|
|
38
|
+
requires:
|
|
39
|
+
blocks:
|
|
40
|
+
- playground.generate
|
|
41
|
+
- validate.schema
|
|
42
|
+
- transform.jq
|
|
43
|
+
|
|
44
|
+
params:
|
|
45
|
+
type: object
|
|
46
|
+
properties:
|
|
47
|
+
drift:
|
|
48
|
+
type: string
|
|
49
|
+
description: How the generated records depart from the shape the gate expects.
|
|
50
|
+
default: none
|
|
51
|
+
enum: [none, strings, missing, extra]
|
|
52
|
+
|
|
53
|
+
schemas:
|
|
54
|
+
reading-records:
|
|
55
|
+
$schema: https://json-schema.org/draft/2020-12/schema
|
|
56
|
+
title: A page of station readings
|
|
57
|
+
type: array
|
|
58
|
+
items:
|
|
59
|
+
type: object
|
|
60
|
+
# Closed, so the `extra` drift is refused as well as the other two.
|
|
61
|
+
additionalProperties: false
|
|
62
|
+
required: [station, value]
|
|
63
|
+
properties:
|
|
64
|
+
station:
|
|
65
|
+
type: string
|
|
66
|
+
value:
|
|
67
|
+
type: number
|
|
68
|
+
|
|
69
|
+
steps:
|
|
70
|
+
reading:
|
|
71
|
+
block: playground.generate
|
|
72
|
+
config:
|
|
73
|
+
rows: 3
|
|
74
|
+
seed: 11
|
|
75
|
+
drift: ${params.drift}
|
|
76
|
+
fields:
|
|
77
|
+
# `station` is the map's first field, so it is the one the `missing` drift leaves out.
|
|
78
|
+
station: license_plate
|
|
79
|
+
value:
|
|
80
|
+
provider: pyfloat
|
|
81
|
+
args:
|
|
82
|
+
min_value: 0
|
|
83
|
+
max_value: 40
|
|
84
|
+
right_digits: 1
|
|
85
|
+
|
|
86
|
+
gate:
|
|
87
|
+
block: validate.schema
|
|
88
|
+
depends_on: [reading]
|
|
89
|
+
config:
|
|
90
|
+
input: ${steps.reading.output.records}
|
|
91
|
+
schema: reading-records
|
|
92
|
+
|
|
93
|
+
report:
|
|
94
|
+
block: transform.jq
|
|
95
|
+
depends_on: [gate]
|
|
96
|
+
config:
|
|
97
|
+
input: ${steps.gate.output.value}
|
|
98
|
+
program: '{checked: length}'
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# A fan-out with something real to walk, and an output large enough to leave the database.
|
|
2
|
+
#
|
|
3
|
+
# Two things a document usually has to contrive, both knobs here:
|
|
4
|
+
#
|
|
5
|
+
# page / size the node holds `rows` records and hands back one page of them, saying how
|
|
6
|
+
# many pages there are, so a fan-out walks a page instead of a list somebody
|
|
7
|
+
# typed into the file.
|
|
8
|
+
# payload filler of a chosen size beside the records. An output at or under
|
|
9
|
+
# `inline_artifact_max` (16KB by default) is stored inline in the database,
|
|
10
|
+
# and one above it is written to storage and referenced -- so asking for 32KB
|
|
11
|
+
# crosses that threshold on purpose rather than by accident.
|
|
12
|
+
#
|
|
13
|
+
# Hop by hop:
|
|
14
|
+
#
|
|
15
|
+
# page_two records 11 to 20 of a hundred, and 32KB of filler beside them, which is what
|
|
16
|
+
# pushes this step's output out to storage.
|
|
17
|
+
# per_row one map.jq element per record on the page: a fan-out over a real page.
|
|
18
|
+
# totals what the page was, read off the node's own output rather than counted again.
|
|
19
|
+
#
|
|
20
|
+
# EXPECT THIS RUN TO END completed. Read `page_two`'s output in `dg runs show`: `pages: 10`,
|
|
21
|
+
# `page: 2`, ten records, and `payload_bytes: 32768`. The artifact it wrote is in the run's
|
|
22
|
+
# artifact list, because the output was too large to inline.
|
|
23
|
+
#
|
|
24
|
+
# To change it: -p payload=1kb keeps the output inline, so the same document shows both sides
|
|
25
|
+
# of the threshold.
|
|
26
|
+
#
|
|
27
|
+
# dg run --local examples/playground/a-page-at-a-time.yaml
|
|
28
|
+
# dg run --local examples/playground/a-page-at-a-time.yaml -p payload=1kb
|
|
29
|
+
|
|
30
|
+
format: dirigent/v1
|
|
31
|
+
kind: pipeline
|
|
32
|
+
code: a-page-at-a-time
|
|
33
|
+
name: A page at a time, and an output over the threshold
|
|
34
|
+
description: |
|
|
35
|
+
One page of a generated hundred, walked element by element, with filler that pushes the
|
|
36
|
+
step's output past the inline limit and out to storage.
|
|
37
|
+
|
|
38
|
+
tags: [playground, transform, jq, map, fan-out, outputs]
|
|
39
|
+
|
|
40
|
+
requires:
|
|
41
|
+
blocks:
|
|
42
|
+
- playground.generate
|
|
43
|
+
- map.jq
|
|
44
|
+
- transform.jq
|
|
45
|
+
|
|
46
|
+
params:
|
|
47
|
+
type: object
|
|
48
|
+
properties:
|
|
49
|
+
page:
|
|
50
|
+
type: integer
|
|
51
|
+
description: Which page of the hundred records to fetch.
|
|
52
|
+
default: 2
|
|
53
|
+
minimum: 1
|
|
54
|
+
maximum: 10
|
|
55
|
+
payload:
|
|
56
|
+
type: string
|
|
57
|
+
description: How much filler to return beside the records; 32kb crosses the inline limit.
|
|
58
|
+
default: 32kb
|
|
59
|
+
|
|
60
|
+
steps:
|
|
61
|
+
page_two:
|
|
62
|
+
block: playground.generate
|
|
63
|
+
config:
|
|
64
|
+
rows: 100
|
|
65
|
+
size: 10
|
|
66
|
+
page: ${params.page}
|
|
67
|
+
seed: 5
|
|
68
|
+
payload: ${params.payload}
|
|
69
|
+
fields:
|
|
70
|
+
who: name
|
|
71
|
+
company: company
|
|
72
|
+
|
|
73
|
+
per_row:
|
|
74
|
+
block: map.jq
|
|
75
|
+
depends_on: [page_two]
|
|
76
|
+
config:
|
|
77
|
+
input: ${steps.page_two.output.records}
|
|
78
|
+
program: '{who: .who, at: .company}'
|
|
79
|
+
|
|
80
|
+
totals:
|
|
81
|
+
block: transform.jq
|
|
82
|
+
depends_on: [page_two, per_row]
|
|
83
|
+
config:
|
|
84
|
+
input:
|
|
85
|
+
page: ${steps.page_two.output.page}
|
|
86
|
+
pages: ${steps.page_two.output.pages}
|
|
87
|
+
rows: ${steps.page_two.output.rows}
|
|
88
|
+
payload_bytes: ${steps.page_two.output.payload_bytes}
|
|
89
|
+
mapped: ${steps.per_row.output.value}
|
|
90
|
+
program: '{page: .page, of: .pages, from: .rows, filler_bytes: .payload_bytes, mapped: (.mapped | length)}'
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# A document's first step, with nothing upstream and nothing to call.
|
|
2
|
+
#
|
|
3
|
+
# playground.generate is the node for a document that needs something to happen rather than
|
|
4
|
+
# something to call: no connection, no URL, no network. Its field map names a Faker provider
|
|
5
|
+
# per output field, so `who: name` fills `who` from Faker's `name` provider. Every provider
|
|
6
|
+
# the installed Faker has is reachable; `uv run faker` prints them all with a sample each,
|
|
7
|
+
# and `uv run faker -l no_NO` prints them for one locale.
|
|
8
|
+
#
|
|
9
|
+
# The seed is what makes an example verifiable: the same seed gives the same rows on every
|
|
10
|
+
# run, on every machine. Leave it out and the node draws one, and its output says which --
|
|
11
|
+
# so a surprising answer can still be reproduced by sending that number back.
|
|
12
|
+
#
|
|
13
|
+
# Hop by hop:
|
|
14
|
+
#
|
|
15
|
+
# people five rows of three fields, seeded, so the run is reproducible.
|
|
16
|
+
# shape a jq program over what came out, to show the rows are ordinary data.
|
|
17
|
+
#
|
|
18
|
+
# EXPECT THIS RUN TO END completed, at once. Read `people`'s output: `records` is the rows,
|
|
19
|
+
# and `seed`, `locale`, `rows` and `fields` beside them are the knobs that produced them.
|
|
20
|
+
#
|
|
21
|
+
# To change it: -p seed=99 for different rows, -p rows=50 for more of them, and
|
|
22
|
+
# -p locale=no_NO for Norwegian names and cities.
|
|
23
|
+
#
|
|
24
|
+
# dg run --local examples/playground/generated-rows.yaml
|
|
25
|
+
# dg run --local examples/playground/generated-rows.yaml -p locale=no_NO
|
|
26
|
+
|
|
27
|
+
format: dirigent/v1
|
|
28
|
+
kind: pipeline
|
|
29
|
+
code: generated-rows
|
|
30
|
+
name: Generated rows, from nothing
|
|
31
|
+
description: |
|
|
32
|
+
A first step that needs no input: a field map of Faker providers, a row count and a seed.
|
|
33
|
+
|
|
34
|
+
The same seed gives the same rows every run, which is what lets an example assert on them.
|
|
35
|
+
|
|
36
|
+
tags: [playground, transform, jq, params]
|
|
37
|
+
|
|
38
|
+
requires:
|
|
39
|
+
blocks:
|
|
40
|
+
- playground.generate
|
|
41
|
+
- transform.jq
|
|
42
|
+
|
|
43
|
+
params:
|
|
44
|
+
type: object
|
|
45
|
+
properties:
|
|
46
|
+
rows:
|
|
47
|
+
type: integer
|
|
48
|
+
description: How many records to generate.
|
|
49
|
+
default: 5
|
|
50
|
+
minimum: 1
|
|
51
|
+
maximum: 50
|
|
52
|
+
seed:
|
|
53
|
+
type: integer
|
|
54
|
+
description: The seed the records come from; the same seed gives the same records.
|
|
55
|
+
default: 42
|
|
56
|
+
locale:
|
|
57
|
+
type: string
|
|
58
|
+
description: The Faker locale the providers generate in.
|
|
59
|
+
default: en_US
|
|
60
|
+
enum: [en_US, no_NO, fr_FR, de_DE]
|
|
61
|
+
|
|
62
|
+
steps:
|
|
63
|
+
people:
|
|
64
|
+
block: playground.generate
|
|
65
|
+
config:
|
|
66
|
+
rows: ${params.rows}
|
|
67
|
+
seed: ${params.seed}
|
|
68
|
+
locale: ${params.locale}
|
|
69
|
+
# A provider name per field. The field names are ours; the provider names are Faker's.
|
|
70
|
+
fields:
|
|
71
|
+
who: name
|
|
72
|
+
where: city
|
|
73
|
+
when: date_this_decade
|
|
74
|
+
|
|
75
|
+
shape:
|
|
76
|
+
block: transform.jq
|
|
77
|
+
depends_on: [people]
|
|
78
|
+
config:
|
|
79
|
+
input: ${steps.people.output.records}
|
|
80
|
+
program: "{count: length, first: .[0].who, cities: [.[].where] | unique | length}"
|
dirigent_examples-0.19.0/src/dirigent_examples/shelves/playground/in-the-middle-of-a-flow.yaml
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# The node in the middle of a document, and at the end of it.
|
|
2
|
+
#
|
|
3
|
+
# The node takes an `input` the same way every transform does: a value written inline or
|
|
4
|
+
# referenced from an earlier step. What it does with one is decided by a single rule -- the
|
|
5
|
+
# input is the data, so it says how many records there are and `rows` is not consulted, and
|
|
6
|
+
# the field map adds columns to each element only when the document names one.
|
|
7
|
+
#
|
|
8
|
+
# an input and no `fields` the elements pass through unchanged
|
|
9
|
+
# an input and a `fields` map each element gains those generated columns
|
|
10
|
+
# no input at all the knobs generate the records, as in generated-rows.yaml
|
|
11
|
+
#
|
|
12
|
+
# Hop by hop:
|
|
13
|
+
#
|
|
14
|
+
# codes a plain list, standing in for whatever a real upstream step produced.
|
|
15
|
+
# enriched the node in the middle: three codes in, three enriched records out, each with
|
|
16
|
+
# a generated contact on it. `rows: 99` is written on purpose, to show that a
|
|
17
|
+
# supplied input wins and the output reports `rows: 3`.
|
|
18
|
+
# audited the node at the end: it takes the enriched records, adds nothing, and is the
|
|
19
|
+
# document's last step. A node is useful as a terminus because its output is
|
|
20
|
+
# the account of what happened -- the seed, the knobs, and the records.
|
|
21
|
+
#
|
|
22
|
+
# EXPECT THIS RUN TO END completed. Read `enriched`'s output: `rows: 3`, `input_rows: 3`, and
|
|
23
|
+
# the three codes with a name and an email added to each.
|
|
24
|
+
#
|
|
25
|
+
# dg run --local examples/playground/in-the-middle-of-a-flow.yaml
|
|
26
|
+
|
|
27
|
+
format: dirigent/v1
|
|
28
|
+
kind: pipeline
|
|
29
|
+
code: in-the-middle-of-a-flow
|
|
30
|
+
name: The node in the middle, and at the end
|
|
31
|
+
description: |
|
|
32
|
+
A list from upstream, enriched with generated columns, then handed to the node again as the
|
|
33
|
+
document's last step.
|
|
34
|
+
|
|
35
|
+
A supplied input decides how many records there are; `rows` is ignored, and the output says
|
|
36
|
+
so.
|
|
37
|
+
|
|
38
|
+
tags: [playground, references, conventions]
|
|
39
|
+
|
|
40
|
+
requires:
|
|
41
|
+
blocks:
|
|
42
|
+
- playground.generate
|
|
43
|
+
- value.const
|
|
44
|
+
|
|
45
|
+
steps:
|
|
46
|
+
codes:
|
|
47
|
+
block: value.const
|
|
48
|
+
config:
|
|
49
|
+
value:
|
|
50
|
+
- code: st-001
|
|
51
|
+
- code: st-002
|
|
52
|
+
- code: st-003
|
|
53
|
+
|
|
54
|
+
enriched:
|
|
55
|
+
block: playground.generate
|
|
56
|
+
depends_on: [codes]
|
|
57
|
+
config:
|
|
58
|
+
input: ${steps.codes.output.value}
|
|
59
|
+
# Ignored, because the input decides how many records there are. The output reports
|
|
60
|
+
# rows: 3, which is the number that actually came out.
|
|
61
|
+
rows: 99
|
|
62
|
+
seed: 3
|
|
63
|
+
fields:
|
|
64
|
+
contact: name
|
|
65
|
+
email: email
|
|
66
|
+
|
|
67
|
+
audited:
|
|
68
|
+
block: playground.generate
|
|
69
|
+
depends_on: [enriched]
|
|
70
|
+
config:
|
|
71
|
+
# No fields named, so the records pass through untouched and this step is an account of
|
|
72
|
+
# what it received rather than a change to it.
|
|
73
|
+
input: ${steps.enriched.output.records}
|
dirigent_examples-0.19.0/src/dirigent_examples/shelves/playground/retry-that-really-retries.yaml
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# A retry example that proves a retry, instead of staging one.
|
|
2
|
+
#
|
|
3
|
+
# A document teaching `retry:` used to need a remote endpoint that fails on cue, which no
|
|
4
|
+
# public service offers: the usual trick is an endpoint that always fails, so the reader sees
|
|
5
|
+
# a budget spent and never sees a recovery. `fail_until` closes that gap. The node reads the
|
|
6
|
+
# attempt number the engine hands it and fails while that number is inside the window, so the
|
|
7
|
+
# step really does fail twice and really does succeed on the third attempt.
|
|
8
|
+
#
|
|
9
|
+
# The failure is classified `transient`, which is what the engine retries. A `rejected`
|
|
10
|
+
# failure is refused another attempt however much budget is left, which is what
|
|
11
|
+
# ../patterns/retry-only-transient.yaml is about.
|
|
12
|
+
#
|
|
13
|
+
# Hop by hop:
|
|
14
|
+
#
|
|
15
|
+
# flaky fails attempts 1 and 2, succeeds on 3, and generates its rows on the way out.
|
|
16
|
+
# proof reads the attempt that finally worked, straight off the node's own output.
|
|
17
|
+
#
|
|
18
|
+
# EXPECT THIS RUN TO END completed, in about three seconds: one second of backoff, then two.
|
|
19
|
+
# Read `flaky` in `dg runs show`: three attempts, the last one successful, and `attempt: 3`
|
|
20
|
+
# on the output to say so in the data as well.
|
|
21
|
+
#
|
|
22
|
+
# To change it: -p fail_until=3 with the budget left at 3 and the step runs out of attempts,
|
|
23
|
+
# so the run fails -- which is the other half of what a budget means.
|
|
24
|
+
#
|
|
25
|
+
# dg run --local examples/playground/retry-that-really-retries.yaml
|
|
26
|
+
# dg run --local examples/playground/retry-that-really-retries.yaml -p fail_until=3 # fails
|
|
27
|
+
|
|
28
|
+
format: dirigent/v1
|
|
29
|
+
kind: pipeline
|
|
30
|
+
code: retry-that-really-retries
|
|
31
|
+
name: A retry that really retries
|
|
32
|
+
description: |
|
|
33
|
+
A step that fails its first two attempts and succeeds on the third, on purpose.
|
|
34
|
+
|
|
35
|
+
`fail_until` reads the engine's own attempt number, so the recovery is real rather than
|
|
36
|
+
described.
|
|
37
|
+
|
|
38
|
+
tags: [playground, transform, jq, retry, failure]
|
|
39
|
+
|
|
40
|
+
requires:
|
|
41
|
+
blocks:
|
|
42
|
+
- playground.generate
|
|
43
|
+
- transform.jq
|
|
44
|
+
|
|
45
|
+
params:
|
|
46
|
+
type: object
|
|
47
|
+
properties:
|
|
48
|
+
fail_until:
|
|
49
|
+
type: integer
|
|
50
|
+
description: How many attempts fail before one succeeds; 3 exhausts the budget below.
|
|
51
|
+
default: 2
|
|
52
|
+
minimum: 0
|
|
53
|
+
maximum: 4
|
|
54
|
+
|
|
55
|
+
steps:
|
|
56
|
+
flaky:
|
|
57
|
+
block: playground.generate
|
|
58
|
+
retry:
|
|
59
|
+
max_attempts: 3
|
|
60
|
+
backoff: 1s
|
|
61
|
+
multiplier: 2.0
|
|
62
|
+
max_backoff: 4s
|
|
63
|
+
# No jitter, so the timing above is the timing you see.
|
|
64
|
+
jitter: 0.0
|
|
65
|
+
config:
|
|
66
|
+
fail_until: ${params.fail_until}
|
|
67
|
+
rows: 3
|
|
68
|
+
seed: 7
|
|
69
|
+
fields:
|
|
70
|
+
who: name
|
|
71
|
+
|
|
72
|
+
proof:
|
|
73
|
+
block: transform.jq
|
|
74
|
+
depends_on: [flaky]
|
|
75
|
+
config:
|
|
76
|
+
input:
|
|
77
|
+
attempt: ${steps.flaky.output.attempt}
|
|
78
|
+
failed_before_it: ${steps.flaky.output.fail_until}
|
|
79
|
+
rows: ${steps.flaky.output.rows}
|
|
80
|
+
program: '{succeeded_on_attempt: .attempt, after_failures: .failed_before_it, rows: .rows}'
|
|
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.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/connections.yaml
RENAMED
|
File without changes
|
{dirigent_examples-0.18.4 → dirigent_examples-0.19.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.18.4 → dirigent_examples-0.19.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.18.4 → dirigent_examples-0.19.0}/src/dirigent_examples/shelves/git/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirigent_examples-0.18.4 → dirigent_examples-0.19.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
|