A powerful workflow engine implemented in pure Python
Full Changelog: https://github.com/sartography/SpiffWorkflow/compare/v2.0.1...v3.0.0
Full Changelog: https://github.com/sartography/SpiffWorkflow/compare/v2.0.1...v3.0.0
Full Changelog: https://github.com/sartography/SpiffWorkflow/compare/v2.0.1...v3.0.0rc2
Full Changelog: https://github.com/sartography/SpiffWorkflow/compare/v2.0.1...v3.0.0rc1
In this release of SpiffWorkflow
Full Changelog: https://github.com/sartography/SpiffWorkflow/compare/v2.0.0rc0...v3.0.0rc0
A quick update to the Readme file. Please see the v2.0.0 release notes for the full details on this latest code base.
We've done a lot of work over the last 8 months to the SpiffWorkflow library as we've developed SpiffArena, a general purpose workflow management system built on top of this library. This has resulted in a handful of new features. Our main focus was on making SpiffWorkflow more predictable, easier to use, and internally consistent.
Previous to 2.0, SpiffWorklow was a little weird about its states, performing the actual execution in the on_complete() hook. This was VERY confusing. Tasks now have a _run() command separate from state change hooks. The return value of the _run() command can be true (worked), false (failure), or None (not yet done). This opens the door for better overall state management at the moment it is most critical (when the task is actually executing). We also added new task state called "STARTED" that describes when a task was started, but hasn't finished yet, an oddly missing state in previous versions.
We refactored the way we handle events, making them more powerful and adaptable. Timer events are now parsed according to the ISO 8601 standard.
We refactored how Multi-instance tasks are handled internally, vastly simplifying their representation during execution and serialization. No more 'phantom gateways.'
SpiffWorkflow did not previously distinguish between a Call Activity and a SubProcess, but they handle Data Objects very differently. A SubProcess is now able to access its parent data objects, a Call Activity can not. We also wanted the ability to execute Call Activities independently of the parent process.
This work will continue in subsequent releases, but we have added support for Data Stores, and it is possible to provide your own implementations.
We added support for Inclusive Gateways.
We previously supported adding a pre-script or post-script to any task but there were a few lingering bugs that needed fixing.
We now support a new hit policy of "COLLECT" which allows you to match on an array of items. DMN support is still limited, but we are making headway. We would love to know if people are using these features.
We improved validation of BPMN and DMN Files to catch errors earlier.
There are some breaking changes in the new serializer, but it is much faster and more stable. We do attempt to upgrade your serialized workflows to the new format, but you will definitely encounter issues if you were using multi-instance tasks.
Make it easier to reference SpiffWorkflow library classes from your own code.
Added the ability to ask SpiffWorkflow some useful questions about a specification such as, "What call activities does this depend on?", "What messages does this process send and receive", and "What lanes exist on this workflow specification?"
Full Changelog: https://github.com/sartography/SpiffWorkflow/compare/v1.2.1...v2.0.0
We've done a lot of work over the last 8 months to the SpiffWorkflow library as we've developed SpiffArena, a general purpose workflow management system built on top of this library. This has resulted in just a handful of new features. Our main focus was on making SpiffWorkflow more predictable, easier to use, and internally consistent.
Previous to 2.0, SpiffWorklow was a little weird about its states, performing the actual execution in the on_complete() hook. This was VERY confusing. Tasks now have a _run() command separate from state change hooks. The return value of the _run() command can be true (worked), false (failure), or None (not yet done). This opens the door for better overall state management at the moment it is most critical (when the task is actually executing). We also added new task state called "STARTED" that describes when a task was started, but hasn't finished yet, an oddly missing state in previous versions.
We refactored the way we handle events, making them more powerful and adaptable. Timer events are now parsed according to the ISO 8601 standard.
We refactored how Multi-instance tasks are handled internally, vastly simplifying their representation during execution and serialization. No more 'phantom gateways.'
SpiffWorkflow did not previously distinguish between a Call Activity and a SubProcess, but they handle Data Objects very differently. A SubProcess is now able to access its parent data objects, a Call Activity can not. We also wanted the ability to execute Call Activities independently of the parent process.
This work will continue in subsequent releases, but we have added support for Data Stores, and it is possible to provide your own implementations.
We added support for Inclusive Gateways.
We previously supported adding a pre-script or post-script to any task but there were a few lingering bugs that needed fixing.
We now support a new hit policy of "COLLECT" which allows you to match on an array of items. DMN support is still limited, but we are making headway. We would love to know if people are using these features.
We improved validation of BPMN and DMN Files to catch errors earlier.
There are some breaking changes in the new serializer, but it is much faster and more stable. We do attempt to upgrade your serialized workflows to the new format, but you will definitely encounter issues if you were using multi-instance tasks.
Make it easier to reference SpiffWorkflow library classes from your own code.
Added the ability to ask SpiffWorkflow some useful questions about a specification such as, "What call activities does this depend on?", "What messages does this process send and receive", and "What lanes exist on this workflow specification?"
Full Changelog: https://github.com/sartography/SpiffWorkflow/compare/v1.2.1...v2.0.0
Full Changelog: https://github.com/sartography/SpiffWorkflow/compare/v1.2.0...v1.2.1
Note: there are some minor breaking changes in this release, please see "Minor Breaking Changes and their Fixes" below for how to fix them.
This Version of SpiffWorkflow adds support for Data Objects, Messages, and Service Tasks. These are powerful new tools for managing workflows as they grow in complexity. Details below.
This is also our first step towards a larger ecosystem. One that includes a customized Diagram Editor that is still under development, but available on GitHub and perfectly serviceable. You will need the editor to take full advantage of the new features mentioned above. A new project, code named SpiffArena is also under heavy development. SpiffArena will connect this SpiffWorkflow library to the new BPMN Editor and provide a complete Workflow Engine with a backend and frontend that can be configured to manage and execute a collection of your own BPMN diagrams. Keep an eye out for an initial release before the end of the year.
In addition to major new features, we've improved some existing core features. The Python Expression Engine is now easier to extend and modify for custom deployments, and SubProcesses have a far stronger and more consistent internal representation and are easier to control. We've also added the ability to unit test your script tasks - to make it much easier to write small python scripts to re-structure your data.
Finally, we undertook hours of effort to clean up the code base, so that imports are consistent, circular dependencies are removed, and code smells are eliminated. It is by no means perfect, but we are arcing in the right direction.
We now support Data Objects, providing powerful tools for controlling the scope and access of variables within a workflow. For an overview of how Data Objects work, please check out our article "Understanding BPMN Data Objects". Detailed information is also available in our ReadTheDocs page.
Communication between running workflow instances is a powerful tool as workflows become more complex. For a detailed overview of this topic, please check out our article "Understanding BPMN Messages"
Service Tasks are now supported, and offer an easy way for BPMN Developers to make calls to external APIs. Examples for working with this critical new tool will be documented in our ReadTheDocs page.
Still in heavy development is a custom BPMN Editor, which you can find on GitHub This new editor provides the tools that will make creating valid Service Tasks, Data Objects, and Messages possible. Many thanks to the BPMN.js community for this highly extensible diagramming library!
A Script Engine that is overall easier to understand and extend.
Added the ability to create, store, and execute assertions against Script Tasks. Allows you to define a Json data structure as input, and an expected Json data structure as output. So you can assert your script is producing exactly the right data.
Given the ability to overload classes, and mix-in properties, it could be difficult to look at a Task Spec's class to determine if it was a User Task or Script Task, etc... All Task Specs now have a spec_type attribute, containing a descriptive string of the type, expect to see "User Task", "Script Task", "Start Event" etc...
This Minor Release includes a few minor breaking changes that should be easy to correct. Please apply these fixes as appropriate
REPLACE 'from SpiffWorkflow import WorkflowException'
WITH 'from SpiffWorkflow.exceptions import WorkflowException'
REPLACE 'from SpiffWorkflow import TaskState'
WITH: 'from SpiffWorkflow.task import TaskState'
REPLACE: 'from SpiffWorkflow import Task'
WITH 'from SpiffWorkflow.task import Task'
REPLACE: user_task.state.name
WITH: TaskStateNames[user_task.state]
Full Changelog: PR
This push covers a major overhaul of our JSON serializer, which previously depended on using pickle making the json difficult to read and parse outside of Spiff and creating some potential security concerns.
IMPORTANT: If you have existing workflows stored as JSON you will need to migrate them to the new version, you can do this on the fly by following the Migration Instructions
Full Changelog: https://github.com/sartography/SpiffWorkflow/compare/v1.1.6...v1.1.7