=======
Caravan
=======

**Light python framework for AWS SWF**

Project
=======

- `Code on Github <https://github.com/pior/caravan>`_
- `PyPi <https://pypi.python.org/pypi/caravan>`_
- Doc: ``TODO``
- Tests: |travis|

.. |travis| image:: https://travis-ci.org/pior/caravan.svg?branch=master
    :target: https://travis-ci.org/pior/caravan


Focus of this project
=====================

Similar projects exists (like Simpleflow which seems mature).
Here is where Caravan differs from existing projects:

- Support of AWS Lambda tasks
- Boto3
- KISS
- Bring your own workflow framework (standard implementations as contribs)
- No coupling between Decider code and Activity code
- Paster compatible config file

Features
========

- Decider worker
- Activity task worker ``TODO``
- Commands to start/signal/terminate an arbitrary workflow execution
- Command to list open workflow execution
- Command to register a domain

Configuration
=============

Caravan uses Boto3 to connect to AWS. See
`Boto 3 configuration guide <http://boto3.readthedocs.org/en/latest/guide/configuration.html>`_
to setup your AWS credentials.

Usage
=====

Setup a SWF for the example::

    $ caravan-domain-register -n CaravanExample --retention-days 1

List open execution for last 24h::

    $ caravan-list -d CaravanExample

List open execution for year 2015::

    $ caravan-list -d CaravanExample --oldest 2015-01-01

Run the decider::

    $ caravan-decider -d CaravanExample -m caravan.examples.demo -t default

Start an execution::

    $ caravan-start -d CaravanExample -n Demo -v 0.1 -i 1

Send a signal to an execution::

    $ caravan-signal -d CaravanExample -i 1 -s PAYMENT_CONFIRMED

Terminate an execution::

    $ caravan-terminate -d CaravanExample -i 1

Similar projects
================

Python:

- Simpleflow: https://github.com/botify-labs/simpleflow
- Flowy: https://github.com/severb/flowy
- Garcon: https://github.com/xethorn/garcon

Ruby:

- AWS Flow: https://github.com/aws/aws-flow-ruby

References
==========

- `AWS Developer Guide for SWF <http://docs.aws.amazon.com/amazonswf/latest/developerguide/>`_
- `AWS API reference for SWF <http://docs.aws.amazon.com/amazonswf/latest/apireference/>`_

Development
===========

Possibly use `virtualenvwrapper <https://virtualenvwrapper.readthedocs.org/en/latest/>`_
to manage your virtualenvs.

    $ mkvirtualenv caravan

    or

    $ virtualenv caravan

Clone and install development dependencies::

    (caravan)$ git clone git@github.com:pior/caravan.git
    (caravan)$ cd caravan
    (caravan)$ pip install -e .[dev]

Run tests::

    (caravan)$ nosetests

Release
=======

The release process use zest.releaser::

    $ fullrelease

License
=======

MIT licensed. See the bundled
`LICENSE <https://github.com/pior/caravan/blob/master/LICENSE>`_
file for more details
