A SWF client library that makes things easy for building workflow logic
Project description
=======================================================
py_swf
=======================================================
.. image:: https://travis-ci.org/Yelp/pyswf.svg?branch=master
:target: https://travis-ci.org/Yelp/pyswf
.. image:: https://coveralls.io/repos/github/Yelp/pyswf/badge.svg?branch=master
:target: https://coveralls.io/github/Yelp/pyswf?branch=master
.. image:: https://readthedocs.org/projects/py-swf/badge/?version=latest
:target: http://py-swf.readthedocs.io/en/latest/?badge=latest
:alt: Documentation Status
.. image:: https://img.shields.io/pypi/v/py-swf.svg
:target: https://pypi-hypernode.com/pypi/py-swf/
py_swf is a library that provides a pythonic way to interact with the boto3 SWF client. It provides a thin client above boto3 and tries to provide the same API as boto3's SWF client. This library tries to group the API calls into SWF's framework of deciders, activity runners, and a client that can initiate and terminate workflows. More information on inputs to boto3 can be found in the boto3 :class:`~SWF.Client` class.
The library provides 4 clients:
- A client that allows starting and force-termination of workflows.
- A client that can poll for decision tasks and respond to decision tasks.
- A client that can poll for activity tasks and respond to activity tasks.
- A client that can perform registration of workflows in SWF.
Consumers of this library are expected to write their own daemons that enact business logic.
Example daemon that listens on decision tasks
.. code-block:: python
import boto3
from py_swf.config_definitions import DecisionConfig
from py_swf.clients.decision import DecisionClient
boto_client = boto3.Session(...).client('swf')
decision_config = DecisionConfig(...)
client = DecisionClient(decision_config, boto_client)
while True:
task = client.poll()
... = perform_decision_task(task)
client.finish_decision_with_activity(
task.task_token,
...
)
The heart of the daemon is the :class:`~py_swf.clients.decision.DecisionClient`. You must provide a valid bare boto3 client, and :class:`~py_swf.config_definitions.DecisionConfig` which represents common SWF inputs, such as domain, and some timeouts.
Likewise, you must implement an activity runner:
.. code-block:: python
import boto3
from py_swf.config_definitions import ActivityTaskConfig
from py_swf.clients.activity_task import ActivityTaskClient
boto_client = boto3.Session(...).client('swf')
activity_task_config = ActivityTaskConfig(...)
client = ActivityTaskClient(decision_config, boto_client)
while True:
task = client.poll()
result = perform_activity_task(task.input)
client.finish(
task_token=task.task_token,
result=result,
)
Activity task runners are very similar to deciders. However, they don't have any information of the workflow, and only perform one task given an input and responds with an output.
Documentation
-------------
The full documentation is at http://py-swf.readthedocs.io/en/latest/
History
-------
1.1.0 (2016-10-03)
++++++++++++++++++
* Update botocore version to 1.4.46
1.0.0 (2016-09-09)
++++++++++++++++++
* Initial release of py_swf
py_swf
=======================================================
.. image:: https://travis-ci.org/Yelp/pyswf.svg?branch=master
:target: https://travis-ci.org/Yelp/pyswf
.. image:: https://coveralls.io/repos/github/Yelp/pyswf/badge.svg?branch=master
:target: https://coveralls.io/github/Yelp/pyswf?branch=master
.. image:: https://readthedocs.org/projects/py-swf/badge/?version=latest
:target: http://py-swf.readthedocs.io/en/latest/?badge=latest
:alt: Documentation Status
.. image:: https://img.shields.io/pypi/v/py-swf.svg
:target: https://pypi-hypernode.com/pypi/py-swf/
py_swf is a library that provides a pythonic way to interact with the boto3 SWF client. It provides a thin client above boto3 and tries to provide the same API as boto3's SWF client. This library tries to group the API calls into SWF's framework of deciders, activity runners, and a client that can initiate and terminate workflows. More information on inputs to boto3 can be found in the boto3 :class:`~SWF.Client` class.
The library provides 4 clients:
- A client that allows starting and force-termination of workflows.
- A client that can poll for decision tasks and respond to decision tasks.
- A client that can poll for activity tasks and respond to activity tasks.
- A client that can perform registration of workflows in SWF.
Consumers of this library are expected to write their own daemons that enact business logic.
Example daemon that listens on decision tasks
.. code-block:: python
import boto3
from py_swf.config_definitions import DecisionConfig
from py_swf.clients.decision import DecisionClient
boto_client = boto3.Session(...).client('swf')
decision_config = DecisionConfig(...)
client = DecisionClient(decision_config, boto_client)
while True:
task = client.poll()
... = perform_decision_task(task)
client.finish_decision_with_activity(
task.task_token,
...
)
The heart of the daemon is the :class:`~py_swf.clients.decision.DecisionClient`. You must provide a valid bare boto3 client, and :class:`~py_swf.config_definitions.DecisionConfig` which represents common SWF inputs, such as domain, and some timeouts.
Likewise, you must implement an activity runner:
.. code-block:: python
import boto3
from py_swf.config_definitions import ActivityTaskConfig
from py_swf.clients.activity_task import ActivityTaskClient
boto_client = boto3.Session(...).client('swf')
activity_task_config = ActivityTaskConfig(...)
client = ActivityTaskClient(decision_config, boto_client)
while True:
task = client.poll()
result = perform_activity_task(task.input)
client.finish(
task_token=task.task_token,
result=result,
)
Activity task runners are very similar to deciders. However, they don't have any information of the workflow, and only perform one task given an input and responds with an output.
Documentation
-------------
The full documentation is at http://py-swf.readthedocs.io/en/latest/
History
-------
1.1.0 (2016-10-03)
++++++++++++++++++
* Update botocore version to 1.4.46
1.0.0 (2016-09-09)
++++++++++++++++++
* Initial release of py_swf
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
py-swf-1.2.0.tar.gz
(9.3 kB
view details)
Built Distribution
File details
Details for the file py-swf-1.2.0.tar.gz
.
File metadata
- Download URL: py-swf-1.2.0.tar.gz
- Upload date:
- Size: 9.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0b389ecc5ca52e2b1e339c0818730a66570a315fe93b7a9a4943415050c3d47d |
|
MD5 | 44e0e84794a327b3c25893110fe32f8f |
|
BLAKE2b-256 | bccf7a894d0e067b7a6953404dd4bf4407ea0f3e159e9e49272ccc87dad31bd9 |
File details
Details for the file py_swf-1.2.0-py2.py3-none-any.whl
.
File metadata
- Download URL: py_swf-1.2.0-py2.py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 01e5e70def0766912b96c085dcfd7d45506ed7ecc77339b45205edc271f69a3d |
|
MD5 | 907be5613ec3b6da68c44c44d5e76b3b |
|
BLAKE2b-256 | 714491334e4cda81163faed9080fbcb9786eff6c7ed885e384ea0b865232a524 |