Listen to database changes
couchdbkit 0.6.0 introduced a new API to listen for CouchDB changes.
The `couchdbkit.changes` modules allows you to listen for changes with a
streaming API.
Stream changes in your application:
To listen for change, instantiate the `couchdbkit.changes.ChangesStream`
object and iterrate it:
from couchdbkit import Server from couchdbkit.changes import ChangesStream, fold, foreach s = Server() db = s['testdb’] stream = ChangesStream(db, feed=“continuous”, heartbeat=True) print “got change now” for change in stream: print change
You can also use it as a context:
from couchdbkit import Server from couchdbkit.changes import ChangesStream, fold, foreach s = Server() db = s['testdb’] with ChangesStream(db, feed=“continuous”, heartbeat=True) as stream: for change in stream: print change
Note: if you want to use it with gevent, you can just setup a gevent
pool:
from couchdbkit import Server from couchdbkit.changes import ChangesStream, fold, foreach from restkit.conn import Connection from socketpool.pool import ConnectionPool pool = ConnectionPool(factory=Connection, backend=“gevent”) s = Server(pool=pool) db = s['testdb’] with ChangesStream(db, feed=“continuous”, heartbeat=True) as stream: for change in stream: print change
For more information about creating a greened pool, read the href=“http://benoitc.github.com/restkit/green.html”>restkit
documentation.
You can of course spawn or do anything you want with the gevent or
eventlet libraries.
fold changes:
`couchdbkit.changes.fold` allows you to fold all changes and pass
the change to a function, while collecting results to an accumularor.
The accumulator is returned at the end of the changes.
Exemple to fetch all changes in a streaming fashion:
def fold_fun(c, acc): acc.append© return acc acc = fold(db, fold_fun, [])
Note: The function take an optionnal `since` parameter.
Iterrate all changes
`couchdbkit.changes.foreach` allows you to itterate all changes and pass
the change to a function:
def print_change©: print c foreach(db, print_change)
Note: The function take an optionnal `since` parameter.