New in 0.6
DRE 0.6 makes branded documents and sends one per member, client or account, with a review step before anything goes out. It’s a minor release with nothing to change in existing projects: every new key is optional, and a project that doesn’t use them runs as before.
Documents: PDF and HTML
Section titled “Documents: PDF and HTML”The new document plugin 1.0.0 (formats html and pdf) fills a Jinja
HTML + CSS template with a report’s results and lays it out into a PDF in-process: no browser and
no conversion service. The template reads what a message reads (results.<query>, var(),
run.*, the number filters), plus date('d mmm yyyy'), table(results.<query>) and
row.fmt('column') for a column’s YAML format. Page size, margins, running headers and page
numbers go in CSS (@page); long tables repeat their header row on every page; fonts are bundled
(IBM Plex) or your own through @font-face, never the machine’s. Add document to
dependencies.yml.
A template is found by its file name: next to the report’s YAML, then in each parent folder,
then anywhere in the project where it’s unique. The same rule now finds an xlsx template.file;
a path with / still means a path from the project root, as before.
One output per row: for_each
Section titled “One output per row: for_each”Per-row outputs make one copy of an output for each row of a driver query:
a statement per member, an extract per client. The queries run once; each copy gets only its
row’s slice, and the driver row as each.* in templates and destination paths and addresses.
Failed rows are recorded and the rest carry on; --retry-failed <run id> redoes only those,
from the same saved results. --preview, --only-keys and --limit-rows let you test without
sending to everyone, and addresses are masked in logs and results.
Review before sending: hold and dre release
Section titled “Review before sending: hold and dre release”hold: true on a destination (or dre run --hold) renders everything and holds that delivery.
After review, dre release delivers the
held files byte for byte, refuses any that changed, and never sends one twice. It works for any
output.
When there’s no data: on_empty
Section titled “When there’s no data: on_empty”on_empty: continue | skip | fail on an output or a query says what happens when queries return
no rows, with a clear no-data line in every case. See
When there’s no data.
Delivery rate limits
Section titled “Delivery rate limits”rate: 100/minute (or /second, /hour) on a destination spaces its deliveries evenly, with an
optional burst:; --rate overrides it for one command. When a service says to slow down,
retry_wait and max_retry_wait set the waits between tries (see
Tries again).
dre run --from-results <dir>re-renders a report’s outputs from results saved with--output-json, with no query: the design loop for templates.run.date.yyyymm(202609), for monthly paths.- Email attachments and S3, GCS and Azure objects are labelled
application/pdfandtext/htmlfor those files. - Plugins: email 1.3.0, slack 1.3.0, teams and google_chat 1.0.0-rc.3, object_store 1.2.0,
sftp 1.3.0, ftp 1.2.0 and postgres 1.4.0 take
retry_waitandmax_retry_wait; databricks 1.3.1, clickhouse 1.0.2, bigquery and snowflake 1.0.0-alpha.3 update their dependencies.dre plugin update <package>picks them up.
Fixes and later additions
Section titled “Fixes and later additions”- 0.6.1: a long send shows how far it’s got. At a terminal,
dre releaseand every per-row output indre runshow a bar with rows done, the measured speed, therate:it’s capped at, and the time left; without one, aProgressline every 30 seconds (see Watching a long send).dre releaseshows its warnings as they happen. - document 1.0.1: an
<img>of an SVG file (a logo) appears in the PDF. Rundre plugin update documentto get it.