@@ -77,6 +77,7 @@ def on(func):
77
77
78
78
# create a new listener and add it
79
79
self ._event_tree .add_listener (event , Listener (func , event , ttl ))
80
+
80
81
if self .new_listener and event != self .new_listener_event :
81
82
self .emit (self .new_listener_event , func , event )
82
83
@@ -104,6 +105,7 @@ def on_any(func):
104
105
105
106
# create a new listener and add it
106
107
self ._any_listeners .append (Listener (func , None , ttl ))
108
+
107
109
if self .new_listener :
108
110
self .emit (self .new_listener_event , func )
109
111
@@ -162,22 +164,27 @@ def listeners_all(self) -> List[Callable]:
162
164
"""
163
165
Returns all registered functions, ordered by their registration time.
164
166
"""
165
- listeners = []
166
- nodes = [ self ._event_tree ]
167
+ listeners = list ( self . _any_listeners )
168
+ nodes = list ( self ._event_tree . nodes . values ())
167
169
while nodes :
168
170
node = nodes .pop (0 )
169
- listeners .extend (node .listeners )
170
171
nodes .extend (node .nodes .values ())
172
+ listeners .extend (node .listeners )
171
173
172
174
# sort them
173
175
listeners = sorted (listeners , key = lambda listener : listener .time )
174
176
175
177
return [listener .func for listener in listeners ]
176
178
177
179
def _emit (self , event : str , * args , ** kwargs ) -> List [Awaitable ]:
180
+ listeners = self ._event_tree .find_listeners (event )
181
+ if event != self .new_listener_event :
182
+ listeners .extend (self ._any_listeners )
183
+ listeners = sorted (listeners , key = lambda listener : listener .time )
184
+
178
185
# call listeners in order, keep track of awaitables from coroutines functions
179
186
awaitables = []
180
- for listener in self . _event_tree . find_listeners ( event ) :
187
+ for listener in listeners :
181
188
# since listeners can emit events themselves,
182
189
# deregister them before calling if needed
183
190
if listener .ttl == 1 :
0 commit comments