Simple Entry Point PipeLines (seppl). Python library for parsing pipeline components with their own options.
**seppl** takes a very light-weight approach to avoid encroaching too much on
your code. If you want to, you can add some compatibility checks between the
pipeline components with some additional mixins.
However, the execution of the pipeline (and potentially moving data between
components) is left to you and your code.
Usage and examples can be found here:
`https://github.com/waikato-datamining/seppl <https://github.com/waikato-datamining/seppl>`__
Changelog
=========
0.2.20 (2025-07-15)
-------------------
- the `is_help_requested` method can now pinpoint whether global help or help for a specific
plugin was requested (requires supplying a list of valid handler names and whether to use
partial matching)
- the `args_to_objects` method now resolves the plugin name and throws an error if it is
flagged as unknown
0.2.19 (2025-07-10)
-------------------
- the write methods of `DirectStreamWriter` and `DirectBatchWriter` now have the additional
`as_bytes` parameter, to indicate whether whether to write as bytes or str
0.2.18 (2025-07-03)
-------------------
- formalized support for direct read from/write to file-like objects with the
`DirectReader`, `DirectStreamWriter`, `DirectBatchWriter` mixins
0.2.17 (2025-06-26)
-------------------
- replaced deprecated `pkg_resources` with `importlib.metadata`-based approach
(based on: https://packaging.python.org/en/latest/guides/creating-and-discovering-plugins/#using-package-metadata)
0.2.16 (2025-04-08)
-------------------
- filters and writers can be skipped now via the `--skip` flag, making it easy for external
scripts to enable/disable pipeline components
0.2.15 (2025-03-28)
-------------------
- added support to the `seppl.io.Splitter` class for keeping item/sample groups together via a `split_group`
regular expression
- backported helper methods for `seppl.io.Writer` classes for managing splitting
0.2.14 (2025-03-24)
-------------------
- added `resume_from` parameter to `seppl.io.locate_files` method which allows to skip all
files preceding this glob
0.2.13 (2025-03-14)
-------------------
- the `resolve_handler` and `split_args` methods now have the `partial` boolean
parameter which determines whether partial matches are accepted or not; off
by default as it can interfere with parameters from plugins
0.2.12 (2025-03-13)
-------------------
- moved placeholder functionality from `seppl` to `seppl.placeholders`
- `load_user_defined_placeholders` now ignores lines that start with #
0.2.11 (2025-03-13)
-------------------
- added support for placeholders, which can be expanded via the `Session` object
- plugins supporting placeholders should import the `PlaceholderSupporter` indicator
mixin for automatically adding help on placeholders to the help screen; plugins
that support placeholders based on the current input should import the
`InputBasedPlaceholderSupporter` indicator mixin
- placeholder-supporting plugins can use the `placeholder_list` method in their argparse options
- the `load_user_defined_placeholders` method allows incorporating custom placeholders for directories
0.2.10 (2025-02-11)
-------------------
- added alias support to the `ClassRegistry` class
- added method `is_alias(...)` and property `all_aliases` to the `Registry` and `ClassRegistry` classes
- extended the `enumerate_plugins` method to allow flagging of aliases (default: `*`)
0.2.9 (2025-01-24)
------------------
- added support for using partial handler/plugin names (as long as they are unique)
- added experimental support for aliases with `AliasSupporter` mixin
0.2.8 (2024-12-20)
------------------
- added `setuptools` as dependency
0.2.7 (2024-08-29)
------------------
- the `seppl.io.locate_files` method can support recursive globs now (default is no)
0.2.6 (2024-07-01)
------------------
- reworked the `execute` method, properly distinguishing between stream/batch mode now
0.2.5 (2024-06-18)
------------------
- the `seppl.io.locate_files` method can take a default glob now, which gets appended
to inputs that point to directories
0.2.4 (2024-05-06)
------------------
- reworked excluding of classes
0.2.3 (2024-05-03)
------------------
- `_determine_from_entry_points` method of `ClassListerRegistry` class now checks whether
there the attributes tuple has any elements (i.e., whether the optional `:function_name`
was provided)
- message `X records processed in total` now only output at the end
0.2.2 (2024-05-02)
------------------
- `ClassListerRegistry` now safely removes any excluded class listers before locating the classes
0.2.1 (2024-05-02)
------------------
- `ClassListerRegistry` now removes any excluded class listers before locating the classes
0.2.0 (2024-05-01)
------------------
- the `execute` method no longer counts `None` items returned by the reader
- added the `seppl.ClassListerRegistry` class that offers a more convenient way of
discovering classes via a function that returns a dictionary of superclasses and
the associated modules to inspect; with this approach only a single entry_point
has to be defined in `setup.py`, pointing to the class lister module/function
0.1.3 (2024-02-29)
------------------
- added the dummy type `AnyData` which is used by default in the `check_compatibility`
method for a *match all* (ie can be used for general purpose plugins)
0.1.2 (2024-02-22)
------------------
- added methods `escape_args` and `unescape_args` (and corresponding command-line
tools `seppl-escape` and `seppl-unescape`) for escaping/unescaping unicode
characters in command-lines to make them copyable across ssh sessions
0.1.1 (2024-02-07)
------------------
- `check_compatibility` method now also checks whether generated class is
subclass of accepted classes, to allow for broader `accepts()` methods
- `gcd` method now creates a copy of the integer ratio list before processing it
0.1.0 (2024-02-05)
------------------
- added basic support for meta-data: MetaDataHandler, get_metadata, add_metadata
- added support for splitting sequences using supplied (int) split ratios
- added session support: Session, SessionHandler
- added I/O super classes: Reader, Writer, StreamWriter, BatchWriter, Filter, MultiFilter
- added support for executing I/O pipelines: Reader, [Filter...], [Writer]
0.0.11 (2023-11-27)
-------------------
- the `DEFAULT` placeholder in the environment variable listing the modules now
gets expanded to the default modules, making it easier to specify modules
in derived projects
- added `excluded_modules` and `excluded_env_modules` to `Registry` class
initializer to allow user to specify modules (explicit list or list from env
variable) to be excluded from being registered; useful when outputting
help for derived modules that shouldn't output all the base plugins as well.
0.0.10 (2023-11-15)
-------------------
- the registry now inspects modules when environment modules are present even when
it already found plugins (eg default ones)
0.0.9 (2023-11-15)
------------------
- the registry now inspects modules when custom modules were supplied even when
it already found plugins (eg default ones)
0.0.8 (2023-11-10)
------------------
- suppressing help output for unknown args now
0.0.7 (2023-11-09)
------------------
- `Plugin.parse_args` now returns any unparsed arguments that were found
- the `args_to_objects` method now raises an Exception by default when
unknown arguments are encountered for a plugin (can be controlled with
the `allow_unknown_args` parameter)
0.0.6 (2023-10-11)
------------------
- enforcement of uniqueness is now checking whether the class names differ
before raising an exception.
0.0.5 (2023-10-10)
------------------
- added `OutputProducer` and `InputConsumer` mixins that can be use for checking
the compatibility between pipeline components using the `check_compatibility`
function.
0.0.4 (2023-10-09)
------------------
- added support for `dynamic` mode which only requires listing the superclass of a plugin
and the module in which to look for these plugins (slower, but more convenient)
0.0.3 (2023-10-05)
------------------
- added `generate_entry_points` helper method to easily generate the `entry_points` section
for plugins, rather than manually maintaining it
- added `generate_help` and `generate_plugin_usage` methods for generating documentation
for plugins
0.0.2 (2023-10-04)
------------------
- removed old, logging-related code from Plugin class
- added `args_to_objects` to quickly instantiate plugins from parsed arguments
- added example to README.md and example library (https://github.com/waikato-datamining/seppl-example)
0.0.1 (2023-09-28)
------------------
- initial release
Raw data
{
"_id": null,
"home_page": "https://github.com/waikato-datamining/seppl",
"name": "seppl",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": null,
"author": "Peter Reutemann",
"author_email": "fracpete@waikato.ac.nz",
"download_url": "https://files.pythonhosted.org/packages/f7/c1/f0a42d04ccc157f39965258a3d2ef188cb11145cff2c25c74001fe54192f/seppl-0.2.20.tar.gz",
"platform": null,
"description": "Simple Entry Point PipeLines (seppl). Python library for parsing pipeline components with their own options. \n\n**seppl** takes a very light-weight approach to avoid encroaching too much on\nyour code. If you want to, you can add some compatibility checks between the\npipeline components with some additional mixins.\nHowever, the execution of the pipeline (and potentially moving data between\ncomponents) is left to you and your code.\n\nUsage and examples can be found here:\n\n`https://github.com/waikato-datamining/seppl <https://github.com/waikato-datamining/seppl>`__\n\n\nChangelog\n=========\n\n0.2.20 (2025-07-15)\n-------------------\n\n- the `is_help_requested` method can now pinpoint whether global help or help for a specific\n plugin was requested (requires supplying a list of valid handler names and whether to use\n partial matching)\n- the `args_to_objects` method now resolves the plugin name and throws an error if it is\n flagged as unknown\n\n\n0.2.19 (2025-07-10)\n-------------------\n\n- the write methods of `DirectStreamWriter` and `DirectBatchWriter` now have the additional\n `as_bytes` parameter, to indicate whether whether to write as bytes or str\n\n\n0.2.18 (2025-07-03)\n-------------------\n\n- formalized support for direct read from/write to file-like objects with the\n `DirectReader`, `DirectStreamWriter`, `DirectBatchWriter` mixins\n\n\n0.2.17 (2025-06-26)\n-------------------\n\n- replaced deprecated `pkg_resources` with `importlib.metadata`-based approach\n (based on: https://packaging.python.org/en/latest/guides/creating-and-discovering-plugins/#using-package-metadata)\n\n\n0.2.16 (2025-04-08)\n-------------------\n\n- filters and writers can be skipped now via the `--skip` flag, making it easy for external\n scripts to enable/disable pipeline components\n\n\n0.2.15 (2025-03-28)\n-------------------\n\n- added support to the `seppl.io.Splitter` class for keeping item/sample groups together via a `split_group`\n regular expression\n- backported helper methods for `seppl.io.Writer` classes for managing splitting\n\n\n0.2.14 (2025-03-24)\n-------------------\n\n- added `resume_from` parameter to `seppl.io.locate_files` method which allows to skip all\n files preceding this glob\n\n\n0.2.13 (2025-03-14)\n-------------------\n\n- the `resolve_handler` and `split_args` methods now have the `partial` boolean\n parameter which determines whether partial matches are accepted or not; off\n by default as it can interfere with parameters from plugins\n\n\n0.2.12 (2025-03-13)\n-------------------\n\n- moved placeholder functionality from `seppl` to `seppl.placeholders`\n- `load_user_defined_placeholders` now ignores lines that start with #\n\n\n0.2.11 (2025-03-13)\n-------------------\n\n- added support for placeholders, which can be expanded via the `Session` object\n- plugins supporting placeholders should import the `PlaceholderSupporter` indicator\n mixin for automatically adding help on placeholders to the help screen; plugins\n that support placeholders based on the current input should import the\n `InputBasedPlaceholderSupporter` indicator mixin\n- placeholder-supporting plugins can use the `placeholder_list` method in their argparse options\n- the `load_user_defined_placeholders` method allows incorporating custom placeholders for directories\n\n\n0.2.10 (2025-02-11)\n-------------------\n\n- added alias support to the `ClassRegistry` class\n- added method `is_alias(...)` and property `all_aliases` to the `Registry` and `ClassRegistry` classes\n- extended the `enumerate_plugins` method to allow flagging of aliases (default: `*`)\n\n\n0.2.9 (2025-01-24)\n------------------\n\n- added support for using partial handler/plugin names (as long as they are unique)\n- added experimental support for aliases with `AliasSupporter` mixin\n\n\n0.2.8 (2024-12-20)\n------------------\n\n- added `setuptools` as dependency\n\n\n0.2.7 (2024-08-29)\n------------------\n\n- the `seppl.io.locate_files` method can support recursive globs now (default is no)\n\n\n0.2.6 (2024-07-01)\n------------------\n\n- reworked the `execute` method, properly distinguishing between stream/batch mode now\n\n\n0.2.5 (2024-06-18)\n------------------\n\n- the `seppl.io.locate_files` method can take a default glob now, which gets appended\n to inputs that point to directories\n\n\n0.2.4 (2024-05-06)\n------------------\n\n- reworked excluding of classes\n\n\n0.2.3 (2024-05-03)\n------------------\n\n- `_determine_from_entry_points` method of `ClassListerRegistry` class now checks whether\n there the attributes tuple has any elements (i.e., whether the optional `:function_name`\n was provided)\n- message `X records processed in total` now only output at the end\n\n\n0.2.2 (2024-05-02)\n------------------\n\n- `ClassListerRegistry` now safely removes any excluded class listers before locating the classes\n\n\n0.2.1 (2024-05-02)\n------------------\n\n- `ClassListerRegistry` now removes any excluded class listers before locating the classes\n\n\n0.2.0 (2024-05-01)\n------------------\n\n- the `execute` method no longer counts `None` items returned by the reader\n- added the `seppl.ClassListerRegistry` class that offers a more convenient way of\n discovering classes via a function that returns a dictionary of superclasses and\n the associated modules to inspect; with this approach only a single entry_point\n has to be defined in `setup.py`, pointing to the class lister module/function\n\n\n0.1.3 (2024-02-29)\n------------------\n\n- added the dummy type `AnyData` which is used by default in the `check_compatibility`\n method for a *match all* (ie can be used for general purpose plugins)\n\n\n0.1.2 (2024-02-22)\n------------------\n\n- added methods `escape_args` and `unescape_args` (and corresponding command-line\n tools `seppl-escape` and `seppl-unescape`) for escaping/unescaping unicode\n characters in command-lines to make them copyable across ssh sessions\n\n\n0.1.1 (2024-02-07)\n------------------\n\n- `check_compatibility` method now also checks whether generated class is\n subclass of accepted classes, to allow for broader `accepts()` methods\n- `gcd` method now creates a copy of the integer ratio list before processing it\n\n\n0.1.0 (2024-02-05)\n------------------\n\n- added basic support for meta-data: MetaDataHandler, get_metadata, add_metadata\n- added support for splitting sequences using supplied (int) split ratios\n- added session support: Session, SessionHandler\n- added I/O super classes: Reader, Writer, StreamWriter, BatchWriter, Filter, MultiFilter\n- added support for executing I/O pipelines: Reader, [Filter...], [Writer]\n\n\n0.0.11 (2023-11-27)\n-------------------\n\n- the `DEFAULT` placeholder in the environment variable listing the modules now\n gets expanded to the default modules, making it easier to specify modules\n in derived projects\n- added `excluded_modules` and `excluded_env_modules` to `Registry` class\n initializer to allow user to specify modules (explicit list or list from env\n variable) to be excluded from being registered; useful when outputting\n help for derived modules that shouldn't output all the base plugins as well.\n\n\n0.0.10 (2023-11-15)\n-------------------\n\n- the registry now inspects modules when environment modules are present even when\n it already found plugins (eg default ones)\n\n\n0.0.9 (2023-11-15)\n------------------\n\n- the registry now inspects modules when custom modules were supplied even when\n it already found plugins (eg default ones)\n\n\n0.0.8 (2023-11-10)\n------------------\n\n- suppressing help output for unknown args now\n\n\n0.0.7 (2023-11-09)\n------------------\n\n- `Plugin.parse_args` now returns any unparsed arguments that were found\n- the `args_to_objects` method now raises an Exception by default when\n unknown arguments are encountered for a plugin (can be controlled with\n the `allow_unknown_args` parameter)\n\n\n0.0.6 (2023-10-11)\n------------------\n\n- enforcement of uniqueness is now checking whether the class names differ\n before raising an exception.\n\n\n0.0.5 (2023-10-10)\n------------------\n\n- added `OutputProducer` and `InputConsumer` mixins that can be use for checking\n the compatibility between pipeline components using the `check_compatibility`\n function.\n\n\n0.0.4 (2023-10-09)\n------------------\n\n- added support for `dynamic` mode which only requires listing the superclass of a plugin\n and the module in which to look for these plugins (slower, but more convenient)\n\n\n0.0.3 (2023-10-05)\n------------------\n\n- added `generate_entry_points` helper method to easily generate the `entry_points` section\n for plugins, rather than manually maintaining it\n- added `generate_help` and `generate_plugin_usage` methods for generating documentation\n for plugins\n\n\n0.0.2 (2023-10-04)\n------------------\n\n- removed old, logging-related code from Plugin class\n- added `args_to_objects` to quickly instantiate plugins from parsed arguments\n- added example to README.md and example library (https://github.com/waikato-datamining/seppl-example)\n\n\n0.0.1 (2023-09-28)\n------------------\n\n- initial release\n\n",
"bugtrack_url": null,
"license": "MIT License",
"summary": "Python3 library for parsing pipeline components with their own options.",
"version": "0.2.20",
"project_urls": {
"Homepage": "https://github.com/waikato-datamining/seppl"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f7c1f0a42d04ccc157f39965258a3d2ef188cb11145cff2c25c74001fe54192f",
"md5": "778d96fc25a948b05a96989bf91fe3b7",
"sha256": "c1b950cde94fe83661ced95c374a089a3397b8b5f44b0f448477c13c11bcd452"
},
"downloads": -1,
"filename": "seppl-0.2.20.tar.gz",
"has_sig": false,
"md5_digest": "778d96fc25a948b05a96989bf91fe3b7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 33871,
"upload_time": "2025-07-15T02:54:15",
"upload_time_iso_8601": "2025-07-15T02:54:15.445416Z",
"url": "https://files.pythonhosted.org/packages/f7/c1/f0a42d04ccc157f39965258a3d2ef188cb11145cff2c25c74001fe54192f/seppl-0.2.20.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-15 02:54:15",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "waikato-datamining",
"github_project": "seppl",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "seppl"
}