Metadata-Version: 2.1
Name: stepfunctions-activity-worker
Version: 1.1.2
Summary: Activity worker for performing AWS StepFunctions tasks
Home-page: https://github.com/AmberEngine/stepfunctions_activity_worker
Author: Amber Engine LLC
Author-email: developers@amberengine.com
License: UNKNOWN
Platform: UNKNOWN
Description-Content-Type: text/markdown
Requires-Dist: boto3 (<2)

# StepFunctions Activity Worker

A worker that listens to a StepFunctions activity and executes a provided function using the inputs from the activity task.

The StepFunctions Activity Worker encapsulates all the parts of communicating with the StepFunctions API so you don't have to worry about task heartbeats or maintaining task tokens and success/failure scenarios; all you have to worry about is executing the task.

### Installation

Install from [PyPI](https://pypi.org/project/stepfunctions-activity-worker/):

```
pip install stepfunctions_activity_worker
```


### Usage

```python
from stepfunctions_activity_worker import ActivityWorker


def my_task(**task_input):
    """Perform the task based on this task's input."""
    # Perform your task here! 
    return {"result": "done!"}


if __name__ == "__main__":
    activity_arn = "PLACE YOUR ACTIVITY ARN HERE"
    worker = ActiityWorker(activity_arn, my_task)
    worker.listen()
```

## Warning

The `ActivityWorker` class, if not provided with a `client` argument on instantiation, will create a *properly configured* client from your default session.

However, if you are providing an already instantiated `client` to the `ActivityWorker` class, *make sure it is proply configured to make StepFunctions API calls*!

The [`GetActivityTask` API call](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html) __blocks for 60 seconds__ which *matches* the [`botocore.config.Config` default `read_timeout`](https://botocore.amazonaws.com/v1/documentation/api/latest/reference/config.html). This means that if the API response for `GetActivityTask` is not punctual (which it often isn't) it will cause unnecessary retry-requests & eventually bubble up an HTTP exception.

```python
import boto3
import botocore
from stepfunctions_activity_worker import ActivityWorker

config = botocore.config.Config(
  read_timeout=70,
  # Insert other custom configuration here
)
stepfunctions = boto3.client('stepfunctions', config=config)

activity_worker = ActivityWorker(my_function, client=stepfunctions)
```


