Skip to content
You're reading the docs for DRE 0.6 (v0.6.1). This page for 0.11

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.

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.

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.

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.

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/pdf and text/html for 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_wait and max_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.
  • 0.6.1: a long send shows how far it’s got. At a terminal, dre release and every per-row output in dre run show a bar with rows done, the measured speed, the rate: it’s capped at, and the time left; without one, a Progress line every 30 seconds (see Watching a long send). dre release shows its warnings as they happen.
  • document 1.0.1: an <img> of an SVG file (a logo) appears in the PDF. Run dre plugin update document to get it.