Package papyon :: Package event

Source Code for Package papyon.event

 1  # -*- coding: utf-8 -*- 
 2  # 
 3  # Copyright (C) 2006  Ali Sabil <ali.sabil@gmail.com> 
 4  # 
 5  # This program is free software; you can redistribute it and/or modify 
 6  # it under the terms of the GNU General Public License as published by 
 7  # the Free Software Foundation; either version 2 of the License, or 
 8  # (at your option) any later version. 
 9  # 
10  # This program is distributed in the hope that it will be useful, 
11  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
12  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
13  # GNU General Public License for more details. 
14  # 
15  # You should have received a copy of the GNU General Public License 
16  # along with this program; if not, write to the Free Software 
17  # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA 
18  # 
19   
20  """papyon event interfaces. 
21   
22  Defines the interfaces that the client can implement to benefit from the 
23  client event notifications.""" 
24   
25  from papyon.util.weak import WeakSet 
26   
27 -class EventsDispatcher(object):
28 """Abstract object from which all the objects generating events inherit""" 29
30 - def __init__(self):
31 self._events_handlers = WeakSet()
32 33 ### Callbacks
34 - def register_events_handler(self, events_handler):
35 """Registers an event handler with this dispatcher 36 @param events_handler: an instance with methods as code of callbacks 37 @type events_handler: L{papyon.event.BaseEventInterface} 38 """ 39 self._events_handlers.add(events_handler)
40
41 - def _dispatch(self, name, *args):
42 count = 0 43 for event_handler in list(self._events_handlers): 44 if event_handler._dispatch_event(name, *args): 45 count += 1 46 return count
47 48 import weakref
49 -class BaseEventInterface(object):
50 """Event handler interface, implemented by all the event handlers""" 51
52 - def __init__(self, client):
53 """Initializer 54 @param client: the client we want to be notified for its events 55 @type client: an object implementing L{EventsDispatcher}""" 56 self._client = weakref.proxy(client) 57 client.register_events_handler(self)
58
59 - def _dispatch_event(self, event_name, *params):
60 try: 61 handler = getattr(self, event_name) 62 except Exception, e: 63 return False 64 65 handler(*params) 66 return True
67 68 from client import * 69 from conversation import * 70 from profile import * 71 from contact import * 72 from address_book import * 73 from offline_messages import * 74 from invite import * 75 from mailbox import * 76 from webcam import * 77