Release Notes

High-level descriptions of point releases

0.0.599 - 31 March 2026

  • Config variables are parsed for braces-bracketed substitution text. A OS or env.json variable in the form "This is {who} variable" will be rendered as "This is my variable" if there is another variable who with the value "my".

  • transfer-mode configuration also follows the braces-bracketed interpolation on the transfer-to path, enabling destinations like sftp://{SFTP_SERVER}:{SFTP_PORT}/my/destination.

  • The new sql_in() function is a SQL column analog to the existing in() function. sql_in() enables live or cached presence tests against a column from a table in Postgres, MySQL, or Sqlite.

0.0.598 - 11 March 2026

Major changes

  • Support CsvPath-to-Parquet schemas and Parquet file output

  • Addition of a definition.json and README.md to named-files

  • Added a configuration to automatically trigger runs on file registration

  • Added a configuration to automatically use a default named-file path template for registrations

  • Update to both transfer-mode and the SFTP integration to allow sending any/all files generated in a run

  • Fix for a problem where delimiter and quotechar choices were not being applied to output files

  • Substantially improved validation error reporting, including:

    • Deduplication of similar errors

    • Improved descriptions

    • Providing more complete error information

    • Improving ID chains to better identify error sources within csvpaths

  • Fix for a problem where CsvPaths run methods would act on only the first file returned by a reference, rather than all results found by the reference.

  • Eight function improvements including the following new functions:

    • parquet() - a specialization of line() that uses its schema to create a parquet file of all matching data

    • sort() a stack var

    • slice() a stack var

    • percent_matching(header, value|stack)

    • matches() - the same capability to indicate matching lines as the onmatch qualifier, but in the form of a function suitable for use cases where a function test is needed

Winter 2025-2026 FlightPath - v1.1.87

  • Comprises: CsvPath 0.0.591, FlightPath Server 0.1.27, FlightPath Data 0.1.28

  • FlightPath changes:

    • Support for creating and editing JSONL

    • Support for editing CSV and JSON in grid view

    • New JSON text editing view

    • Edit JSONL as JSON

    • CSV and JSONL grid view editing, including copy-selected-to-new

    • Support for custom functions in FlightPath Data and FlightPath Server

    • Added use-delimiter and use-quotechar for FlightPath Data and FlightPath Server

    • Added a config dialog to compare and sync config between projects in Data and Server

    • Improved the env vars config dialog to act as a compare and sync, not just an upload, between projects in Data and Server

    • Changed to a fixed width font in the printouts tab for better table printouts

    • Many minor fixes and improvements

0.0.591 - 25 Jan 2026

  • Added jsonpath() function using jsonpath-ng

  • Dozens of minor fixes and improvements

0.0.581 - 11 Jan 2026

Major changes

When/do changes:

  • When/do operator right-hand sides now contribute to matching

  • When/do right-hand side now respects nocontrib

Custom functions changes:

  • External functions can be loaded from a file anywhere visible to the Python process

  • Functions loaded from different function.imports files within the same Python process do not collide

  • Multiple functions.imports will be loaded

  • FunctionFactory supports reloadeding imports files

Three new functions:

  • Added line_before() to compare current line header value to last line header value

  • Added remove() to drop one or more headers

  • Set headers manually using rename(@stack) or rename(“a”, “b”, “c”…)

Three qualifier changes:

  • Support for name qualifiers in error() that are visibile in error events. E.g. error.myname(“this is a msg”) outputs: 2025-12-08 00h42m40s-886915:temps.txt:1:Ⓜ️myname[1]: this is a msg

  • Added skipnone qualifier primarily for push(). With notnone on push() None is flagged as an error; whereas, in some cases we just want to not push Nones.

  • Support for the distinct qualifier in string(), integer(), decimal(), date(), datetime()

Other functions changes:

Added project and project_context args to the CsvPath __init__ in order to populate logger name fields.

0.0.576 - 7 dec 2025

Major changes

  • JSONL now available with all backends

  • External custom functions are found before internals, allowing overriding

  • 13 new CsvPath Validation Language functions. See the CLI functions look up for usage.

    • headers_stack(): returns the names of the current headers

    • clear(var|var-name): removes a variable

    • index_of(stack-var|stack-name, value): returns the int position of the value

    • track_any(): tracks typed values, optionally collecting values in a stack or summing them

    • roll(date|datetime, number, unit-name): returns a date/datetime that is N-units in the future or past

    • day(date): returns the date of the month as an int

    • month(date): returns the month of the year as an int

    • year(date): returns the year as an int

    • format_date(date|datetime, str): formats a date/datetime as a string

    • fingerprint(Optional[Header], ...): returns the hash of the line or the indicated header values

    • format(str-value, str-format): formats a value according to a Python string template

    • interpolate(str-value, str-format): formats a value within a longer string using Python formatting

    • xpath(xml-str, xpath-str): extracts a value from an XML document using an XPath expression

Fixes and Updates

  • 15 function updates:

    • Number of times reset_headers() has been called and on what lines tracked in variables

    • Wildcard max length in string() using none()

    • track(): added 3rd arg add or collect, essentially the same function as for track_any()

    • push() and get() now able to take both stack vars and stack var names.

    • get(x) creates and returns a dict var if the variable named x is not found

    • Added an optional default arg to get()

    • concat() able to take a stack var of values to concatinate

    • Apply regex() to all headers using the headers() function like: regex( headers(), /…/ )

    • size() now takes the notnone qualifier and either a stack var or name of a stack var

    • eq() accepts None-valued vars, as well as none()

  • Other minor user-facing changes

    • Removed function name limitations disallowing numbers, '_', and '.' after an inital alpha char.

    • Made an alias to header_names_mismatch for clarity.

    • Added ability for transfer mode to append, rather than overwrite, using a target path ending in +

Last updated