5
5
#
6
6
# a generic signal implementation for propagating asynchron events
7
7
#
8
- # Copyright (C) 2005, 2006, 2010
8
+ # Copyright (C) 2005, 2006, 2010, 2011
9
9
# Andreas Büsching <crunchy@bitkipper.net>
10
10
#
11
11
# This library is free software; you can redistribute it and/or modify
24
24
25
25
__signals = {}
26
26
27
+ # exception classes
28
+ class UnknownSignalError ( Exception ):
29
+ pass
30
+
31
+ class SignalExistsError ( Exception ):
32
+ pass
33
+
27
34
class Signal ( object ):
28
35
def __init__ ( self , name ):
29
36
self .name = name
30
37
self .__callbacks = []
31
38
32
39
def emit ( self , * args ):
33
40
for cb in self .__callbacks :
34
- if args : cb ( * args )
35
- else : cb ()
41
+ cb ( * args )
36
42
37
43
def connect ( self , callback ):
38
44
self .__callbacks .append ( callback )
39
45
40
46
def disconnect ( self , callback ):
41
- try : self .__callbacks .remove ( callback )
42
- except : pass
47
+ try :
48
+ self .__callbacks .remove ( callback )
49
+ except :
50
+ pass
43
51
44
52
def __str__ ( self ):
45
53
return self .name
@@ -61,63 +69,55 @@ def signal_disconnect( self, signal, callback ):
61
69
disconnect ( signal , callback , self .__signals )
62
70
63
71
def signal_emit ( self , signal , * args ):
64
- if isinstance ( signal , Signal ) and \
65
- self .__signals .has_key ( signal .name ):
72
+ if isinstance ( signal , Signal ) and signal .name in self .__signals :
66
73
self .__signals [ signal .name ].emit ( * args )
67
- elif isinstance ( signal , str ) and self .__signals . has_key ( signal ) :
74
+ elif isinstance ( signal , basestring ) and signal in self .__signals :
68
75
self .__signals [ signal ].emit ( * args )
69
76
70
77
def _select_signals ( signals ):
71
78
global __signals
72
- if signals == None : return __signals
73
- else : return signals
79
+ return signals is None and __signals or signals
74
80
75
81
def new ( signal , signals = None ):
76
82
_signals = _select_signals ( signals )
77
- if isinstance ( signal , str ):
83
+ if isinstance ( signal , basestring ):
78
84
signal = Signal ( signal )
79
85
80
- if _signals . has_key ( signal .name ) :
86
+ if signal .name in _signals :
81
87
raise SignalExistsError ( "Signal '%s' already exists" % signal .name )
82
88
else :
83
89
_signals [ signal .name ] = signal
84
90
85
91
def exists ( signal , signals = None ):
86
92
_signals = _select_signals ( signals )
87
- if isinstance ( signal , str ):
88
- return _signals . has_key ( signal )
93
+ if isinstance ( signal , basestring ):
94
+ return signal in _signals
89
95
else :
90
- return _signals . has_key ( signal .name )
96
+ return signal .name in _signals
91
97
92
98
def connect ( signal , callback , signals = None ):
93
99
_signals = _select_signals ( signals )
94
- if isinstance ( signal , Signal ) and _signals . has_key ( signal .name ) :
100
+ if isinstance ( signal , Signal ) and signal .name in _signals :
95
101
_signals [ signal .name ].connect ( callback )
96
- elif isinstance ( signal , str ):
97
- if _signals . has_key ( signal ) :
102
+ elif isinstance ( signal , basestring ):
103
+ if signal in _signals :
98
104
_signals [ signal ].connect ( callback )
99
105
else :
100
106
raise UnknownSignalError ( "unknown signal '%s'" % signal )
101
107
102
108
103
109
def disconnect ( signal , callback , signals = None ):
104
110
_signals = _select_signals ( signals )
105
- if isinstance ( signal , Signal ) and _signals . has_key ( signal .name ) :
111
+ if isinstance ( signal , Signal ) and signal .name in _signals :
106
112
_signals [ signal .name ].disconnect ( callback )
107
- elif isinstance ( signal , str ) and _signals . has_key ( signal ) :
113
+ elif isinstance ( signal , basestring ) and signal in _signals :
108
114
_signals [ signal ].disconnect ( callback )
109
115
110
116
def emit ( signal , * args ):
111
- if isinstance ( signal , Signal ) and __signals . has_key ( signal .name ) :
117
+ if isinstance ( signal , Signal ) and signal .name in __signals :
112
118
__signals [ signal .name ].emit ( * args )
113
- elif isinstance ( signal , str ):
114
- if __signals . has_key ( signal ) :
119
+ elif isinstance ( signal , basestring ):
120
+ if signal in __signals :
115
121
__signals [ signal ].emit ( * args )
116
122
else :
117
123
raise UnknownSignalError ( "unknown signal '%s'" % signal )
118
-
119
- class UnknownSignalError ( Exception ):
120
- pass
121
-
122
- class SignalExistsError ( Exception ):
123
- pass
0 commit comments