~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/app/longpoll/interfaces.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-07-05 17:43:37 UTC
  • mfrom: (13333.6.49 lp-app-longpoll)
  • Revision ID: launchpad@pqm.canonical.com-20110705174337-4ygi4i0soakb5cs2
[r=gmb][no-qa] New lp.app.longpoll package.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright 2011 Canonical Ltd.  This software is licensed under the
 
2
# GNU Affero General Public License version 3 (see the file LICENSE).
 
3
 
 
4
"""Long-poll infrastructure interfaces."""
 
5
 
 
6
__metaclass__ = type
 
7
__all__ = [
 
8
    "ILongPollEvent",
 
9
    "ILongPollSubscriber",
 
10
    ]
 
11
 
 
12
 
 
13
from zope.interface import (
 
14
    Attribute,
 
15
    Interface,
 
16
    )
 
17
 
 
18
 
 
19
class ILongPollEvent(Interface):
 
20
 
 
21
    source = Attribute("The event source.")
 
22
 
 
23
    event = Attribute("An object indicating the type of event.")
 
24
 
 
25
    event_key = Attribute(
 
26
        "The key with which events will be emitted. Should be predictable "
 
27
        "and stable.")
 
28
 
 
29
    def emit(data):
 
30
        """Emit the given data to `event_key`.
 
31
 
 
32
        The data will be wrapped up into a `dict` with the keys `event_key`
 
33
        and `event_data`, where `event_key` is a copy of `self.event_key` and
 
34
        `event_data` is the `data` argument.
 
35
 
 
36
        :param data: Any data structure that can be dumped as JSON.
 
37
        """
 
38
 
 
39
 
 
40
class ILongPollSubscriber(Interface):
 
41
 
 
42
    subscribe_key = Attribute(
 
43
        "The key which the subscriber must know in order to be able "
 
44
        "to long-poll for subscribed events. Should be infeasible to "
 
45
        "guess, a UUID for example.")
 
46
 
 
47
    def subscribe(event):
 
48
        """Subscribe to the given event.
 
49
 
 
50
        :type event: ILongPollEvent
 
51
        """