dirigent-examples 0.17.3__tar.gz → 0.18.1__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.
Files changed (218) hide show
  1. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/PKG-INFO +3 -3
  2. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/pyproject.toml +3 -3
  3. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/pyproject.toml.orig +3 -3
  4. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/docker/docker-remote-daemon.yaml +3 -2
  5. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/README.md +1 -0
  6. dirigent_examples-0.18.1/src/dirigent_examples/shelves/patterns/importance-critical.yaml +108 -0
  7. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/references-cheat-sheet.yaml +7 -3
  8. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/README.md +1 -0
  9. dirigent_examples-0.18.1/src/dirigent_examples/shelves/recipes/storage-keep-past-the-run.yaml +116 -0
  10. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/LICENSE +0 -0
  11. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/README.md +0 -0
  12. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/__init__.py +0 -0
  13. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/py.typed +0 -0
  14. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/README.md +0 -0
  15. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/composition/README.md +0 -0
  16. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/composition/chained-instances.yaml +0 -0
  17. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/composition/composition-child.yaml +0 -0
  18. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/composition/composition-parent.yaml +0 -0
  19. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/connections.yaml +0 -0
  20. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/demo/README.md +0 -0
  21. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/demo/markdown-showcase.yaml +0 -0
  22. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/demo/params-showcase.yaml +0 -0
  23. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/demo/requires.yaml +0 -0
  24. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/demo/weekly-import-malawi.yaml +0 -0
  25. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/demo/weekly-import-nepal.yaml +0 -0
  26. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/docker/README.md +0 -0
  27. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/docker/docker-build-push.yaml +0 -0
  28. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/docker/docker-build-run.yaml +0 -0
  29. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/docker/docker-compose-database.yaml +0 -0
  30. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/docker/docker-compose-failing-up.yaml +0 -0
  31. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/docker/docker-compose-file.yaml +0 -0
  32. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/docker/docker-compose-profiles-env.yaml +0 -0
  33. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/docker/docker-compose-stack.yaml +0 -0
  34. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/docker/docker-hello.yaml +0 -0
  35. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/docker/docker-run-failing-teardown.yaml +0 -0
  36. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/docker/docker-ticker.yaml +0 -0
  37. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/execute/README.md +0 -0
  38. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/execute/long-log.yaml +0 -0
  39. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/failure/README.md +0 -0
  40. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/failure/error-handler.yaml +0 -0
  41. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/failure/optional-step.yaml +0 -0
  42. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/failure/retries.yaml +0 -0
  43. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/failure/retry-budget.yaml +0 -0
  44. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/failure/step-timeout.yaml +0 -0
  45. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/git/README.md +0 -0
  46. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/git/git-checkout-build.yaml +0 -0
  47. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/git/git-checkout-compose.yaml +0 -0
  48. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/git/git-checkout-public.yaml +0 -0
  49. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/graph/README.md +0 -0
  50. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/graph/deep-chain.yaml +0 -0
  51. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/graph/fan-in.yaml +0 -0
  52. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/graph/fan-out.yaml +0 -0
  53. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/graph/linear.yaml +0 -0
  54. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/graph/parallel-branches.yaml +0 -0
  55. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/graph/parallel-sleep.yaml +0 -0
  56. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/graph/skip-diamond.yaml +0 -0
  57. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/graph/wide-fan.yaml +0 -0
  58. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/hello-world.yaml +0 -0
  59. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/open-data/README.md +0 -0
  60. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/open-data/feeds-composition.yaml +0 -0
  61. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/open-data/gdacs-disaster-updates.yaml +0 -0
  62. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/open-data/github-releases-relay.yaml +0 -0
  63. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/open-data/hdx-dataset-watch.yaml +0 -0
  64. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/open-data/kobo-submissions-to-csv.yaml +0 -0
  65. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/open-data/nominatim-geocode-facilities.yaml +0 -0
  66. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/open-data/odk-central-submissions.yaml +0 -0
  67. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/open-data/open-meteo-weekly-report.yaml +0 -0
  68. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/open-data/overpass-health-facilities.yaml +0 -0
  69. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/open-data/usgs-earthquakes-alert.yaml +0 -0
  70. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/open-data/who-gho-indicators-to-parquet.yaml +0 -0
  71. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/open-data/wikidata-country-reference.yaml +0 -0
  72. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/open-data/world-bank-population-trend.yaml +0 -0
  73. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/concurrency-queue.yaml +0 -0
  74. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/concurrency-replace.yaml +0 -0
  75. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/concurrency-skip.yaml +0 -0
  76. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/connections-referenced-vs-carried.yaml +0 -0
  77. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/deadline-on-a-sensor.yaml +0 -0
  78. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/fan-out-continue.yaml +0 -0
  79. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/fan-out-fail-fast.yaml +0 -0
  80. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/fan-out-from-params.yaml +0 -0
  81. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/fan-out-item-wise.yaml +0 -0
  82. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/fan-out-literal-list.yaml +0 -0
  83. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/fan-out-nested-objects.yaml +0 -0
  84. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/fan-out-then-join.yaml +0 -0
  85. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/log-levels.yaml +0 -0
  86. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/outputs-inline-vs-storage.yaml +0 -0
  87. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/params-every-type.yaml +0 -0
  88. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/params-validation-refuses.yaml +0 -0
  89. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/pipeline-run-child.yaml +0 -0
  90. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/pipeline-run-fire-and-forget.yaml +0 -0
  91. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/pipeline-run-strict.yaml +0 -0
  92. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/pipeline-run-wait.yaml +0 -0
  93. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/pipeline-run-with-params.yaml +0 -0
  94. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/poll-cadence.yaml +0 -0
  95. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/priority-layered.yaml +0 -0
  96. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/retry-budget-exhausted.yaml +0 -0
  97. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/retry-exponential-backoff.yaml +0 -0
  98. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/retry-only-transient.yaml +0 -0
  99. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/retry-with-jitter.yaml +0 -0
  100. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/rule-all-done.yaml +0 -0
  101. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/rule-all-success.yaml +0 -0
  102. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/rule-always.yaml +0 -0
  103. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/rule-one-failed.yaml +0 -0
  104. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/schedule-at-once.yaml +0 -0
  105. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/schedule-cron-timezone.yaml +0 -0
  106. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/schedule-interval.yaml +0 -0
  107. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/schedule-window-half-open.yaml +0 -0
  108. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/sensor-http-ready.yaml +0 -0
  109. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/sensor-storage-exists.yaml +0 -0
  110. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/step-names-and-keys.yaml +0 -0
  111. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/timeout-fails-the-step.yaml +0 -0
  112. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/timeout-skips-the-step.yaml +0 -0
  113. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/webhook-mapping-nested-payload.yaml +0 -0
  114. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/patterns/webhook-signed.yaml +0 -0
  115. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/preview/s3-parquet-to-ingestion.yaml +0 -0
  116. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/python/README.md +0 -0
  117. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/python/apply_and_run.py +0 -0
  118. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/python/ci_gate.py +0 -0
  119. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/python/connections.py +0 -0
  120. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/python/error_handling.py +0 -0
  121. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/python/follow_logs.py +0 -0
  122. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/python/list_and_filter.py +0 -0
  123. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/queues/README.md +0 -0
  124. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/queues/kafka-consume-then-transform.yaml +0 -0
  125. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/queues/kafka-produce-then-consume.yaml +0 -0
  126. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/queues/rabbitmq-consume-ack-on-success.yaml +0 -0
  127. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/queues/report-to-kafka.yaml +0 -0
  128. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/queues/report-to-rabbitmq.yaml +0 -0
  129. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/csv-header-rules.yaml +0 -0
  130. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/csv-to-ndjson.yaml +0 -0
  131. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/etl-csv-clean-validate-parquet.yaml +0 -0
  132. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/filter-by-predicate.yaml +0 -0
  133. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/filter-then-map-then-reduce.yaml +0 -0
  134. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/http-fetch-validate-post.yaml +0 -0
  135. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/http-follow-redirects.yaml +0 -0
  136. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/http-get-with-query.yaml +0 -0
  137. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/http-headers-and-auth-connection.yaml +0 -0
  138. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/http-post-file-from-storage.yaml +0 -0
  139. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/http-post-json-echo.yaml +0 -0
  140. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/http-post-report.yaml +0 -0
  141. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/http-save-body-to-storage.yaml +0 -0
  142. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/http-success-status-list.yaml +0 -0
  143. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/http-timeout-override.yaml +0 -0
  144. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/jq-dedupe-by-key.yaml +0 -0
  145. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/jq-defaults-and-nulls.yaml +0 -0
  146. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/jq-group-by-and-sum.yaml +0 -0
  147. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/jq-join-two-lists.yaml +0 -0
  148. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/jq-long-to-wide.yaml +0 -0
  149. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/jq-nested-to-flat.yaml +0 -0
  150. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/jq-pivot-wide-to-long.yaml +0 -0
  151. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/jq-running-totals.yaml +0 -0
  152. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/jq-string-cleaning.yaml +0 -0
  153. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/jq-top-n.yaml +0 -0
  154. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/jq-validate-in-jq-vs-schema.yaml +0 -0
  155. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/jq-window-dates.yaml +0 -0
  156. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/json-to-csv-flattening.yaml +0 -0
  157. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/large-output-to-storage.yaml +0 -0
  158. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/map-enrich-with-lookup.yaml +0 -0
  159. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/ndjson-to-parquet.yaml +0 -0
  160. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/pagination-by-fan-out.yaml +0 -0
  161. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/parquet-round-trip-types.yaml +0 -0
  162. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/reconcile-two-sources.yaml +0 -0
  163. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/report-built-in.yaml +0 -0
  164. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/report-daily-digest.yaml +0 -0
  165. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/report-to-file.yaml +0 -0
  166. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/report-to-webhook.yaml +0 -0
  167. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/schema-carried.yaml +0 -0
  168. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/schema-formats.yaml +0 -0
  169. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/schema-referenced.yaml +0 -0
  170. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/schema-refuses-then-rule.yaml +0 -0
  171. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/storage-copy-dated-archive.yaml +0 -0
  172. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/storage-exists-gate.yaml +0 -0
  173. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/storage-manifest-of-a-fan-out.yaml +0 -0
  174. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/storage-write-then-read.yaml +0 -0
  175. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/webhook-post-hmac.yaml +0 -0
  176. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/recipes/webhook-post-summary.yaml +0 -0
  177. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/s3/README.md +0 -0
  178. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/s3/report-to-s3.yaml +0 -0
  179. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/s3/s3-copy-and-verify.yaml +0 -0
  180. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/s3/s3-csv-report.yaml +0 -0
  181. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/s3/s3-parquet-report.yaml +0 -0
  182. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/s3/s3-round-trip.yaml +0 -0
  183. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/schemas/README.md +0 -0
  184. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/schemas/echo-reading.json +0 -0
  185. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/schemas/ou-record.json +0 -0
  186. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/schemas/station-reading.json +0 -0
  187. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/sensors/README.md +0 -0
  188. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/sensors/sensor-gate.yaml +0 -0
  189. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/sensors/time-window.yaml +0 -0
  190. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/sql/README.md +0 -0
  191. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/sql/duckdb-parquet-to-report.yaml +0 -0
  192. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/sql/sql-postgres-readonly.yaml +0 -0
  193. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/sql/sql-query-to-storage.yaml +0 -0
  194. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/sql/sql-sqlite-roundtrip.yaml +0 -0
  195. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/sql/warehouse.sql +0 -0
  196. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/transform/README.md +0 -0
  197. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/transform/csv-report.yaml +0 -0
  198. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/transform/jq-filter-and-map.yaml +0 -0
  199. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/transform/jq-group-and-aggregate.yaml +0 -0
  200. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/transform/jq-join-two-sources.yaml +0 -0
  201. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/transform/jq-reshape.yaml +0 -0
  202. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/transform/jq-stream-through-storage.yaml +0 -0
  203. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/transform/ndjson-round-trip.yaml +0 -0
  204. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/transform/parquet-round-trip.yaml +0 -0
  205. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/transform/std-convert-fan-out.yaml +0 -0
  206. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/transform/xml-feed-to-ndjson.yaml +0 -0
  207. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/transform/yaml-config-to-json.yaml +0 -0
  208. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/triggers/README.md +0 -0
  209. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/triggers/at-one-time.yaml +0 -0
  210. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/triggers/cron-nightly.yaml +0 -0
  211. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/triggers/cron-windowed.yaml +0 -0
  212. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/triggers/document-nightly.yaml +0 -0
  213. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/triggers/interval-rolling.yaml +0 -0
  214. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/triggers/managed-and-manual.yaml +0 -0
  215. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/triggers/webhook-trigger.yaml +0 -0
  216. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/validate/README.md +0 -0
  217. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/src/dirigent_examples/shelves/validate/expects-a-shape.yaml +0 -0
  218. {dirigent_examples-0.17.3 → dirigent_examples-0.18.1}/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.17.3
3
+ Version: 0.18.1
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.17.3
10
- Requires-Dist: dirigent-plugin==0.17.3
9
+ Requires-Dist: dirigent-client==0.18.1
10
+ Requires-Dist: dirigent-plugin==0.18.1
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.17.3"
3
+ version = "0.18.1"
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.17.3",
15
- "dirigent-plugin==0.17.3",
14
+ "dirigent-client==0.18.1",
15
+ "dirigent-plugin==0.18.1",
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.17.3"
3
+ version = "0.18.1"
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.17.3",
16
- "dirigent-plugin==0.17.3",
15
+ "dirigent-client==0.18.1",
16
+ "dirigent-plugin==0.18.1",
17
17
  ]
18
18
 
19
19
  [project.entry-points."dirigent.plugins.v1"]
@@ -26,8 +26,9 @@
26
26
  # only as a 0600 file under the run's work directory that goes when the step leaves. A client
27
27
  # key for a docker daemon is a credential for root on whatever that daemon runs on.
28
28
  #
29
- # TO MAKE IT YOURS: point host at your own daemon. A daemon that needs no TLS -- an ssh://
30
- # host, or a unix socket on another path -- takes host alone and none of the three PEMs.
29
+ # TO MAKE IT YOURS: point host at your own daemon. The worker speaks tcp:// and unix://, and
30
+ # a daemon that needs no TLS -- a unix socket on another path -- takes host alone and none of
31
+ # the three PEMs.
31
32
 
32
33
  format: dirigent/v1
33
34
  kind: pipeline
@@ -117,6 +117,7 @@ local run is handed with `--also-apply examples/patterns/pipeline-run-child.yaml
117
117
  | [sensor-storage-exists.yaml](sensor-storage-exists.yaml) | A glob, a size floor, and a drop that actually lands | `succeeded` |
118
118
  | [log-levels.yaml](log-levels.yaml) | `--log-level PATTERN=LEVEL`, a run setting rather than a document one | `succeeded` |
119
119
  | [priority-layered.yaml](priority-layered.yaml) | `priority` on the document, on a schedule, and on one ad hoc run | `succeeded` |
120
+ | [importance-critical.yaml](importance-critical.yaml) | `importance` beside `priority`, and the alert rule that reads it | `succeeded` |
120
121
  | [connections-referenced-vs-carried.yaml](connections-referenced-vs-carried.yaml) | Named, carried, and absolute; needs `--connections` | `succeeded` |
121
122
 
122
123
  ## Running them
@@ -0,0 +1,108 @@
1
+ # How much a pipeline matters, which is a different question from how urgently it runs.
2
+ #
3
+ # A document carries TWO words that sound alike and are not:
4
+ #
5
+ # priority: low | normal | high when the claim takes this pipeline's attempts
6
+ # importance: routine | normal | critical how much it matters that this pipeline works
7
+ #
8
+ # They are deliberately spelled from different vocabularies so no one reads them as one
9
+ # scale. THIS PIPELINE IS BOTH: low priority and critical importance. It runs behind
10
+ # everything a person is waiting on, because it is a slow nightly reconciliation and nobody
11
+ # is watching it go. And when it fails, somebody is woken, because the ledger it writes is
12
+ # what the morning's payments are drawn from.
13
+ #
14
+ # WHO READS EACH ONE. `priority` is read by the claim, once per attempt, and it is pinned on
15
+ # the run at creation. `importance` is read by the alerting rules, when a run settles: a rule
16
+ # may name the LEAST importance a pipeline must carry before it fires.
17
+ #
18
+ # dg alerts rules create page-ops --event run_failed --importance critical
19
+ # dg alerts rules create log-all --event run_failed
20
+ #
21
+ # The first fires for this pipeline and for no lesser one. The second names no importance, so
22
+ # it fires for every pipeline -- this one included. PAGING ADDS TO THE LOG; it does not
23
+ # replace it, so a critical failure raises both and an ordinary one raises only the second.
24
+ #
25
+ # `dg alerts rules list` says the floor inside the scope cell -- "global, critical and above"
26
+ # -- rather than in a column that would be empty on almost every row.
27
+ #
28
+ # WHERE IT IS SAID. `dg pipeline show` prints it with the other document settings, the
29
+ # pipelines listing marks a critical pipeline beside its title, and a listing row carries it
30
+ # on the wire. A routine or normal pipeline wears no mark at all: almost every pipeline is
31
+ # one of those, and a word on every row would say nothing.
32
+ #
33
+ # Hop by hop:
34
+ #
35
+ # read the balances the day left behind.
36
+ # reconcile the arithmetic that either agrees or does not.
37
+ # ledger what the morning is drawn from, which is the reason for the word.
38
+ #
39
+ # EXPECT THIS RUN TO SUCCEED in about a second, with no network.
40
+ #
41
+ # dg run --local examples/patterns/importance-critical.yaml
42
+ # dg apply examples/patterns/importance-critical.yaml
43
+ # dg pipeline show importance-critical # importance: critical, with the rest
44
+ # dg alerts rules list # the floor, inside the scope cell
45
+
46
+ format: dirigent/v1
47
+ kind: pipeline
48
+ code: importance-critical
49
+ name: Slow to be claimed, loud when it breaks
50
+ description: |
51
+ `importance` is one word -- `routine`, `normal` or `critical` -- and it says how much this
52
+ pipeline matters, not when its work is claimed. `priority` says that, and the two are
53
+ independent: this document is `low` priority and `critical` importance at once.
54
+
55
+ An alert rule may name the least importance a pipeline must carry before it fires, so one
56
+ rule pages for the critical failures and another logs every failure there is.
57
+
58
+ tags: [patterns, transform, importance, alerting]
59
+
60
+ # Behind whatever somebody is waiting on: it is slow, and nobody is watching it run.
61
+ priority: low
62
+
63
+ # But the morning's payments are drawn from what it writes, so a failure is worth waking for.
64
+ importance: critical
65
+
66
+ requires:
67
+ blocks:
68
+ - transform.jq
69
+
70
+ params:
71
+ type: object
72
+ properties:
73
+ accounts:
74
+ type: array
75
+ description: The accounts the day's balances are reconciled over.
76
+ items:
77
+ type: string
78
+ default: [settlement, float, reserve]
79
+
80
+ steps:
81
+ read:
82
+ block: transform.jq
83
+ config:
84
+ input:
85
+ accounts: "${params.accounts}"
86
+ program: |
87
+ {balances: [.accounts[] | {account: ., opened: 1000, closed: 1000}]}
88
+
89
+ reconcile:
90
+ block: transform.jq
91
+ depends_on: [read]
92
+ # `transform.jq` answers with its result under `value`, so a later step reaches for that
93
+ # key rather than for the output as a whole.
94
+ config:
95
+ input: "${steps.read.output.value}"
96
+ program: |
97
+ {
98
+ checked: (.balances | length),
99
+ drift: [.balances[] | select(.opened != .closed) | .account],
100
+ }
101
+
102
+ ledger:
103
+ block: transform.jq
104
+ depends_on: [reconcile]
105
+ config:
106
+ input: "${steps.reconcile.output.value}"
107
+ program: |
108
+ {settled: (.drift | length == 0), accounts: .checked}
@@ -1,6 +1,6 @@
1
1
  # Every ${...} form the reference language allows, each used once, in one document.
2
2
  #
3
- # THERE ARE FOUR NAMESPACES AND NOTHING ELSE. No expressions, no arithmetic, no conditionals,
3
+ # THERE ARE FIVE NAMESPACES AND NOTHING ELSE. No expressions, no arithmetic, no conditionals,
4
4
  # no functions, no defaults, no coalescing. A reference names a value or it does not resolve.
5
5
  #
6
6
  # params.<name> a run parameter
@@ -17,6 +17,7 @@
17
17
  # run.scratch this run's own directory under the artifact root
18
18
  # run.window.start the start of the interval this run covers
19
19
  # run.window.end the end of it, exclusive
20
+ # artifacts the instance's storage root, which no run owns
20
21
  #
21
22
  # TWO RULES ABOUT WHAT A REFERENCE BECOMES:
22
23
  #
@@ -53,8 +54,8 @@ kind: pipeline
53
54
  code: references-cheat-sheet
54
55
  name: The whole reference language
55
56
  description: |
56
- Four namespaces -- `params`, `steps`, `item`, `run` -- and no expressions, conditionals or
57
- functions anywhere.
57
+ Five namespaces -- `params`, `steps`, `item`, `run`, `artifacts` -- and no expressions,
58
+ conditionals or functions anywhere.
58
59
 
59
60
  A whole reference resolves to the typed value; one inside a larger string interpolates as
60
61
  text; an unknown one is rejected rather than resolved to empty. Needs `--window`.
@@ -108,6 +109,9 @@ steps:
108
109
  # run: the two values every run has.
109
110
  run_id: "${run.id}"
110
111
  scratch: "${run.scratch}"
112
+ # artifacts: the storage root itself, which outlives every run written under it.
113
+ # ${run.scratch} is swept when the run is pruned; ${artifacts}/... is not.
114
+ artifacts: "${artifacts}"
111
115
  # run.window: only on a run that carries one. Half-open, so start is included and
112
116
  # end is not.
113
117
  window_start: "${run.window.start}"
@@ -82,6 +82,7 @@ and a parameter away in the others:
82
82
  | File | The question it answers |
83
83
  | --- | --- |
84
84
  | [storage-write-then-read.yaml](storage-write-then-read.yaml) | How do I park a payload in storage and pick it up again a step later? |
85
+ | [storage-keep-past-the-run.yaml](storage-keep-past-the-run.yaml) | How do I keep something past the run that wrote it, without naming a directory or a bucket? |
85
86
  | [storage-copy-dated-archive.yaml](storage-copy-dated-archive.yaml) | How do I keep a dated copy, and what should the key layout be? |
86
87
  | [storage-exists-gate.yaml](storage-exists-gate.yaml) | How do I wait for an object, and what stops me reading a half-written one? |
87
88
  | [large-output-to-storage.yaml](large-output-to-storage.yaml) | What happens to a payload past the inline threshold, and what should I do about it? |
@@ -0,0 +1,116 @@
1
+ # Fetch something and keep it, at a location the run does not own.
2
+ #
3
+ # In: a query the echo service reflects back.
4
+ # Out: the same body written twice -- once to the run's scratch, once to a kept location --
5
+ # and a summary naming both URIs side by side.
6
+ #
7
+ # TWO ANCHORS, TWO LIFETIMES. A document never names a directory or a bucket, only one of the
8
+ # two prefixes the engine resolves for it:
9
+ #
10
+ # ${run.scratch} this run's own prefix, <root>/runs/<run id>/... Retention sweeps it when
11
+ # the run is pruned, so it is where a working copy goes: a payload handed
12
+ # to the next step, a captured stream, anything nobody needs next month.
13
+ # ${artifacts} the instance's storage root itself. Retention deletes run prefixes and
14
+ # nothing else under it, so an object written here stays until somebody
15
+ # deletes it. This is where "fetch it and keep it" lands.
16
+ #
17
+ # Both resolve against whichever backend the instance is configured with -- a directory on a
18
+ # single node, a bucket where an s3 connection serves the scheme -- so the two steps below
19
+ # are the same document on either, and neither carries a path a second instance would have to
20
+ # rewrite. A URI naming the root directly cannot do that: file://kept/x.json reads `kept` as
21
+ # a host, file:///kept/x.json is an absolute path, and the backend refuses both for being
22
+ # outside its root.
23
+ #
24
+ # THE KEY IS STABLE, NOT DATED. ${params.name} is one name and a rerun overwrites it, which
25
+ # is what makes this the newest copy rather than a pile nobody prunes. Where a history is
26
+ # wanted instead, the key goes under a date -- storage-copy-dated-archive.yaml is that
27
+ # layout, and the same choice of prefix applies to it.
28
+ #
29
+ # WHAT --local DOES WITH IT. A plain --local run builds a throwaway instance and deletes it at
30
+ # the end, so the kept object outlives the run but not the instance. Give the run a root of
31
+ # its own and it is still there afterwards, and a second run finds the first run's copy:
32
+ #
33
+ # dg run --local --root ./.dirigent-local examples/recipes/storage-keep-past-the-run.yaml
34
+ # ls ./.dirigent-local/artifacts/kept
35
+ #
36
+ # To change it: point DIRIGENT_ARTIFACT_ROOT at s3://<bucket>/<prefix> and the kept object is
37
+ # an object in that bucket, with nothing in this document changed.
38
+ #
39
+ # dg run --local examples/recipes/storage-keep-past-the-run.yaml
40
+ # dg run --local examples/recipes/storage-keep-past-the-run.yaml -p name=stations
41
+
42
+ format: dirigent/v1
43
+ kind: pipeline
44
+ code: storage-keep-past-the-run
45
+ name: Something kept past its run
46
+ description: Fetch a body, write a working copy to the run's scratch and a kept copy under the artifact root, and read the kept one back.
47
+
48
+ tags: [recipes, http, storage, transform, starter]
49
+
50
+ requires:
51
+ blocks:
52
+ - http.request
53
+ - storage.write
54
+ - storage.read
55
+ - transform.jq
56
+
57
+ params:
58
+ type: object
59
+ properties:
60
+ name:
61
+ type: string
62
+ default: latest
63
+ description: The name the kept object carries; stable, so a rerun replaces it.
64
+ station:
65
+ type: string
66
+ default: st-1
67
+ description: A query value, echoed back inside the fetched body.
68
+
69
+ steps:
70
+ fetch:
71
+ block: http.request
72
+ config:
73
+ url: https://postman-echo.com/get
74
+ method: GET
75
+ query:
76
+ station: ${params.station}
77
+ max_response: 1mb
78
+ timeout: 30s
79
+
80
+ working:
81
+ block: storage.write
82
+ depends_on: [fetch]
83
+ config:
84
+ # The run's own prefix: gone when retention prunes the run.
85
+ target: ${run.scratch}/fetched.json
86
+ value: ${steps.fetch.output.body}
87
+
88
+ keep:
89
+ block: storage.write
90
+ depends_on: [fetch]
91
+ config:
92
+ # The root itself: nothing sweeps this, so the object is here until somebody removes it.
93
+ target: ${artifacts}/kept/${params.name}.json
94
+ value: ${steps.fetch.output.body}
95
+
96
+ back:
97
+ block: storage.read
98
+ depends_on: [keep]
99
+ config:
100
+ # Where the write said the object landed, not the same path typed twice.
101
+ source: ${steps.keep.output.uri}
102
+ max_size: 1mb
103
+
104
+ where:
105
+ block: transform.jq
106
+ depends_on: [working, back]
107
+ config:
108
+ input:
109
+ swept: ${steps.working.output.uri}
110
+ kept: ${steps.keep.output.uri}
111
+ station: ${steps.back.output.value.args.station}
112
+ program: |
113
+ {kept, swept, station,
114
+ # The run id is in one of the two URIs and not in the other, which is the whole
115
+ # difference between them.
116
+ kept_is_run_scoped: (.kept | contains("/runs/"))}