@@ -120,16 +120,16 @@ def notify_observers(self, notification: INotification) -> None:
120120 :type notification: INotification
121121 :return: None
122122 """
123- # Get a reference to the observers list for this notification name
123+ # Get a reference to the observer list for this notification name
124124 with self .observerMapLock :
125125 observers = self .observerMap .get (notification .name )
126126
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 )
133133
134134 def remove_observer (self , notification_name : str , notify_context : Any ) -> None :
135135 """
@@ -172,18 +172,19 @@ def register_mediator(self, mediator: IMediator) -> None:
172172 :return: None
173173 """
174174 # 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 )
178179
179- mediator . initialize_notifier ( self .multitonKey )
180+ with self .mediatorMapLock :
180181 self .mediatorMap [mediator .mediator_name ] = mediator
181182
183+ observer = Observer (mediator .handle_notification , mediator )
184+
182185 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 )
187188
188189 mediator .on_register ()
189190
@@ -222,11 +223,12 @@ def remove_mediator(self, mediator_name: str) -> Optional[IMediator]:
222223 """
223224 with self .mediatorMapLock :
224225 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 )
228226
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 ]
230232
231233 mediator .on_remove ()
232234 return mediator
0 commit comments