A powerful workflow engine implemented in pure Python

Overview

Spiff Workflow

Build Status Coverage Status Code Climate Documentation Status

Summary

Spiff Workflow is a workflow engine implemented in pure Python. It is based on the excellent work of the Workflow Patterns initiative.

Do you need commercial support?

Spiff Workflow is supported by Procedure 8. Get in touch if you need anything!

Main design goals

  • Spiff Workflow aims to directly support as many of the patterns of workflowpatterns.com as possible.
  • Spiff Workflow uses unit testing as much as possible.
  • Spiff Workflow provides a clean Python API.
  • Spiff Workflow allows for mapping patterns into workflow elements that are easy to understand for non-technical users in a workflow GUI editor.
  • Spiff Workflow implements the best possible path prediction for workflows.

Spiff Workflow also provides a parser and workflow emulation layer that can be used to create executable Spiff Workflow specifications from Business Process Model and Notation (BPMN) documents.

Quick Intro

The process of using Spiff Workflow involves the following steps:

  1. Write a workflow specification. A specification may be written using XML (example), JSON, or Python (example).
  2. Run the workflow using the Python API. Example code for running the workflow:
from SpiffWorkflow.specs import WorkflowSpec
from SpiffWorkflow.serializer.prettyxml import XmlSerializer
from SpiffWorkflow import Workflow

# Load the workflow specification:
with open('my_workflow.xml') as fp:
    serializer = XmlSerializer()
    spec = WorkflowSpec.deserialize(serializer, fp.read())

# Create an instance of the workflow, according to the specification.
wf = Workflow(spec)

# Complete tasks as desired. It is the job of the workflow engine to
# guarantee a consistent state of the workflow.
wf.complete_task_from_id(...)

# Of course, you can also persist the workflow instance:
xml = wf.serialize(XmlSerializer, 'workflow_state.xml')

Documentation

Full documentation is here:

http://spiffworkflow.readthedocs.io/en/latest/

Issues
  • BPMN engine documentation

    BPMN engine documentation

    I recently added a ton of documentation for most parts of SpiffWorkflow (and ported the module to Py3). The only missing part is documentation for the BPMN layer, which I am now trying to add.

    @matthewhampton can you help out with the following questions?:

    • What is the purpose of the BpmnWorkflow.accept_message() method?
    • Do you have a minimal example of how to run a BPMN workflow?
    • Why did you add BpmnWorkflow.do_engine_steps() in addition to the already inherited BpmnWorkflow.complete_all()? Is this actually needed?
    opened by knipknap 14
  • Memory Usage

    Memory Usage

    Hi. Thanks very much for maintaining this amazing library! I'm currently using SpiffWorkflow to generate logs for a somewhat big BPMN (~1.5 MB). Unfortunately, creating a Workflow from the spec uses way too much memory (exceeding 100 GB easily).

    I figured that the problem lies within the gateways, since every node with multiple children creates several distinct paths throughout the workflow (whilst also creating mulitple task instances of the same task-spec) creating a total of >10 bil. instances of tasks in just one Workflow.

    Now that I haven't understood the deepest of functionings in SpiffWorkflow: Is it necessary to create those distinct paths from a Gateway up until the end or is there a way to prevent this while maintaining the main functioning?

    Thanks you very much!

    opened by IAsmodai 12
  • Multi Instance Call Activities stopped working since 1.1.1

    Multi Instance Call Activities stopped working since 1.1.1

    Problem:

    Multi Instance Call Activities stopped working since Version 1.1.1.

    Reason:

    Class determination in method _handle_special_cases() works different than isinstance() so CallActivity can't be identified as subclass of SubWorkflowTask.

    Fix:

    In bpmn/specs/MultiInstanceTask.py:

    425c425
    <         classes = [BusinessRuleTask,ScriptTask,SubWorkflowTask,SubWorkflow]
    ---
    >         classes = [BusinessRuleTask,ScriptTask,SubWorkflowTask,SubWorkflow,CallActivity]
    
    opened by kaihasse 10
  • Make a release on PyPi

    Make a release on PyPi

    The latest release on PyPi was 0.3.0 in 2009. The code has changed a fair amount since then. It's time for a new version number - 1.0 maybe? - and a new release.

    opened by dee42 9
  • Initial support for BPMN escalation boundary event on CallActivity tasks

    Initial support for BPMN escalation boundary event on CallActivity tasks

    Escalation boundary events attached to CallActivity tasks will be activated if subworkflow embedded in CallActivity reaches any escalation end event node.

    Boundary events with and without escalation code filter are supported in both interrupting and non-interrupting variants.

    opened by demostenes 8
  • Task.is_descendant_of? can't deal with multiple parents

    Task.is_descendant_of? can't deal with multiple parents

    I've stumbled into this recently, where we rely on Task.is_descendant_of?, however we also support parallel tasks with a Merge. Tasks in Spiff only have one parent, which means that some of our use-cases fail to traverse back in the tree, because the multiple previous paths of a merge can't be traversed (only one).

    I'm working around it with a separate implementation that starts at the "possible parent", and traverses the task tree downwards.

    opened by HoneyryderChuck 7
  • 1.1.7 contains breaking changes

    1.1.7 contains breaking changes

    Hi 👋 I've tested the upgrade to teh latest version, and it seems that some variables were moved around, specifically TaskStates. The code in question breaks because it relies on available of constants when having tasks, so there's a lot of task.WAITING and the like.

    Would you reconsider reverting this? Even if we would redo the code, It seems a bit of overhead for no real gain, i.e. now I have to import TaskStates in order to access the state static variables.

    opened by HoneyryderChuck 6
  • A year of BPMN / DMN Enhancements

    A year of BPMN / DMN Enhancements

    I'm working on a project that hopes to use SpiffWorkflow to build out a multi-purpose tool for managing some complex workflow tasks for a university. We'd like to support the open source Camunda modeler for creating BPMN diagrams as well. I think this is general purpose enough to be of benefit to a wider community. I wanted to get this in front of you to see if these are additions you believe would be good for SpiffWorkflow, or if I should attempt to create a separate companion project.

    This initial effort is just adding in a basic form processor. But in the future I'd like to support the BMN notation for handing basic business rule definitions. Rather than author detailed documentation for the main project, I'd also like to build out that documentation here, and write tutorials on creating BPMN diagrams and using them to execute a workflow. Delve into serialization for storage and communication over an API, etc ....

    opened by danfunk 6
  • Any real world usage example I can use to inspire myself?

    Any real world usage example I can use to inspire myself?

    Hi,

    I've been taking a look at Spiffworkflow for a project I'm working on and it seems it could perfectly fit the bill, since I need to develop a workflow system where a process may have several steps, several people are involved in this process and have different permissions to execute certain steps, etc.

    However I'm having trouble finding real usages of this library, and how to bind each task to python code or functions (e.g. notify by email a user once a step has been completed), how to decide which person is allowed to execute a certain step on a workflow, etc. Is there any complex implementation I could see as a source of inspiration?

    Thank you and kind regards.

    opened by Rydra 6
  • Documentation issue

    Documentation issue

    Here http://spiffworkflow.readthedocs.io/en/latest/tutorial/index.html, in the json, the president task

    "president": {
                "class": "SpiffWorkflow.specs.ExclusiveChoice.ExclusiveChoice",
                "name": "president",
                "manual": true,
                "inputs": [
                    "general"
                ],
                "outputs": [
                    "workflow_aborted",
                    "nuclear_strike"
                ],
                "choice": null,
                "default_task_spec": "workflow_aborted",
                "cond_task_specs": [
                    [
                        [
                            "SpiffWorkflow.operators.Equal",
                            [
                                [
                                    "Attrib",
                                    "confirmation"
                                ],
                                [
                                    "value",
                                    "yes"
                                ]
                            ]
                        ],
                        "president"
                    ]
                ]
            }
    

    Here in the output task if the condition is true, president is given. I think it should be nuclear_strike.

    opened by junaidiiith 6
  • doc/tutorial/deserialize.py is failing

    doc/tutorial/deserialize.py is failing

    After doc/tutorial/deserialize.py was executed, I run deserialize.py

    Traceback (most recent call last): File "deserialize.py", line 8, in spec = WorkflowSpec.deserialize(serializer, workflow_json, 'nuclear.json') TypeError: deserialize() takes 3 positional arguments but 4 were given

    opened by tinck 6
  • DMN

    DMN "-" character is misinterpreted

    Blank fields are displayed with a "-" character in DMN tables. But if the user actually types a "-" into the field, our BPMN editor attempts to interpret it, and fails.

    opened by danfunk 0
  • Improved Error Handling and Error States

    Improved Error Handling and Error States

    Presently in Task.py on line 749 we mark a task as complete, BEFORE we try to execute it in some way (calling the on_complete_hook). This prevents us from handling exceptions and errors in a sensible way.

    This is a discussion ticket, we should brain storm a better way to handle failed executions, and assure we do not fail, and then leave ourselves in a state that prevents a rational recovery.

    To be clear - we don't have a case where this is presenting a problem, failures generally are handled properly, but something here doesn't feel safe or correct, and we'd like to refactor it, and assure a safe environment.

    opened by danfunk 0
  • Drop camunda attributes on Events

    Drop camunda attributes on Events

    Our core BPMN code currently references camunda attributes for some aspects of events. Specifically Expression and ResultVariable. We should not have direct dependencies on these attributes. We could add support for them through the CamundaParser, but no reference to the Camunda namespace should exist in the core BPMN classes and methods.

    We want to create and maintain the oppertunity to evolve our own definition of variable scopes and data handling that will strive to be more in line with the BPMN 2.0 standard, and when not defined there, as pythonic as possible, and in keeping with the scoping of variables that is inherent in python programming.

    opened by danfunk 0
  • Support Process Versioning

    Support Process Versioning

    What Happens

    When constructing a spec by adding multiple BPMN files with the same process id, but different version, BpmnParser raises ValidationException citing 'Duplicate process ID'

    Expectation

    The engine uses the previous process version for any active instances of those processes. The engine chooses the latest version of the process for any new instantiations of those processes.

    All versions of the process exists in the spec

    opened by jarradh 4
Releases(v1.1.7)
  • v1.1.7(May 20, 2022)

    What's Changed

    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

    • fix broken links by @essweine in https://github.com/sartography/SpiffWorkflow/pull/173
    • Enhancement/167 drop the pickles by @essweine in https://github.com/sartography/SpiffWorkflow/pull/174
    • Bug/serializer call activity issue by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/179
    • refactor: move TaskState object out of Task object by @a358003542 in https://github.com/sartography/SpiffWorkflow/pull/178
    • Enhancement/improve subprocess serialization by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/181

    New Contributors

    • @a358003542 made their first contribution in https://github.com/sartography/SpiffWorkflow/pull/178

    Full Changelog: https://github.com/sartography/SpiffWorkflow/compare/v1.1.6...v1.1.7

    Source code(tar.gz)
    Source code(zip)
  • v1.1.6(Mar 24, 2022)

    This is just a very quick release to fix an issue with 1.1.5 that could prevent people from deserializing their existing workflows.

    What's Changed

    • Error deserializing with v1.1.5 by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/172 Full Changelog: https://github.com/sartography/SpiffWorkflow/compare/v1.1.5...v1.1.6
    Source code(tar.gz)
    Source code(zip)
  • v1.1.5(Mar 18, 2022)

    Overview

    We've made some significant improvements to our documentation and heavily refactored our code around events. We made some minor performance improvements by reducing the size of our serialization (but we are in the midst of a much larger refactor of serialization with even larger payoffs). More details follow.

    What's Changed

    • DMN - pay attention to quotes when you see the '?' symbol. by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/154
    • More improvements to SubWorkflow / MultiInstance by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/155
    • Enhancement/improve bpmn event handling by @essweine in https://github.com/sartography/SpiffWorkflow/pull/156
    • Fix bug where deserialization failed when a sub-workflow had tasks with the same id as the parent workflow by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/160
    • Chore/performance by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/162
    • miscellaneous updates to events by @essweine in https://github.com/sartography/SpiffWorkflow/pull/163
    • Fix updateDotDict to not truncate last segment by @soby in https://github.com/sartography/SpiffWorkflow/pull/165
    • Refactoring the PythonScriptEngine signature methods for DMN: by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/166
    • If a sub-process occurs within a lane, the tasks within that sub-process should be aware that they occur within that lane. by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/168
    • Better Errors for Call Activities by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/169
    • Enhancement/documentation updates by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/170

    New Contributors

    • @soby made their first contribution in https://github.com/sartography/SpiffWorkflow/pull/165

    Full Changelog: https://github.com/sartography/SpiffWorkflow/compare/v1.1.3...v1.1.5

    Source code(tar.gz)
    Source code(zip)
  • v1.1.3(Jan 14, 2022)

  • v1.1.2(Jan 5, 2022)

    This release just updates the documentation, and gets PiPy and GitHub in sync. Please see Release 1.1.1 for additional release notes as these will occur on top of each other.

    Source code(tar.gz)
    Source code(zip)
  • 1.1.1(Jan 5, 2022)

    What's Changed

    • connect gateway start to matching conditions in transitions from exclusive gateways to multiinstance by @essweine in https://github.com/sartography/SpiffWorkflow/pull/141
    • improve error messages on missing processes by @essweine in https://github.com/sartography/SpiffWorkflow/pull/144
    • Replace absolute import self-references with relative imports by @jarradh in https://github.com/sartography/SpiffWorkflow/pull/147
    • looping back to an earlier point in the workflow is grossly inefficient by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/148
    • Enhancement/add transaction subprocesses by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/149

    New Contributors

    • @jarradh made their first contribution in https://github.com/sartography/SpiffWorkflow/pull/147

    Full Changelog: https://github.com/sartography/SpiffWorkflow/compare/1.1...1.1.1

    Source code(tar.gz)
    Source code(zip)
  • 1.1(Nov 3, 2021)

    Features and Improvements

    • Support for DMN v1.3
    • Better handling of timezone for timer events: dateparser.parse('in 10 minutes') now works
    • Script tasks now capture and make available the the script_format attribute if provided.

    Bug Fixes:

    • We should not fail to serialize if a function is included in a script task.
    • Script Engines were not consistent after deserialization. We now require you to pass the correct script engine into when deserializing, and guarantee this engine will be used throughout.
    • Improved the escalation for boundary events
    • User tasks were ordered by their position in the diagram, now script tasks are as well.
    • Some performance improvements for large workflows.
    • We no longer set an arbitrary default for exclusive gateways, and raise an exception if no default is defined, and not condition is met at runtime.

    What's Changed (auto generated)

    • Updated readme. by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/116
    • Add support for date instead of only datetime by @rgcalsaverini in https://github.com/sartography/SpiffWorkflow/pull/81
    • Fix of return type hint in workflow.py by @robocad in https://github.com/sartography/SpiffWorkflow/pull/100
    • Pull request 79 - fixes to Escalation Boundary Events by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/118
    • Initial support for BPMN escalation boundary event on CallActivity tasks by @demostenes in https://github.com/sartography/SpiffWorkflow/pull/79
    • Chore/sonarcloud by @ajlouie in https://github.com/sartography/SpiffWorkflow/pull/119
    • Removes coveralls. Replaces coveralls coverage badge with sonarcloud … by @ajlouie in https://github.com/sartography/SpiffWorkflow/pull/120
    • Replaces mutable default arguments by @ajlouie in https://github.com/sartography/SpiffWorkflow/pull/122
    • Tweaks the xpath so it can handle the DMN v1.3 XML that Camunda's edi… by @ajlouie in https://github.com/sartography/SpiffWorkflow/pull/123
    • Fix #425 by @w4kpm in https://github.com/sartography/SpiffWorkflow/pull/124
    • Small typo in documentation by @afjlambert in https://github.com/sartography/SpiffWorkflow/pull/126
    • One Script Engine to rule them all by @danfunk in https://github.com/sartography/SpiffWorkflow/pull/130
    • Calculate script task position in its parser by @Leashys in https://github.com/sartography/SpiffWorkflow/pull/133
    • Add task-mapping attribute to workflow to make sure workflow will not… by @JsZero in https://github.com/sartography/SpiffWorkflow/pull/135
    • Bug/137 no default exclusive gateway by @essweine in https://github.com/sartography/SpiffWorkflow/pull/139

    New Contributors

    • @rgcalsaverini made their first contribution in https://github.com/sartography/SpiffWorkflow/pull/81
    • @robocad made their first contribution in https://github.com/sartography/SpiffWorkflow/pull/100
    • @ajlouie made their first contribution in https://github.com/sartography/SpiffWorkflow/pull/119
    • @w4kpm made their first contribution in https://github.com/sartography/SpiffWorkflow/pull/124
    • @afjlambert made their first contribution in https://github.com/sartography/SpiffWorkflow/pull/126
    • @Leashys made their first contribution in https://github.com/sartography/SpiffWorkflow/pull/133
    • @JsZero made their first contribution in https://github.com/sartography/SpiffWorkflow/pull/135
    • @essweine made their first contribution in https://github.com/sartography/SpiffWorkflow/pull/139

    Full Changelog: https://github.com/sartography/SpiffWorkflow/compare/1.0...1.1

    Source code(tar.gz)
    Source code(zip)
  • 1.0(Jul 15, 2021)

    Spiff Workflow - Release Notes for Version 1.0

    After a year of extensive development to get SpiffWorkflow to support our effort at building a BPMN based workflow application, Sartography (our software development company) is pleased to announce an official release of Version 1.0 of SpiffWorkflow.

    That's an auspicious jump from the previous 0.6, but we think it merits the version. We have used Spiff Workflow in roughly the present state for several months in a production environment supporting real users. We believe it is ready for this 1.0 moniker. We look forward to the rapid release of many subsequent versions over the coming years.

    Here is a list of major enhancements:

    1. Preserved Features - Most of the previously-existing tests were maintained, so these changes will hopefully still support any existing users. We’ve kept dependencies on external dependencies very low. And where we added things like Box and Levenshtein along the way, we pulled them back out, replacing them with internal implementations.

    2. DMN Support - While it is not eye-watering perfect, we have a baseline of support for DMN processing that is fully integrated into the existing Execution Engine, so your DMN rules can be applied in the same language as your preferred execution language for BPMN expressions.

    3. Forms - We’ve added support for Camunda-specific web forms, which are currently parsed and returned as JSON data structures. We’ve used this to generate Formly (an NPM package for Angular) forms for web pages and it works great, but we hope to extract it in the future and pass this through directly, to make SpiffWorkflow more general-purpose and allow just about any additional complex data to accompany a user task.

    4. BPMN Additional Support - We made nearly innumerable enhancements to BPMN support. These, at a glance, include:

      • Full Serialization - A running BPMN/DMN-based workflow can now be fully serialized into JSON and restored to its original state from that JSON representation.
      • Multi-Instance Tasks - We can now handle multi-instance tasks of nearly any variety, including both Parallel and Sequential variants, as they occur in User Tasks, Script Tasks, or even Sub-Processes.
      • Pools & Lanes - We added support for BPMN pools and lanes which we used to successfully implement some complex approval processes in a production system.
      • Pluggable Script Engine - While our focus was on building a Python Script Engine, we added support for a broad set of FEEL expressions in the BPMN specification. We didn’t end up using them in production, as crossing languages proved to be an enormous headache for everyone, and the ability to write in Python for quick DMN expressions, and also complex scripts tasks proved too useful to deny. We assured that the same script engine is used throughout, and that it can be replaced by an alternate implementation by the calling application.
      • Visual Ordering of Tasks - When you have a series of parallel tasks that are aligned vertically in the diagram, that order is preserved in execution and in navigation data.
      • Sub-Workflows and Call Activities - We spent a lot of time improving the use of sub-workflows and call activities to assure it is easy to compose complex multi-file workflows that behave consistently and as expected.
      • Timer Events - Added ISO duration parsing for fine grained control over timed events.
      • Signals and Messages - Support for BPMN signals and listeners and adding the ability for the calling application to issue events - such as the “Cancel” event, so that workflows that are forced to stop can react before being terminated.
      • Boundary Events - For timed events, and messages, added support for BPMN events that alter the flow based on external events, with support for both interrupting and non-interrupting variants.
      • Looping Back - As BPMN diagrams can easily loop back to previous tasks, we put effort into testing this in SpiffWorkflow and resolving a number of performance and serialization issues related to the natural looping nature of BPMN.
    5. Improved Logging and Better Errors - We spent a lot of time improving and standardizing error messages in Spiff so it is easier to tell what is going on where, when and why, particularly as you attempt to debug issues that occur in Script Tasks. We can even tell you the line in the script that failed, and offer “did you mean…” suggestions through a simple implementation of the Levenshtein distance algorithm. We also added the ability to halt a workflow at a specific engine_step, which can be useful if you want to run tests of your workflow, but have it stop at a specific moment.

    6. Dot Notation - Our one major departure from Python syntax, we added the ability to use dot notation when referencing values deep within the Task Data, we found that using MyData.key was easier than MyData[“key”] for many areas in BPMN and DMN. Resets - We added the ability to reset the workflow to any previously completed task, and resume work from that point.

    7. Navigation - We created a rich and complex navigation generator that is capable of describing any point in the tree of tasks. We found we desperately needed a way to tell where we were when parsing complex diagrams. While it didn’t prove terribly useful in the user interface so far, it’s a ludicrously-robust tool for debugging. At any moment, you can now print out the full data structure in a meaningful, visual way directly from the command line.

    8. Tests - We added hundreds of tests, many of which load up example BPMN diagrams and clearly show expectations of how Spiff should behave in a large array of situations and edge cases.

    9. Performance Improvements - As we used this in production we found numerous performance issues, which we have tried to address - mostly related to serializing and deserializing the workflows which happens a lot in a stateless web-based architecture. We added and iteratively refined some tools for gathering and reporting performance metrics, opening these up to the larger application, so you can debug and get a consistent log and tell if it is your app that is slow, or if things are slow within Spiff.

    10. My God, It’s Full of Edge Cases - Some 40% of our commits are related to edge cases we encountered as we developed dozens of real-world BPMN/DMN-based workflows and fixing issues as we attempted to use complex BPMN elements together.

    Dropping Support for Python 2:

    We did need to remove a few items from Spiff along the way, the most notable is a drop in support for Python 2. Python 3.6, 3.7 and 3.8 are all supported and a part of our automated test suite.

    Special Thanks:

    Sartography (Sartography.com) undertook these efforts to support the development of a custom web application for the University of Virginia. We would like to thank UVA for their support and trust in allowing us to take on the mammoth task of building a general-purpose workflows system, and contributing something back to the open source community.

    Bruce Silver, the author of BPMN Quick and Easy Using Method and Style, whose work we referenced extensively as we made implementation decisions and educated ourselves on the BPMN and DMN standards.

    Samuel Abels (@knipknap) for keeping SpiffWorkflow alive for the past few years, and offering us commit access to make these contributions, and Matthew Hampton for kicking this project off and giving us sound footing on which to build.

    Camunda, for whom, without their open source Modeler and the BPMN.js library, we would not have the tools to effectively build out our models, embed an editor in our application, and pull this mad mess together.

    Kelly McDonald (@w4kpm) who dove deeper into the core of SpiffWorkflow than anyone else, and was instrumental in helping us get some of these major enhancements working correctly.

    We would like to thank Denny Weinberg for his early contributions to DMN support, which we used as a baseline and then extended.

    What is coming:

    Clean-up: Moving forward, we want to drop direct support and parsing of Camunda-specific elements. We would like to pass non-BPMN parsing on to the calling application, allowing users to build plugin-based architectures that can address domain-specific objectives.

    Cleaner Serialization: While our serialization and deserialization is rigorously tested, the JSON it produces is not easy to understand on its own. We would love to take time to clean this up, and make it easier to parse and extract data from a running workflow’s JSON representation.

    Other Projects:

    We are also working on a layered system architecture that will make the development of web-based applications for authoring and running BPMN-based workflows easier to accomplish. We’ve built a full REST based API on top of SpiffWorkflow for our pilot application, but it isn’t general enough to release. We’ve also created Javascript applications for both editing and running workflows specifications in a browser, but these still need to be generalized.

    Our Dream:

    A full stack of interconnected open source tools is the direction we are headed, along with a plug-in based architecture that will work seamlessly across that stack. We believe such grand ambitions are possible. Our ultimate ambition is the development of a Platform as a Service Business that facilitates the use of an increasingly standards compliant suite of powerful open source libraries and components.

    Source code(tar.gz)
    Source code(zip)
Owner
Samuel
Samuel
Python job scheduling for humans.

schedule Python job scheduling for humans. Run Python functions (or any other callable) periodically using a friendly syntax. A simple to use API for

Dan Bader 9.7k Jun 18, 2022
Python-Repeated-Timer is an open-source & highly performing timer using only standard-libraries.

Python Repeated Timer Python-Repeated-Timer is an open-source & highly performing timer using only standard-libraries.

TACKHYUN JUNG 2 Apr 10, 2022
A Python concurrency scheduling library, compatible with asyncio and trio.

aiometer aiometer is a Python 3.6+ concurrency scheduling library compatible with asyncio and trio and inspired by Trimeter. It makes it easier to exe

Florimond Manca 162 Jun 15, 2022
Automate SQL Jobs Monitoring with python

Automate_SQLJobsMonitoring_python Using python 3rd party modules we can automate

Aejaz Ayaz 1 Dec 27, 2021
Cylc: a workflow engine for cycling systems

Cylc: a workflow engine for cycling systems. Repository master branch: core meta-scheduler component of cylc-8 (in development); Repository 7.8.x branch: full cylc-7 system.

The Cylc Workflow Engine 189 Jun 7, 2022
Pure-python-server - A blogging platform written in pure python for developer to share their coding knowledge

Pure Python web server - PyProject A blogging platform written in pure python (n

Srikar Koushik Satya Viswanadha 9 Apr 28, 2022
pure-predict: Machine learning prediction in pure Python

pure-predict speeds up and slims down machine learning prediction applications. It is a foundational tool for serverless inference or small batch prediction with popular machine learning frameworks like scikit-learn and fasttext. It implements the predict methods of these frameworks in pure Python.

Ibotta 63 Jun 17, 2022
Pure Python bindings for the pure C++11/OpenCL Qrack quantum computer simulator library

pyqrack Pure Python bindings for the pure C++11/OpenCL Qrack quantum computer simulator library (PyQrack is just pure Qrack.) IMPORTANT: You must buil

vm6502q 6 May 18, 2022
LightCSV - This CSV reader is implemented in just pure Python.

LightCSV Simple light CSV reader This CSV reader is implemented in just pure Python. It allows to specify a separator, a quote char and column titles

Jose Rodriguez 6 Mar 5, 2022
A pure pytorch implemented ocr project including text detection and recognition

ocr.pytorch A pure pytorch implemented ocr project. Text detection is based CTPN and text recognition is based CRNN. More detection and recognition me

coura 390 Jun 8, 2022
A SOCKS proxy server implemented with the powerful python cooperative concurrency framework asyncio.

asyncio-socks-server A SOCKS proxy server implemented with the powerful python cooperative concurrency framework asyncio. Features Supports both TCP a

Amaindex 152 Jun 4, 2022
A Advanced Powerful, Smart And Intelligent Group Management Bot With New And Powerful Features

Vegeta Robot A Advanced Powerful, Smart And Intelligent Group Management Bot With New And Powerful Features ... Written with Pyrogram and Telethon...

⚡ CT_PRO ⚡ 4 Jun 3, 2022
Jarvide - A powerful AI mixed with a powerful IDE.

Jarvide About Jarvide Welcome to Jarvide. A powerful AI mixed with a powerful ID

Caeden 22 Jun 14, 2022
Luigi is a Python module that helps you build complex pipelines of batch jobs. It handles dependency resolution, workflow management, visualization etc. It also comes with Hadoop support built in.

Luigi is a Python (3.6, 3.7 tested) package that helps you build complex pipelines of batch jobs. It handles dependency resolution, workflow managemen

Spotify 15.8k Jun 20, 2022
Python Development Workflow for Humans.

Pipenv: Python Development Workflow for Humans [ ~ Dependency Scanning by PyUp.io ~ ] Pipenv is a tool that aims to bring the best of all packaging wo

Python Packaging Authority 23k Jun 20, 2022
PyWorkflow(PyWF) - A Python Binding of C++ Workflow

PyWorkflow(PyWF) - A Python Binding of C++ Workflow 概览 C++ Workflow是一个高性能的异步引擎,本项目着力于实现一个Python版的Workflow,让Python用户也能享受Workflow带来的绝佳体验。

Sogou-inc 92 Jun 18, 2022
Python Development Workflow for Humans.

Pipenv: Python Development Workflow for Humans [ ~ Dependency Scanning by PyUp.io ~ ] Pipenv is a tool that aims to bring the best of all packaging wo

Python Packaging Authority 23k Jun 17, 2022
A python based app to improve your presentation workflow

Presentation Remote A remote made for making presentations easier by enabling all the members to have access to change the slide and control the flow

Parnav 1 Oct 28, 2021
A cookiecutter to start a Python package with flawless practices and a magical workflow 🧙🏼‍♂️

PyPackage Cookiecutter This repository is a cookiecutter to quickly start a Python package. It contains a ton of very useful features ?? : Package man

Daniel Leal 16 Dec 13, 2021
Unified Interface for Constructing and Managing Workflows on different workflow engines, such as Argo Workflows, Tekton Pipelines, and Apache Airflow.

Couler What is Couler? Couler aims to provide a unified interface for constructing and managing workflows on different workflow engines, such as Argo

Couler Project 723 Jun 21, 2022
Reusable workflow library for Django

django-viewflow Viewflow is a lightweight reusable workflow library that helps to organize people collaboration business logic in django applications.

Viewflow 2.2k Jun 10, 2022
An audio digital processing toolbox based on a workflow/pipeline principle

AudioTK Audio ToolKit is a set of audio filters. It helps assembling workflows for specific audio processing workloads. The audio workflow is split in

Matthieu Brucher 235 May 13, 2022
Git Plan - a better workflow for git

git plan A better workflow for git. Git plan inverts the git workflow so that you can write your commit message first, before you start writing code.

Rory Byrne 170 May 29, 2022
Make tree planting a part of your daily workflow. 🌳

Continuous Reforestation Make tree planting a part of your daily workflow. ?? A GitHub Action for planting trees within your development workflow usin

protontypes 163 May 29, 2022
This repository contains free labs for setting up an entire workflow and DevOps environment from a real-world perspective in AWS

DevOps-The-Hard-Way-AWS This tutorial contains a full, real-world solution for setting up an environment that is using DevOps technologies and practic

Mike Levan 973 Jun 14, 2022
LOC-FLOW is an “hands-free” earthquake location workflow to process continuous seismic records

LOC-FLOW is an “hands-free” earthquake location workflow to process continuous seismic records: from raw waveforms to well located earthquakes with magnitude calculations. The package assembles several popular routines for sequential earthquake location refinements, suitable for catalog building ranging from local to regional scales.

Miao Zhang 52 May 30, 2022
An adaptable Snakemake workflow which uses GATKs best practice recommendations to perform germline mutation calling starting with BAM files

Germline Mutation Calling This Snakemake workflow follows the GATK best-practice recommandations to call small germline variants. The pipeline require

null 10 Mar 14, 2022