@@ -120,16 +120,16 @@ def notify_observers(self, notification: INotification) -> None:
120
120
:type notification: INotification
121
121
:return: None
122
122
"""
123
- # Get a reference to the observers list for this notification name
123
+ # Get a reference to the observer list for this notification name
124
124
with self .observerMapLock :
125
125
observers = self .observerMap .get (notification .name )
126
126
127
- if observers :
128
- # Copy observers (observers[:]) from reference array to working array,
129
- # since the reference array may change during the notification loo
130
- for observer in observers [:] :
131
- # Notify Observers from the working array
132
- observer .notify_observer (notification )
127
+ # Copy observers (observers[:]) from reference array to a working array,
128
+ # since the reference array may change during the notification loo
129
+ # Safe iteration, create a shallow copy of observers or use an empty list if observers is None or falsy.
130
+ for observer in list ( observers or []) :
131
+ # Notify Observers from the working array
132
+ observer .notify_observer (notification )
133
133
134
134
def remove_observer (self , notification_name : str , notify_context : Any ) -> None :
135
135
"""
@@ -172,18 +172,19 @@ def register_mediator(self, mediator: IMediator) -> None:
172
172
:return: None
173
173
"""
174
174
# Do not allow re-registration (you must to removeMediator first)
175
- with self .mediatorMapLock :
176
- if self .mediatorMap .get (mediator .mediator_name ):
177
- return
175
+ if self .has_mediator (mediator .mediator_name ):
176
+ return
177
+
178
+ mediator .initialize_notifier (self .multitonKey )
178
179
179
- mediator . initialize_notifier ( self .multitonKey )
180
+ with self .mediatorMapLock :
180
181
self .mediatorMap [mediator .mediator_name ] = mediator
181
182
183
+ observer = Observer (mediator .handle_notification , mediator )
184
+
182
185
interests = mediator .list_notification_interests ()
183
- if interests :
184
- observer = Observer (mediator .handle_notification , mediator )
185
- for interest in interests :
186
- self .register_observer (interest , observer )
186
+ for interest in interests :
187
+ self .register_observer (interest , observer )
187
188
188
189
mediator .on_register ()
189
190
@@ -222,11 +223,12 @@ def remove_mediator(self, mediator_name: str) -> Optional[IMediator]:
222
223
"""
223
224
with self .mediatorMapLock :
224
225
mediator = self .mediatorMap .get (mediator_name )
225
- if not mediator : return None
226
- for interest in mediator .list_notification_interests ():
227
- self .remove_observer (interest , mediator )
228
226
229
- del self .mediatorMap [mediator_name ]
227
+ if not mediator : return None
228
+ for interest in mediator .list_notification_interests ():
229
+ self .remove_observer (interest , mediator )
230
+
231
+ del self .mediatorMap [mediator_name ]
230
232
231
233
mediator .on_remove ()
232
234
return mediator
0 commit comments