summaryrefslogtreecommitdiff
path: root/src/couch/feedreader.py
blob: e29393215c0580f0ed339683ade0c14d5ba7ceac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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)