summaryrefslogtreecommitdiff
path: root/src/couch/feedreader.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/couch/feedreader.py')
-rw-r--r--src/couch/feedreader.py52
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)