~launchpad-results/launchpad-results/trunk

« back to all changes in this revision

Viewing changes to lib/lpresults/xunit/dispatcher.py

  • Committer: Marc Tardif
  • Date: 2011-11-22 20:30:35 UTC
  • Revision ID: marc.tardif@canonical.com-20111122203035-gf3yiv7iqwgwbss0
Fixed login for user created from submission and incorrect CAPTURE devices.

Show diffs side-by-side

added added

removed removed

Lines of Context:
128
128
            else:
129
129
                del self._event_listeners[event_type]
130
130
 
131
 
    def unregisterListener(self, listener):
 
131
    def unregisterListener(self, listener, event_type=None):
132
132
        """Unregister a listener.
133
133
 
134
134
        :param listener: The listener of the handler to unregister.
 
135
        :param event_type: Optionally, the event_type to unregister.
135
136
        """
136
 
        self._event_listeners[listener.event_type].remove(listener)
 
137
        if event_type is None:
 
138
            event_type = listener.event_type
 
139
 
 
140
        self._event_listeners[event_type].remove(listener)
 
141
        if not self._event_listeners[event_type]:
 
142
            del self._event_listeners[event_type]
137
143
 
138
144
    def publishEvent(self, event_type, *args, **kwargs):
139
145
        """Publish an event of a given type and notify all listeners.
142
148
        :param args: Positional arguments to pass to the registered handlers.
143
149
        :param kwargs: Keyword arguments to pass to the registered handlers.
144
150
        """
145
 
        event = Event(event_type, *args, **kwargs)
146
 
        for listener in self._event_listeners.get(event_type, ()):
147
 
            try:
148
 
                listener.notify(event)
149
 
                if listener.count is not None and not listener.count:
150
 
                    self.unregisterListener(listener)
151
 
            except:
152
 
                logging.exception(
153
 
                    "Error running event handler for %r with args %r %r",
154
 
                    event_type, args, kwargs)
 
151
        if event_type in self._event_listeners:
 
152
            event = Event(event_type, *args, **kwargs)
 
153
            for listener in list(self._event_listeners[event_type]):
 
154
                try:
 
155
                    listener.notify(event)
 
156
                    if listener.count is not None and not listener.count:
 
157
                        self.unregisterListener(listener)
 
158
                except:
 
159
                    logging.exception(
 
160
                        "Error running event handler for %r with args %r %r",
 
161
                        event_type, args, kwargs)
155
162
 
156
163
 
157
164
class DispatcherList(Dispatcher):
177
184
    def unregisterListener(self, listener):
178
185
        """See Dispatcher."""
179
186
        for event_type in listener.event_types:
180
 
            self._event_listeners[event_type].remove(listener)
 
187
            super(DispatcherList, self).unregisterListener(
 
188
                listener, event_type)
181
189
 
182
190
    def publishEvent(self, event_type, arg):
183
191
        """See Dispatcher."""