This page documents the changes in the Python implementation of NestedText. Changes to the NestedText language are shown in Language changes.
Latest development version¶
De-duplicating with the on_dup argument to
loads()now works well for error reporting with keymaps.
The sort_keys argument to
dumps() has changed.
When passing a call-back function to sort_keys, that call-back function
now has a second argument, parent_keys. In addition, the first argument
has changed. It is now a tuple with three members rather than two, with the
new and leading member being the mapped key rather than the original key.
Minor refinements and fixes.
Be aware that the new version of the on_dup parameter is not compatible with previous versions.
Add circular reference detection and reporting.
Deprecate trailing commas in inline lists and dictionaries.
Be aware that aspects of this version are not backward compatible.
Specifically, trailing commas are no longer supported in inline dictionaries
and lists. In addition,
[ ] now represents a list that contains an
empty string, whereas previously it represented an empty list.
Deprecate quoted keys.
Add multiline keys to replace quoted keys.
Add inline lists and dictionaries.
Move from renderers to converters in
dumps(). Both allow you to support arbitrary data types. With renderers you provide functions that are responsible for directly creating the text to be inserted in the NestedText output. This can be complicated and error prone. With converters you instead convert the object to a known NestedText data type (dict, list, string, …) and the dump function automatically formats it appropriately.
Move the test cases to a submodule.
When cloning the NestedText repository you should use the –recursive flag to get the official_tests submodule:
git clone --recursive https://github.com/KenKundert/nestedtext.git
When updating an existing repository, you need to initialize the submodule after doing a pull:
git submodule update --init --remote tests/official_tests
This only need be done once.
Treat CR LF, CR, or LF as a line break.
Always quote keys that start with a quote.
Quoted keys are now less restricted.
Be aware that this version is not fully backward compatible. Unlike
previous versions, this version allows you to restrict the type of the
return value of the
loads() functions, and the
default is ‘dict’. The previous behavior is still supported, but you
must explicitly specify top=’any’ as an argument.
This change results in a simpler return value from
loads() in most cases. This substantially reduces the chance of
coding errors. It was noticed that it was common to simply assume that
the top-level was a dictionary when writing code that used these
functions, which could result in unexpected errors when users
hand-create the input data. Specifying the return value eliminates this
type of error.
There is another small change that is not backward compatible. The source argument to these functions is now a keyword only argument.