pdml2flow version 5.0 was released. New key features are:
- Plugin interface version 2: cli integration
- 98% test coverage
- Python 3.6 support
pip is as simple as:
$ sudo pip install --upgrade pdml2flow
Plugin Interface Version 2
Before 5.0 plugins were configure with environment variables. Now, plugins are loaded and configured from the command line. In order to support multiple output sink all the flow writing logic was moved into plugin as well. Using
pdml2flow with the JSON output plugin:
$ pdml2flow +json '-h'
The argument after the plugin invocation is passed straight to the plugin. Which means that the
-h from the example above is passed to the JSON plugin. To support this, the plugin interface was changed. Now
__init__ will be passed all arguments (
*args) from the command line. In this case
[ '-h' ].
diff --git a/pdml2flow/plugin.py b/pdml2flow/plugin.py index db016a3..06f7425 100644 --- a/pdml2flow/plugin.py +++ b/pdml2flow/plugin.py @@ -1,7 +1,20 @@ # vim: set fenc=utf8 ts=4 sw=4 et : -class Plugin1(object): - """Version 1 plugin interface.""" +class Plugin2(object): # pragma: no cover + """Version 2 plugin interface.""" + + @staticmethod + def help(): + """Return a help string.""" + pass + + def __init__(self, *args): + """Called once during startup.""" + pass + + def __deinit__(self): + """Called once during shutdown.""" + pass def flow_new(self, flow, frame): """Called every time a new flow is opened."""
This change alone is not the reason for the interface bump. The true interface break comes from a change in the
flow class. Before 5.0 frames of the flow were accessible using a getter called
get_frames(). This was replaced with a more pythonic getter
frames. Example usage:
or as an alternative using a list:
flow.frames[['frame', 'time_relative', 'raw']]
Since all the output was moved into plugins,
pdml2json no longer made sense. This is why I replaced those tools with
pml2frame which supports the same plugin interface as
pdml2flow. This means
pml2frame +xml. And for
pdml2frame +json instead.