~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/services/messaging/interfaces.py

  • Committer: Stuart Bishop
  • Date: 2011-09-28 12:49:24 UTC
  • mfrom: (9893.10.1 trivial)
  • mto: This revision was merged to the branch mainline in revision 14178.
  • Revision ID: stuart.bishop@canonical.com-20110928124924-m5a22fymqghw6c5i
Merged trivial into distinct-db-users.

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
 
6
6
__metaclass__ = type
7
7
__all__ = [
8
 
    'EmptyQueueException',
 
8
    'EmptyQueue',
 
9
    'IMessageConsumer',
9
10
    'IMessageProducer',
10
 
    'IMessageConsumer',
 
11
    'IMessageSession',
 
12
    'MessagingException',
 
13
    'MessagingUnavailable'
11
14
    ]
12
15
 
13
16
 
14
 
from zope.interface import Interface
15
 
 
16
 
 
17
 
class EmptyQueueException(Exception):
 
17
from zope.interface import (
 
18
    Attribute,
 
19
    Interface,
 
20
    )
 
21
 
 
22
 
 
23
class MessagingException(Exception):
 
24
    """Failure in messaging."""
 
25
 
 
26
 
 
27
class EmptyQueue(MessagingException):
18
28
    """Raised if there are no queued messages on a non-blocking read."""
19
 
    pass
 
29
 
 
30
 
 
31
class MessagingUnavailable(MessagingException):
 
32
    """Messaging systems are not available."""
 
33
 
 
34
 
 
35
class IMessageSession(Interface):
 
36
 
 
37
    connection = Attribute("A connection to the messaging system.")
 
38
 
 
39
    def connect():
 
40
        """Connect to the messaging system.
 
41
 
 
42
        If the session is already connected this should be a no-op.
 
43
        """
 
44
 
 
45
    def disconnect():
 
46
        """Disconnect from the messaging system.
 
47
 
 
48
        If the session is already disconnected this should be a no-op.
 
49
        """
 
50
 
 
51
    def flush():
 
52
        """Run deferred tasks."""
 
53
 
 
54
    def finish():
 
55
        """Flush the session and reset."""
 
56
 
 
57
    def reset():
 
58
        """Reset the session."""
 
59
 
 
60
    def defer(func, *args, **kwargs):
 
61
        """Schedule something to happen when this session is finished."""
 
62
 
 
63
    def getProducer(name):
 
64
        """Get a `IMessageProducer` associated with this session."""
 
65
 
 
66
    def getConsumer(name):
 
67
        """Get a `IMessageConsumer` associated with this session."""
20
68
 
21
69
 
22
70
class IMessageConsumer(Interface):
 
71
 
23
72
    def receive(blocking=True):
24
73
        """Receive data from the queue.
25
74
 
26
 
        :raises EmptyQueueException: If non-blocking and the queue is empty.
 
75
        :raises EmptyQueue: If non-blocking and the queue is empty.
27
76
        """
28
77
 
29
 
    def close():
30
 
        """Cleanup nicely."""
31
 
 
32
78
 
33
79
class IMessageProducer(Interface):
34
80
 
35
81
    def send(data):
36
82
        """Serialize `data` into JSON and send it to the queue on commit."""
37
83
 
38
 
    def send_now(data):
 
84
    def sendNow(data):
39
85
        """Serialize `data` into JSON and send it to the queue immediately."""
40
86
 
41
 
    def close():
42
 
        """Cleanup nicely."""
43
 
 
44
87
    def associateConsumer(consumer):
 
88
        """Make the consumer receive messages from this producer on commit.
 
89
 
 
90
        :param consumer: An `IMessageConsumer`
 
91
        """
 
92
 
 
93
    def associateConsumerNow(consumer):
45
94
        """Make the consumer receive messages from this producer.
46
95
 
47
96
        :param consumer: An `IMessageConsumer`
48
97
        """
49
 
 
50
 
    def disassociateConsumer(consumer):
51
 
        """Make the consumer stop receiving messages from this producer.
52
 
 
53
 
        :param consumer: An `IMessageConsumer`
54
 
        """