A service-activator component for eventstore, written in Python
A Brief and Mostly Useless Quickstart:
# config.yaml atomicpuppy: host: localhost port: 2113 # each stream will be polled by a separate async http client streams: - stream_a - stream_b - stream_with_a_#date# # the counter keeps track of which messages have been processed counter: redis: host: localhost port: 6379
# main.py # AtomicPuppy uses asyncio coroutines for concurrent IO import asyncio import logging import signal from atomicpuppy import AtomicPuppy # AtomicPuppy needs a callback to pass you messages. def handle(msg): print(msg) # Config is read from yaml files. ap = AtomicPuppy('config.yaml', handle) loop = asyncio.get_event_loop() # to kill the puppy, call stop() def stop(): logging.debug("SIGINT received, shutting down") ap.stop() loop.add_signal_handler(signal.SIGINT, stop) # and to start it call start. loop.run_until_complete(ap.start())
Run the tests
tox.ini file is provided to run the tests with different versions of Python.
To run the tests:
- Make sure you have the Python 3.4 headers installed (on Ubuntu this is
apt-get install python3.4-dev)
- Make sure you have the Python 3.5 headers installed (on Ubuntu this is
apt-get install python3.5-dev)
pip install -r test-requirements.txtfrom the root folder of the repository
toxfrom the root folder of the repository
About python version
There is a bug in asyncio for python3.4 that was fixed in other versions. This is the bug report: https://bugs.python.org/issue23812 Because of that we are dropping support for python3.4 and we recommend to use python3.6.