コード例 #1
0
    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', ), {})])
コード例 #2
0
    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()
コード例 #3
0
    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 = []
コード例 #4
0
 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()
コード例 #5
0
    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[:] = []
コード例 #6
0
ファイル: task.py プロジェクト: manishas/anvil-build
    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
コード例 #7
0
ファイル: task.py プロジェクト: manishas/anvil-build
    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
コード例 #8
0
    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()