summaryrefslogtreecommitdiff
path: root/src/db/couch/feedreader.py
diff options
context:
space:
mode:
authorKristofer Hallin <kristofer@sunet.se>2022-04-07 14:12:35 +0200
committerKristofer Hallin <kristofer@sunet.se>2022-04-07 14:12:35 +0200
commit208089fa95e63d6e29e7a1d86726bfec804de211 (patch)
treed5ed8e7de790940ade6b46dcb48e126d7357733d /src/db/couch/feedreader.py
parent9d72acbb816c6040b608c63f18b8dbb169ceb2c3 (diff)
Moved everything database related to db/.
Diffstat (limited to 'src/db/couch/feedreader.py')
-rw-r--r--src/db/couch/feedreader.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/db/couch/feedreader.py b/src/db/couch/feedreader.py
new file mode 100644
index 0000000..e293932
--- /dev/null
+++ b/src/db/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)