~didrocks/ubuntuone-client/use_result_var

« back to all changes in this revision

Viewing changes to ubuntuone/syncdaemon/event_queue.py

  • Committer: Bazaar Package Importer
  • Author(s): Rodney Dawes
  • Date: 2011-02-11 16:18:11 UTC
  • mfrom: (1.1.44 upstream)
  • Revision ID: james.westby@ubuntu.com-20110211161811-lbelxu332e8r2dov
Tags: 1.5.4-0ubuntu1
* New upstream release.
  - Files still get downloaded from unsubscribed folder (LP: #682878)
  - Add subscription capabilities to shares (LP: #708335)
  - Nautilus offers Publish option within other's shares (LP: #712674)
  - Shares dir name may not be unique (LP: #715776)
  - Send a notification when new Volume is available (LP: #702055)
  - Add messaging menu entry for new Volumes (LP: #702075)
  - Aggregate notifications for completed operations (LP: #702128)
  - Send a notification for new Share offers (LP: #702138)
  - Add messaging menu entry for new Share offers (LP: #702144)
* Remove ubuntuone-client-tools as u1sync has been moved out.
* Simplify python package as we don't have multiple python packages now.

Show diffs side-by-side

added added

removed removed

Lines of Context:
151
151
    'VM_UDF_UNSUBSCRIBE_ERROR': ('udf_id', 'error'),
152
152
    'VM_UDF_CREATED': ('udf',),
153
153
    'VM_UDF_CREATE_ERROR': ('path', 'error'),
 
154
    'VM_SHARE_SUBSCRIBED': ('share',),
 
155
    'VM_SHARE_SUBSCRIBE_ERROR': ('share_id', 'error'),
 
156
    'VM_SHARE_UNSUBSCRIBED': ('share',),
 
157
    'VM_SHARE_UNSUBSCRIBE_ERROR': ('share_id', 'error'),
154
158
    'VM_SHARE_CREATED': ('share_id',),
155
159
    'VM_SHARE_DELETED': ('share',),
156
160
    'VM_SHARE_DELETE_ERROR': ('share_id', 'error'),
160
164
 
161
165
}
162
166
 
163
 
DEFAULT_HANDLER = "handle_default" # receives (event_name, *args, **kwargs)
 
167
DEFAULT_HANDLER = "handle_default" # receives (event_name, **kwargs)
164
168
 
165
169
 
166
170
class EventQueue(object):
231
235
        if obj not in self._listeners:
232
236
            self._listeners.append(obj)
233
237
 
234
 
    def push(self, event_name, *args, **kwargs):
 
238
    def push(self, event_name, **kwargs):
235
239
        """Receives a push for all events.
236
240
 
237
241
        The signature for each event is forced on each method, not in this
238
242
        'push' arguments.
239
243
        """
240
 
        log_msg = "push_event: %s, args:%s, kw:%s"
 
244
        log_msg = "push_event: %s, kwargs: %s"
241
245
        if event_name.endswith('DELETE'):
242
246
            # log every DELETE in INFO level
243
 
            self.log.info(log_msg, event_name, args, kwargs)
 
247
            self.log.info(log_msg, event_name, kwargs)
244
248
        elif event_name == 'SYS_USER_CONNECT':
245
 
            self.log.debug(log_msg, event_name, '*', '*')
 
249
            self.log.debug(log_msg, event_name, '*')
246
250
        else:
247
 
            self.log.debug(log_msg, event_name, args, kwargs)
 
251
            self.log.debug(log_msg, event_name, kwargs)
248
252
 
249
253
        # get the event parameters
250
254
        try:
255
259
            raise InvalidEventError(msg)
256
260
 
257
261
        # validate that the received arguments are ok
258
 
        if args:
259
 
            if len(args) > len(event_params):
260
 
                msg = "Too many arguments! (should receive %s)" % event_params
261
 
                self.log.error(msg)
262
 
                raise TypeError(msg)
263
 
            event_params = event_params[len(args):]
264
 
 
265
262
        s_eventparms = set(event_params)
266
263
        s_kwargs = set(kwargs.keys())
267
264
        if s_eventparms != s_kwargs:
271
268
            raise TypeError(msg)
272
269
 
273
270
        # check if we are currently dispatching an event
274
 
        self.dispatch_queue.put((event_name, args, kwargs))
 
271
        self.dispatch_queue.put((event_name, kwargs))
275
272
        if not self.dispatching:
276
273
            self.dispatching = True
277
274
            while True:
278
275
                try:
279
 
                    event_name, args, kwargs = \
280
 
                            self.dispatch_queue.get(block=False)
281
 
                    self._dispatch(event_name, *args, **kwargs)
 
276
                    event_name, kwargs = self.dispatch_queue.get(block=False)
 
277
                    self._dispatch(event_name, **kwargs)
282
278
                except Empty:
283
279
                    self.dispatching = False
284
280
                    for callable in self.empty_event_queue_callbacks.copy():
285
281
                        callable()
286
282
                    break
287
283
 
288
 
    def _dispatch(self, event_name, *args, **kwargs):
 
284
    def _dispatch(self, event_name, **kwargs):
289
285
        """ push the event to all listeners. """
290
286
        # check listeners to see if have the proper method, and call it
291
287
        meth_name = "handle_" + event_name
296
292
            method = self._get_listener_method(listener, meth_name, event_name)
297
293
            if method is not None:
298
294
                try:
299
 
                    method(*args, **kwargs)
 
295
                    method(**kwargs)
300
296
                except Exception:
301
297
                    self.log.exception("Error encountered while handling: %s"
302
298
                                     " in %s", event_name, listener)