- *foreach* decorator
- big refactor of stepsrunner. the new module `pypyr.dsl` contains classes (for now, `Step`), that model the pypyr pipeline yaml Domain Specific Language. this made foreach easier.
- some cleanup on consistent error types - KeyNotInContextError rather than KeyError for all context key lookup errors.
- big refactor of format strings aka string interpolation.
- optimize: no more unnecessary dict unpacking and repacking by now using `format_map(context)` rather than `format(**context)`
- single format expression now functions akin to a dictionary path in xpath style. e.g a string formatting expression like `'{key1[0]}'` will fetch the first item in the list at `key` and keep the original type of that item *without converting it to string*. In this example, the format expression would return a list:
key1:
- ['list', 'here']
- 1
- format expressions like `{key1} literal text {key2}` will obviously still return type strings