diff options
Diffstat (limited to 'src/couch/feedreader.py')
-rw-r--r-- | src/couch/feedreader.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/couch/feedreader.py b/src/couch/feedreader.py new file mode 100644 index 0000000..e293932 --- /dev/null +++ b/src/couch/feedreader.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Based on py-couchdb (https://github.com/histrio/py-couchdb) + + +class BaseFeedReader(object): + """ + Base interface class for changes feed reader. + """ + + def __call__(self, db): + self.db = db + return self + + def on_message(self, message): + """ + Callback method that is called when change + message is received from couchdb. + + :param message: change object + :returns: None + """ + + raise NotImplementedError() + + def on_close(self): + """ + Callback method that is received when connection + is closed with a server. By default, does nothing. + """ + pass + + def on_heartbeat(self): + """ + Callback method invoked when a hearbeat (empty line) is received + from the _changes stream. Override this to purge the reader's internal + buffers (if any) if it waited too long without receiving anything. + """ + pass + + +class SimpleFeedReader(BaseFeedReader): + """ + Simple feed reader that encapsule any callable in + a valid feed reader interface. + """ + + def __call__(self, db, callback): + self.callback = callback + return super(SimpleFeedReader, self).__call__(db) + + def on_message(self, message): + self.callback(message, db=self.db) |