def testGather(self): d = gather_deferreds([]) self.assertCallbackEqual(d, []) da = Deferred() db = Deferred() dc = Deferred() df = Deferred() d = gather_deferreds([da, db, dc, df]) df.errback() dc.callback('c') db.callback('b') da.callback('a') self.assertCallbackEqual(d, [(True, ('a', ), {}), (True, ('b', ), {}), (True, ('c', ), {}), (False, (), {})]) da = Deferred() db = Deferred() dc = Deferred() df = Deferred() df.errback('f') dc.callback('c') d = gather_deferreds([da, db, dc, df]) db.callback('b') da.callback('a') self.assertCallbackEqual(d, [(True, ('a', ), {}), (True, ('b', ), {}), (True, ('c', ), {}), (False, ('f', ), {})])
def testCallbackArgs(self): cb = {} def cb_thunk(*args, **kwargs): cb['done'] = True cb['args'] = args cb['kwargs'] = kwargs d = Deferred() self.assertFalse(d.is_done()) d.callback() self.assertTrue(d.is_done()) d = Deferred() self.assertFalse(d.is_done()) d.errback() self.assertTrue(d.is_done()) d = Deferred() d.add_callback_fn(cb_thunk) d.callback() self.assertNotEqual(len(cb), 0) self.assertTrue(cb['done']) self.assertEqual(len(cb['args']), 0) self.assertEqual(len(cb['kwargs']), 0) cb.clear() d = Deferred() d.add_callback_fn(cb_thunk) d.callback('a', 'b') self.assertNotEqual(len(cb), 0) self.assertTrue(cb['done']) self.assertEqual(len(cb['args']), 2) self.assertEqual(cb['args'][0], 'a') self.assertEqual(cb['args'][1], 'b') self.assertEqual(len(cb['kwargs']), 0) cb.clear() d = Deferred() d.add_callback_fn(cb_thunk) d.callback('a', b='b') self.assertNotEqual(len(cb), 0) self.assertTrue(cb['done']) self.assertEqual(len(cb['args']), 1) self.assertEqual(cb['args'][0], 'a') self.assertEqual(len(cb['kwargs']), 1) self.assertEqual(cb['kwargs']['b'], 'b') cb.clear()
def __init__(self, build_context, rule, *args, **kwargs): """Initializes a rule context. Args: build_context: BuildContext this rule is running in. rule: Rule this context wraps. """ self.build_context = build_context self.build_env = build_context.build_env self.rule = rule self.file_delta = None self.deferred = Deferred() self.status = Status.WAITING self.start_time = None self.end_time = None self.exception = None # TODO(benvanik): logger self.logger = None # Resolve all src paths # If rules have their own attrs they'll have to do them themselves self.src_paths = self._resolve_input_files(rule.srcs, apply_src_filter=True) # This list of all files this rule outputted, upon completion self.all_output_files = []
def testMultiCall(self): d = Deferred() d.callback() with self.assertRaises(AssertionError): d.callback() d = Deferred() d.errback() with self.assertRaises(AssertionError): d.errback() d = Deferred() d.callback() with self.assertRaises(AssertionError): d.errback() d = Deferred() d.errback() with self.assertRaises(AssertionError): d.callback()
def testMultiCallbacks(self): cbs = [] def cb_multi_thunk(*args, **kwargs): cbs.append({'done': True, 'args': args, 'kwargs': kwargs}) d = Deferred() d.add_callback_fn(cb_multi_thunk) d.callback('a') self.assertEqual(len(cbs), 1) self.assertNotEqual(len(cbs[0]), 0) self.assertEqual(cbs[0]['args'][0], 'a') cbs[:] = [] d = Deferred() d.add_callback_fn(cb_multi_thunk) d.add_callback_fn(cb_multi_thunk) d.callback('a') self.assertEqual(len(cbs), 2) self.assertNotEqual(len(cbs[0]), 0) self.assertNotEqual(len(cbs[1]), 0) self.assertEqual(cbs[0]['args'][0], 'a') self.assertEqual(cbs[1]['args'][0], 'a') cbs[:] = [] d = Deferred() d.add_callback_fn(cb_multi_thunk) d.callback('a') d.add_callback_fn(cb_multi_thunk) self.assertEqual(len(cbs), 2) self.assertNotEqual(len(cbs[0]), 0) self.assertNotEqual(len(cbs[1]), 0) self.assertEqual(cbs[0]['args'][0], 'a') self.assertEqual(cbs[1]['args'][0], 'a') cbs[:] = [] d = Deferred() d.callback('a') d.add_callback_fn(cb_multi_thunk) d.add_callback_fn(cb_multi_thunk) self.assertEqual(len(cbs), 2) self.assertNotEqual(len(cbs[0]), 0) self.assertNotEqual(len(cbs[1]), 0) self.assertEqual(cbs[0]['args'][0], 'a') self.assertEqual(cbs[1]['args'][0], 'a') cbs[:] = []
def run_task_async(self, task): if self.closed: raise RuntimeError( 'Executor has been closed and cannot run new tasks') deferred = Deferred() try: result = task.execute() deferred.callback(result) except Exception as e: print 'exception in task:' traceback.print_exc(e) deferred.errback(exception=e) return deferred
def run_task_async(self, task): if self.closed: raise RuntimeError( 'Executor has been closed and cannot run new tasks') # Pass on results to the defered deferred = Deferred() def _thunk_callback(*args, **kwargs): self._running_count = self._running_count - 1 del self._waiting_deferreds[deferred] if len(args) and isinstance(args[0], Exception): deferred.errback(exception=args[0]) else: deferred.callback(*args) # Queue self._running_count = self._running_count + 1 async_result = self._pool.apply_async(_task_thunk, [task], callback=_thunk_callback) self._waiting_deferreds[deferred] = async_result return deferred
def testCallbackOrder(self): cb = {} def cb_thunk(*args, **kwargs): cb['done'] = True cb['args'] = args cb['kwargs'] = kwargs d = Deferred() d.add_callback_fn(cb_thunk) d.callback('a') self.assertNotEqual(len(cb), 0) self.assertTrue(cb['done']) self.assertEqual(len(cb['args']), 1) self.assertEqual(cb['args'][0], 'a') self.assertEqual(len(cb['kwargs']), 0) cb.clear() d = Deferred() d.callback('a') d.add_callback_fn(cb_thunk) self.assertNotEqual(len(cb), 0) self.assertTrue(cb['done']) self.assertEqual(len(cb['args']), 1) self.assertEqual(cb['args'][0], 'a') self.assertEqual(len(cb['kwargs']), 0) cb.clear() d = Deferred() d.add_errback_fn(cb_thunk) d.errback('a') self.assertNotEqual(len(cb), 0) self.assertTrue(cb['done']) self.assertEqual(len(cb['args']), 1) self.assertEqual(cb['args'][0], 'a') self.assertEqual(len(cb['kwargs']), 0) cb.clear() d = Deferred() d.errback('a') d.add_errback_fn(cb_thunk) self.assertNotEqual(len(cb), 0) self.assertTrue(cb['done']) self.assertEqual(len(cb['args']), 1) self.assertEqual(cb['args'][0], 'a') self.assertEqual(len(cb['kwargs']), 0) cb.clear() d = Deferred() d.add_callback_fn(cb_thunk) d.errback('a') self.assertEqual(len(cb), 0) cb.clear() d = Deferred() d.errback('a') d.add_callback_fn(cb_thunk) self.assertEqual(len(cb), 0) cb.clear() d = Deferred() d.add_errback_fn(cb_thunk) d.callback('a') self.assertEqual(len(cb), 0) cb.clear() d = Deferred() d.callback('a') d.add_errback_fn(cb_thunk) self.assertEqual(len(cb), 0) cb.clear()