Metadata-Version: 2.0
Name: anypubsub
Version: 0.6
Summary: A generic interface wrapping multiple backends to provide a consistent pubsub API.
Home-page: http://github.com/simock85/anypubsub
Author: Simone Marzola
Author-email: marzolasimone@gmail.com
License: UNKNOWN
Keywords: pubsub pub/sub redis mongodb
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: License :: OSI Approved :: MIT License
Requires-Dist: six
Provides-Extra: amqp
Requires-Dist: amqp (>=1.4.9); extra == 'amqp'
Provides-Extra: mongodb
Requires-Dist: pymongo (>=3); extra == 'mongodb'
Provides-Extra: redis
Requires-Dist: redis (>2.10); extra == 'redis'

anypubsub
=========

.. image:: https://travis-ci.org/smarzola/anypubsub.png?branch=master
   :target: https://travis-ci.org/smarzola/anypubsub

.. image:: https://coveralls.io/repos/github/smarzola/anypubsub/badge.svg?branch=master
   :target: https://coveralls.io/github/smarzola/anypubsub?branch=master


A generic interface wrapping multiple backends to provide a consistent pubsub API.


Usage
------

Create a pubsub object::

    from anypubsub import create_pubsub
    pubsub = create_pubsub('memory')

or create a pubsub object from settings::

    from anypubsub import create_pubsub_from_settings
    pubsub = create_pubsub_from_settings({'anypubsub.backend': 'memory'}, prefix='anypubsub.')

Subscribe to a channel::

    subscriber = pubsub.subscribe('a_channel')

you can also subscribe to multiple channels::

    subscriber = pubsub.subscribe('a_channel', 'b_channel')

the subscriber is an iterator object that returns the next published message at each loop increment, and blocks until
next message is published.

Publish a message to a channel::

    pubsub.publish('a_channel', 'hello world!')

    message = next(subscriber)
    assert message == 'hello world!'

Supported backends
---------------------

* memory
* redis
* mongodb
* amqp (tested with rabbitmq)

Backend specific optional settings
-----------------------------------

redis::

    host: hostname or full redis url, default: localhost
    port: default 6379
    db: default 0
    max_connections: connection pool max connections
    connection_pool: an already created redis-py ConnectionPool

mongodb::

    host: hostname or full mongodb url
    port: mongodb port
    max-pool-size: connection pool max connections
    client: an already created pymongo MongoClient
    database: database used to store messages, default anypubsub
    collection: collection used to store messages, default anyps_messages
    collection_size: messages collection size in bytes, default 10MB


