Пример #1
0
 def test_connection_pool(self):
     '''Test the connection pool. A very important test!'''
     client = Echo(self.server_cfg.addresses[0], pool_size=2)
     self.assertEqual(client.pool.pool_size, 2)
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 0)
     self.assertEqual(client.sessions, 0)
     self.assertEqual(client._requests_processed, 0)
     #
     response = yield client(b'test connection')
     self.assertEqual(response, b'test connection')
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 1)
     self.assertEqual(client.sessions, 1)
     self.assertEqual(client._requests_processed, 1)
     #
     response = yield client(b'test connection 2')
     self.assertEqual(response, b'test connection 2')
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 1)
     self.assertEqual(client.sessions, 1)
     self.assertEqual(client._requests_processed, 2)
     #
     result = yield multi_async((client(b'ciao'),
                                 client(b'pippo'),
                                 client(b'foo')))
     self.assertEqual(len(result), 3)
     self.assertTrue(b'ciao' in result)
     self.assertTrue(b'pippo' in result)
     self.assertTrue(b'foo' in result)
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 2)
     self.assertEqual(client.sessions, 2)
     self.assertEqual(client._requests_processed, 5)
     #
     # drop a connection
     conn1 = client.pool._queue.get_nowait()
     conn1.close()
     conn2 = client.pool._queue.get_nowait()
     client.pool._queue.put_nowait(conn1)
     client.pool._queue.put_nowait(conn2)
     #
     result = yield multi_async((client(b'ciao'),
                                 client(b'pippo'),
                                 client(b'foo')))
     self.assertEqual(len(result), 3)
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 2)
     self.assertEqual(client.sessions, 3)
     self.assertEqual(client._requests_processed, 8)
     #
     client.pool.close()
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 0)
     self.assertEqual(client.sessions, 3)
     self.assertEqual(client._requests_processed, 8)
Пример #2
0
 def test_connection_pool(self):
     '''Test the connection pool. A very important test!'''
     client = Echo(self.server_cfg.addresses[0], pool_size=2)
     self.assertEqual(client._loop, get_event_loop())
     #
     self.assertEqual(client.pool.pool_size, 2)
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 0)
     self.assertEqual(client.sessions, 0)
     self.assertEqual(client._requests_processed, 0)
     #
     response = yield from client(b'test connection')
     self.assertEqual(response, b'test connection')
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 1)
     self.assertEqual(client.sessions, 1)
     self.assertEqual(client._requests_processed, 1)
     #
     response = yield from client(b'test connection 2')
     self.assertEqual(response, b'test connection 2')
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 1)
     self.assertEqual(client.sessions, 1)
     self.assertEqual(client._requests_processed, 2)
     #
     result = yield from multi_async((client(b'ciao'),
                                      client(b'pippo'),
                                      client(b'foo')))
     self.assertEqual(len(result), 3)
     self.assertTrue(b'ciao' in result)
     self.assertTrue(b'pippo' in result)
     self.assertTrue(b'foo' in result)
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 2)
     self.assertEqual(client.sessions, 2)
     self.assertEqual(client._requests_processed, 5)
     #
     # drop a connection
     yield from run_in_loop(client._loop, self._drop_conection, client)
     #
     result = yield from multi_async((client(b'ciao'),
                                      client(b'pippo'),
                                      client(b'foo')))
     self.assertEqual(len(result), 3)
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 2)
     self.assertEqual(client.sessions, 3)
     self.assertEqual(client._requests_processed, 8)
     #
     yield from run_in_loop(client._loop, client.pool.close)
     #
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 0)
     self.assertEqual(client.sessions, 3)
     self.assertEqual(client._requests_processed, 8)
Пример #3
0
 def test_connection_pool(self):
     '''Test the connection pool. A very important test!'''
     client = Echo(self.server_cfg.addresses[0], pool_size=2)
     self.assertNotEqual(client._loop, get_event_loop())
     #
     self.assertEqual(client.pool.pool_size, 2)
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 0)
     self.assertEqual(client.sessions, 0)
     self.assertEqual(client._requests_processed, 0)
     #
     response = yield client(b'test connection')
     self.assertEqual(response, b'test connection')
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 1)
     self.assertEqual(client.sessions, 1)
     self.assertEqual(client._requests_processed, 1)
     #
     response = yield client(b'test connection 2')
     self.assertEqual(response, b'test connection 2')
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 1)
     self.assertEqual(client.sessions, 1)
     self.assertEqual(client._requests_processed, 2)
     #
     result = yield multi_async(
         (client(b'ciao'), client(b'pippo'), client(b'foo')))
     self.assertEqual(len(result), 3)
     self.assertTrue(b'ciao' in result)
     self.assertTrue(b'pippo' in result)
     self.assertTrue(b'foo' in result)
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 2)
     self.assertEqual(client.sessions, 2)
     self.assertEqual(client._requests_processed, 5)
     #
     # drop a connection
     yield run_in_loop(client._loop, self._drop_conection, client)
     #
     result = yield multi_async(
         (client(b'ciao'), client(b'pippo'), client(b'foo')))
     self.assertEqual(len(result), 3)
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 2)
     self.assertEqual(client.sessions, 3)
     self.assertEqual(client._requests_processed, 8)
     #
     yield run_in_loop(client._loop, client.pool.close)
     #
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 0)
     self.assertEqual(client.sessions, 3)
     self.assertEqual(client._requests_processed, 8)
Пример #4
0
 def test_connection_pool(self):
     """Test the connection pool. A very important test!"""
     client = Echo(self.server_cfg.addresses[0], pool_size=2)
     self.assertNotEqual(client._loop, get_event_loop())
     #
     self.assertEqual(client.pool.pool_size, 2)
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 0)
     self.assertEqual(client.sessions, 0)
     self.assertEqual(client._requests_processed, 0)
     #
     response = yield client(b"test connection")
     self.assertEqual(response, b"test connection")
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 1)
     self.assertEqual(client.sessions, 1)
     self.assertEqual(client._requests_processed, 1)
     #
     response = yield client(b"test connection 2")
     self.assertEqual(response, b"test connection 2")
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 1)
     self.assertEqual(client.sessions, 1)
     self.assertEqual(client._requests_processed, 2)
     #
     result = yield multi_async((client(b"ciao"), client(b"pippo"), client(b"foo")))
     self.assertEqual(len(result), 3)
     self.assertTrue(b"ciao" in result)
     self.assertTrue(b"pippo" in result)
     self.assertTrue(b"foo" in result)
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 2)
     self.assertEqual(client.sessions, 2)
     self.assertEqual(client._requests_processed, 5)
     #
     # drop a connection
     yield run_in_loop(client._loop, self._drop_conection, client)
     #
     result = yield multi_async((client(b"ciao"), client(b"pippo"), client(b"foo")))
     self.assertEqual(len(result), 3)
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 2)
     self.assertEqual(client.sessions, 3)
     self.assertEqual(client._requests_processed, 8)
     #
     yield run_in_loop(client._loop, client.pool.close)
     #
     self.assertEqual(client.pool.in_use, 0)
     self.assertEqual(client.pool.available, 0)
     self.assertEqual(client.sessions, 3)
     self.assertEqual(client._requests_processed, 8)
Пример #5
0
 def test_multi(self):
     # need From because this is called by test_client method too
     result = yield From(multi_async((self.client(b"ciao"), self.client(b"pippo"), self.client(b"foo"))))
     self.assertEqual(len(result), 3)
     self.assertTrue(b"ciao" in result)
     self.assertTrue(b"pippo" in result)
     self.assertTrue(b"foo" in result)
Пример #6
0
    def run_testcls(self, consumer, runner, testcls, all_tests):
        '''Run all test functions from the :attr:`testcls`.

        It uses the following algorithm:

        * Run the class method ``setUpClass`` of :attr:`testcls` if defined,
          unless the test class should be skipped
        * Call :meth:`run_test` for each test functions in :attr:`testcls`
        * Run the class method ``tearDownClass`` of :attr:`testcls` if defined,
          unless the test class should be skipped.
        '''
        cfg = testcls.cfg
        runner.startTestClass(testcls)
        error = None
        sequential = getattr(testcls, '_sequential_execution', cfg.sequential)
        skip_tests = getattr(testcls, '__unittest_skip__', False)
        if not skip_tests:
            error = yield self._run(runner,
                                    testcls,
                                    'setUpClass',
                                    add_err=False)
        # run the tests
        if sequential:
            # Loop over all test cases in class
            for test in all_tests:
                yield self.run_test(test, runner, error)
        else:
            all = (self.run_test(test, runner, error) for test in all_tests)
            yield multi_async(all)
        if not skip_tests:
            yield self._run(runner, testcls, 'tearDownClass', add_err=False)
        runner.stopTestClass(testcls)
        coroutine_return(runner.result)
Пример #7
0
 def create_tables(self, remove_existing=False):
     '''Loop though :attr:`registered_models` and issue the
     :meth:`.Manager.create_table` method.'''
     executed = []
     for manager in self._registered_models.values():
         executed.append(manager.create_table(remove_existing))
     return multi_async(executed, loop=self._loop)
Пример #8
0
def stream_mapping(value, request=None):
    result = {}
    for key, value in iteritems(value):
        if isinstance(value, AsyncString):
            value = value.render(request)
        result[key] = value
    return multi_async(result)
Пример #9
0
    def http_response(self, request, *stream):
        '''Return a :class:`.WsgiResponse` or a :class:`~asyncio.Future`.

        This method asynchronously wait for :meth:`stream` and subsequently
        returns a :class:`.WsgiResponse`.
        '''
        content_types = request.content_types
        if not content_types or self._content_type in content_types:
            response = request.response
            response.content_type = self._content_type
            response.encoding = self.charset
            if stream:
                stream = stream[0]
            else:
                stream = multi_async(self.stream(request))
                if stream.done():
                    stream = stream.result()
                else:
                    return chain_future(stream,
                                        callback=partial(
                                            self.http_response, request))
            response.content = self.to_string(stream)
            return response
        else:
            raise HttpException(status=415, msg=request.content_types)
Пример #10
0
def stream_mapping(value, request=None):
    result = {}
    for key, value in iteritems(value):
        if isinstance(value, AsyncString):
            value = value.render(request)
        result[key] = value
    return multi_async(result)
Пример #11
0
    def monitor_start(self, monitor):
        '''When the monitor starts load all test classes into the queue'''
        # Create a datastore for this test suite
        if not self.cfg.task_backend:
            server = PulsarDS(bind='127.0.0.1:0',
                              workers=0,
                              key_value_save=[],
                              name='%s_store' % self.name)
            yield server()
            address = 'pulsar://%s:%s' % server.cfg.addresses[0]
        else:
            address = self.cfg.task_backend

        store = create_store(address, pool_size=2, loop=monitor._loop)
        self.get_backend(store)
        loader = self.loader
        tags = self.cfg.labels
        exclude_tags = self.cfg.exclude_labels
        if self.cfg.show_leaks:
            show = show_leaks if self.cfg.show_leaks == 1 else hide_leaks
            self.cfg.set('when_exit', show)
            arbiter = pulsar.arbiter()
            arbiter.cfg.set('when_exit', show)
        try:
            tests = []
            loader.runner.on_start()
            for tag, testcls in loader.testclasses(tags, exclude_tags):
                suite = loader.runner.loadTestsFromTestCase(testcls)
                if suite and suite._tests:
                    tests.append((tag, testcls))
            self._time_start = None
            if tests:
                self.logger.info('loading %s test classes', len(tests))
                monitor.cfg.set('workers', min(self.cfg.workers, len(tests)))
                self._time_start = default_timer()
                queued = []
                self._tests_done = set()
                self._tests_queued = None
                #
                # Bind to the task_done event
                self.backend.bind_event('task_done',
                                        partial(self._test_done, monitor))
                for tag, testcls in tests:
                    r = self.backend.queue_task('test',
                                                testcls=testcls,
                                                tag=tag)
                    queued.append(r)
                queued = yield multi_async(queued)
                self.logger.debug('loaded %s test classes', len(tests))
                self._tests_queued = set(queued)
                yield self._test_done(monitor)
            else:  # pragma    nocover
                raise ExitTest('Could not find any tests.')
        except ExitTest as e:  # pragma    nocover
            monitor.stream.writeln(str(e))
            monitor._loop.stop()
        except Exception:  # pragma    nocover
            monitor.logger.critical('Error occurred while starting tests',
                                    exc_info=True)
            monitor._loop.call_soon(self._exit, 3)
Пример #12
0
 def test_multi_requests(self):
     client = yield get_client(self.server.address)
     requests = (client.send_message('Msg%s' % n) for n in range(20))
     results = yield multi_async(requests)
     self.assertEqual(len(results), 20)
     for n, result in enumerate(results):
         self.assertEqual(result, 'Msg%s' % n)
Пример #13
0
    def run(self, consumer, runner, testcls, all_tests):
        '''Run all test functions from the :attr:`testcls`.

        It uses the following algorithm:

        * Run the class method ``setUpClass`` of :attr:`testcls` if defined,
          unless the test class should be skipped
        * Call :meth:`run_test` for each test functions in :attr:`testcls`
        * Run the class method ``tearDownClass`` of :attr:`testcls` if defined,
          unless the test class should be skipped.
        '''
        cfg = testcls.cfg
        loop = consumer._loop
        runner.startTestClass(testcls)
        error = None
        sequential = getattr(testcls, '_sequential_execution', cfg.sequential)
        skip_tests = getattr(testcls, '__unittest_skip__', False)
        if not skip_tests:
            error = yield self._run(runner, testcls, 'setUpClass',
                                    add_err=False)
        # run the tests
        if sequential:
            # Loop over all test cases in class
            for test in all_tests:
                yield self.run_test(test, runner, error)
        else:
            all = (self.run_test(test, runner, error) for test in all_tests)
            yield multi_async(all, loop=loop)
        if not skip_tests:
            yield self._run(runner, testcls, 'tearDownClass', add_err=False)
        runner.stopTestClass(testcls)
        coroutine_return(runner.result)
Пример #14
0
 def test_multi_requests(self):
     client = yield get_client(self.server.address)
     requests = (client.send_message('Msg%s' % n) for n in range(20))
     results = yield multi_async(requests)
     self.assertEqual(len(results), 20)
     for n, result in enumerate(results):
         self.assertEqual(result, 'Msg%s' % n)
Пример #15
0
 def drop_tables(self):
     '''Loop though :attr:`registered_models` and issue the
     :meth:`.Manager.drop_table` method.'''
     executed = []
     for manager in self._registered_models.values():
         executed.append(manager.drop_table())
     return multi_async(executed, loop=self._loop)
Пример #16
0
 def to_json(self):
     self.body._tag = None
     body = yield multi_async(self.body.stream(request))
     self.head._tag = None
     data = {'body': body}
     data.extend(self.head.to_json())
     coroutine_return(json.dumps(data))
Пример #17
0
 def drop_tables(self):
     '''Loop though :attr:`registered_models` and issue the
     :meth:`.Manager.drop_table` method.'''
     executed = []
     for manager in self._registered_models.values():
         executed.append(manager.drop_table())
     return multi_async(executed, loop=self._loop)
Пример #18
0
 def test_multi(self):
     result = yield multi_async(
         (self.echo(b'ciao'), self.echo(b'pippo'), self.echo(b'foo')))
     self.assertEqual(len(result), 3)
     self.assertTrue(b'ciao' in result)
     self.assertTrue(b'pippo' in result)
     self.assertTrue(b'foo' in result)
Пример #19
0
 def create_tables(self, remove_existing=False):
     '''Loop though :attr:`registered_models` and issue the
     :meth:`.Manager.create_table` method.'''
     executed = []
     for manager in self._registered_models.values():
         executed.append(manager.create_table(remove_existing))
     return multi_async(executed, loop=self._loop)
Пример #20
0
 def test_call_at(self):
     loop = get_event_loop()
     d1 = Future()
     d2 = Future()
     c1 = loop.call_at(loop.time()+1, lambda: d1.set_result(loop.time()))
     c2 = loop.call_later(1, lambda: d2.set_result(loop.time()))
     t1, t2 = yield pulsar.multi_async((d1, d2))
     self.assertTrue(t1 <= t2)
Пример #21
0
    def content(self, request=None):
        '''Return a :class:`pulsar.Deferred` called once the string is ready.

        This method can be called once only since it invokes the :meth:`stream`
        method.
        '''
        stream = self.stream(request)
        return multi_async(stream).add_callback(self.to_string)
Пример #22
0
 def test_nodata(self):
     yield self.create_feeds('bla', 'foo')
     session = self.session()
     feeds = yield session.query(Feed1).filter(name=('bla', 'foo')).all()
     for feed in feeds:
         live, prev = yield multi_async((feed.live, feed.prev))
         self.assertFalse(live)
         self.assertFalse(prev)
Пример #23
0
 def do_stream(self, request):
     # stream the body
     body = multi_async(self.body.stream(request))
     # the body has asynchronous components
     # delay the header untl later
     if not body.done():
         yield self._html(request, body)
     else:
         head = multi_async(self.head.stream(request))
         #
         # header not ready (this should never occur really)
         if not head.done():
             yield self._html(request, body, head)
         else:
             yield self._template % (self.flatatt(),
                                     self.head.to_string(head.result()),
                                     self.body.to_string(body.result()))
Пример #24
0
 def _html(self, request, body, head=None):
     if head is None:
         body = yield body
         head = multi_async(self.head.stream(request))
     head = yield head
     result = self._template % (self.flatatt(), self.head.to_string(head),
                                self.body.to_string(body))
     coroutine_return(result)
Пример #25
0
 def test_multi(self):
     result = yield multi_async((self.client(b'ciao'),
                                 self.client(b'pippo'),
                                 self.client(b'foo')))
     self.assertEqual(len(result), 3)
     self.assertTrue(b'ciao' in result)
     self.assertTrue(b'pippo' in result)
     self.assertTrue(b'foo' in result)
Пример #26
0
    def content(self, request=None):
        '''Return a :class:`pulsar.Deferred` called once the string is ready.

        This method can be called once only since it invokes the :meth:`stream`
        method.
        '''
        stream = self.stream(request)
        return multi_async(stream).add_callback(self.to_string)
Пример #27
0
 def test_call_at(self):
     ioloop = get_event_loop()
     d1 = pulsar.Deferred()
     d2 = pulsar.Deferred()
     c1 = ioloop.call_at(ioloop.timer()+1, lambda: d1.callback(ioloop.timer()))
     c2 = ioloop.call_later(1, lambda: d2.callback(ioloop.timer()))
     t1, t2 = yield pulsar.multi_async((d1, d2))
     self.assertTrue(t1 <= t2)
Пример #28
0
 def do_stream(self, request):
     # stream the body
     body = multi_async(self.body.stream(request))
     # the body has asynchronous components
     # delay the header untl later
     if not body.done():
         yield self._html(request, body)
     else:
         head = multi_async(self.head.stream(request))
         #
         # header not ready (this should never occur really)
         if not head.done():
             yield self._html(request, body, head)
         else:
             yield self._template % (self.flatatt(),
                                     self.head.to_string(head.result()),
                                     self.body.to_string(body.result()))
Пример #29
0
 def test_call_at(self):
     loop = get_event_loop()
     d1 = Future()
     d2 = Future()
     c1 = loop.call_at(loop.time() + 1, lambda: d1.set_result(loop.time()))
     c2 = loop.call_later(1, lambda: d2.set_result(loop.time()))
     t1, t2 = yield pulsar.multi_async((d1, d2))
     self.assertTrue(t1 <= t2)
Пример #30
0
    def monitor_start(self, monitor):
        '''When the monitor starts load all test classes into the queue'''
        # Create a datastore for this test suite
        if not self.cfg.task_backend:
            server = PulsarDS(bind='127.0.0.1:0', workers=0,
                              key_value_save=[],
                              name='%s_store' % self.name)
            yield server()
            address = 'pulsar://%s:%s' % server.cfg.addresses[0]
        else:
            address = self.cfg.task_backend

        store = create_store(address, pool_size=2, loop=monitor._loop)
        self.get_backend(store)
        loader = self.loader
        tags = self.cfg.labels
        exclude_tags = self.cfg.exclude_labels
        if self.cfg.show_leaks:
            show = show_leaks if self.cfg.show_leaks == 1 else hide_leaks
            self.cfg.set('when_exit', show)
            arbiter = pulsar.arbiter()
            arbiter.cfg.set('when_exit', show)
        try:
            tests = []
            loader.runner.on_start()
            for tag, testcls in loader.testclasses(tags, exclude_tags):
                suite = loader.runner.loadTestsFromTestCase(testcls)
                if suite and suite._tests:
                    tests.append((tag, testcls))
            self._time_start = None
            if tests:
                self.logger.info('loading %s test classes', len(tests))
                monitor.cfg.set('workers', min(self.cfg.workers, len(tests)))
                self._time_start = default_timer()
                queued = []
                self._tests_done = set()
                self._tests_queued = None
                #
                # Bind to the task_done event
                self.backend.bind_event('task_done',
                                        partial(self._test_done, monitor))
                for tag, testcls in tests:
                    r = self.backend.queue_task('test', testcls=testcls,
                                                tag=tag)
                    queued.append(r)
                queued = yield multi_async(queued)
                self.logger.debug('loaded %s test classes', len(tests))
                self._tests_queued = set(queued)
                yield self._test_done(monitor)
            else:   # pragma    nocover
                raise ExitTest('Could not find any tests.')
        except ExitTest as e:   # pragma    nocover
            monitor.stream.writeln(str(e))
            monitor.arbiter.stop()
        except Exception:   # pragma    nocover
            monitor.logger.critical('Error occurred while starting tests',
                                    exc_info=True)
            monitor._loop.call_soon(self._exit, 3)
Пример #31
0
 def test_ping_test_worker(self):
     arbiter = pulsar.get_actor()
     info = arbiter.info()
     test = info['monitors']['test']
     workers = [w['actor']['actor_id'] for w in test['workers']]
     self.assertTrue(workers)
     result = yield multi_async((arbiter.send(w, 'ping') for w in workers))
     self.assertEqual(len(result), len(workers))
     self.assertEqual(result, len(result) * ['pong'])
Пример #32
0
 def test_ping_test_worker(self):
     arbiter = pulsar.get_actor()
     info = arbiter.info()
     test = info['monitors']['test']
     workers = [w['actor']['actor_id'] for w in test['workers']]
     self.assertTrue(workers)
     result = yield multi_async((arbiter.send(w, 'ping') for w in workers))
     self.assertEqual(len(result), len(workers))
     self.assertEqual(result, len(result)*['pong'])
Пример #33
0
 def test_multi(self):
     # need From because this is called by test_client method too
     result = yield From(
         multi_async((self.client(b'ciao'), self.client(b'pippo'),
                      self.client(b'foo'))))
     self.assertEqual(len(result), 3)
     self.assertTrue(b'ciao' in result)
     self.assertTrue(b'pippo' in result)
     self.assertTrue(b'foo' in result)
Пример #34
0
 def test_call_at(self):
     ioloop = get_event_loop()
     d1 = pulsar.Deferred()
     d2 = pulsar.Deferred()
     c1 = ioloop.call_at(ioloop.timer() + 1,
                         lambda: d1.callback(ioloop.timer()))
     c2 = ioloop.call_later(1, lambda: d2.callback(ioloop.timer()))
     t1, t2 = yield pulsar.multi_async((d1, d2))
     self.assertTrue(t1 <= t2)
Пример #35
0
 def _html(self, request, body, head=None):
     if head is None:
         body = yield body
         head = multi_async(self.head.stream(request))
     head = yield head
     result = self._template % (self.flatatt(),
                                self.head.to_string(head),
                                self.body.to_string(body))
     coroutine_return(result)
Пример #36
0
def stream_mapping(value, request):
    result = {}
    async = False
    for key, value in value.items():
        if isinstance(value, String):
            value = value.render(request)
        if is_async(value):
            async = True
        result[key] = value
    return multi_async(result) if async else result
Пример #37
0
def stream_mapping(value, request):
    result = {}
    async = False
    for key, value in value.items():
        if isinstance(value, String):
            value = value.render(request)
        if isawaitable(value):
            async = True
        result[key] = value
    return multi_async(result) if async else result
Пример #38
0
 def test_multi(self):
     d1 = Future()
     d2 = Future()
     d = multi_async([d1, d2, 'bla'])
     self.assertFalse(d.done())
     d2.set_result('first')
     self.assertFalse(d.done())
     d1.set_result('second')
     result = yield from d
     self.assertEqual(result, ['second', 'first', 'bla'])
Пример #39
0
def stream_mapping(value, request=None):
    result = {}
    async = False
    for key, value in iteritems(value):
        if isinstance(value, AsyncString):
            value = value.content(request)
        value = maybe_async(value)
        async = async or isinstance(value, Deferred)
        result[key] = value
    return multi_async(result) if async else result
Пример #40
0
def stream_mapping(value, request=None):
    result = {}
    async = False
    for key, value in iteritems(value):
        if isinstance(value, AsyncString):
            value = value.content(request)
        value = maybe_async(value)
        async = async or isinstance(value, Deferred)
        result[key] = value
    return multi_async(result) if async else result
Пример #41
0
 async def test_multi(self):
     d1 = Future()
     d2 = Future()
     d = multi_async([d1, d2, 'bla'])
     self.assertFalse(d.done())
     d2.set_result('first')
     self.assertFalse(d.done())
     d1.set_result('second')
     result = await d
     self.assertEqual(result, ['second', 'first', 'bla'])
Пример #42
0
 def test_multi(self):
     d1 = Future()
     d2 = Future()
     d = multi_async([d1, d2, "bla"])
     self.assertFalse(d.done())
     d2.set_result("first")
     self.assertFalse(d.done())
     d1.set_result("second")
     result = yield from d
     self.assertEqual(result, ["second", "first", "bla"])
Пример #43
0
Файл: me.py Проект: arhik/pulsar
 def test_multiple_execute(self):
     m = yield from multi_async((send('arbiter', 'run', wait, 1.2),
                                 send('arbiter', 'ping'),
                                 send('arbiter', 'echo', 'ciao!'),
                                 send('arbiter', 'run', wait, 2.1),
                                 send('arbiter', 'echo', 'ciao again!')))
     self.assertTrue(m[0] >= 1.1)
     self.assertEqual(m[1], 'pong')
     self.assertEqual(m[2], 'ciao!')
     self.assertTrue(m[3] >= 2.0)
     self.assertEqual(m[4], 'ciao again!')
Пример #44
0
 def test_multiple_execute(self):
     m = yield from multi_async(
         (send('arbiter', 'run', wait, 1.2), send('arbiter', 'ping'),
          send('arbiter', 'echo',
               'ciao!'), send('arbiter', 'run', wait,
                              2.1), send('arbiter', 'echo', 'ciao again!')))
     self.assertTrue(m[0] >= 1.1)
     self.assertEqual(m[1], 'pong')
     self.assertEqual(m[2], 'ciao!')
     self.assertTrue(m[3] >= 2.0)
     self.assertEqual(m[4], 'ciao again!')
Пример #45
0
    def render(self, request=None):
        '''Render this string.

        This method returns a string or a :class:`.Future` which results
        in a string.
        '''
        stream = multi_async(self.stream(request))
        if stream.done():
            return self.to_string(stream.result())
        else:
            return chain_future(stream, callback=self.to_string)
Пример #46
0
    def http_response(self, request):
        '''Return a coroutine which results in a :class:`.WsgiResponse`.

        This method asynchronously wait for :meth:`stream` and subsequently
        returns a :class:`.WsgiResponse`.
        '''
        response = request.response
        response.content_type = self.content_type
        body = yield multi_async(self.stream(request))
        response.content = self.to_string(body)
        coroutine_return(response)
Пример #47
0
    def render(self, request=None):
        '''Render this string.

        This method returns a string or a :class:`~asyncio.Future` which
        results in a string. On the other hand, the callable method of
        a :class:`.AsyncString` **always** returns a :class:`~asyncio.Future`.
        '''
        stream = multi_async(self.stream(request))
        if stream.done():
            return self.to_string(stream.result())
        else:
            return chain_future(stream, callback=self.to_string)
Пример #48
0
    def render(self, request=None):
        '''Render this string.

        This method returns a string or a :class:`~asyncio.Future` which
        results in a string. On the other hand, the callable method of
        a :class:`.AsyncString` **always** returns a :class:`~asyncio.Future`.
        '''
        stream = multi_async(self.stream(request))
        if stream.done():
            return self.to_string(stream.result())
        else:
            return chain_future(stream, callback=self.to_string)
Пример #49
0
 def test_get(self):
     models = self.mapper
     d = models.register(self.structure())
     session = models.session()
     with session.begin() as t:
         d = t.add(d)
         d['baba'] = 'foo'
         d['bee'] = 3
         self.assertEqual(len(d.cache.toadd), 2)
     yield t.on_result
     result = yield multi_async((d['baba'], d.get('bee'), d.get('ggg'),
                                 d.get('ggg', 1)))
     self.assertEqual(result, ['foo', 3, None, 1])
     yield self.async.assertRaises(KeyError, lambda : d['gggggg'])
Пример #50
0
 def test_get(self):
     models = self.mapper
     d = models.register(self.structure())
     session = models.session()
     with session.begin() as t:
         d = t.add(d)
         d['baba'] = 'foo'
         d['bee'] = 3
         self.assertEqual(len(d.cache.toadd), 2)
     yield t.on_result
     result = yield multi_async(
         (d['baba'], d.get('bee'), d.get('ggg'), d.get('ggg', 1)))
     self.assertEqual(result, ['foo', 3, None, 1])
     yield self. async .assertRaises(KeyError, lambda: d['gggggg'])
Пример #51
0
    def commit(self):
        '''Commit the transaction.

        This method can be invoked once only otherwise an
        :class:`.InvalidOperation` occurs.

        :return: a :class:`~asyncio.Future` which results in this transaction
        '''
        if self._executed is None:
            fut = multi_async((store.execute_transaction(commands) for
                               store, commands in iteritems(self._commands)))
            self._executed = fut
            return self._executed
        else:
            raise InvalidOperation('Transaction already executed.')
Пример #52
0
 def _unwind(self):
     is_bound = self.is_bound
     if is_bound:
         self._cleaned_data = {}
         self._errors = {}
     rawdata = self.rawdata
     yield multi_async(self._clean_fields(rawdata))
     if is_bound:
         if not self._errors:
             # Invoke the form clean method.
             # Useful for cross fields checking
             try:
                 yield self.clean()
             except ValidationError as err:
                 self._form_message(self._errors, FORMKEY, err)
         if self._errors:
             del self._cleaned_data
Пример #53
0
    def commit(self):
        """Commit the transaction.

        This method can be invoked once only otherwise an
        :class:`.InvalidOperation` occurs.

        :return: a :class:`~asyncio.Future` which results in the list
            of  transaction
        """
        if self._executed is None:
            executed = dict(
                ((store, store.execute_transaction(commands)) for store, commands in iteritems(self._commands))
            )
            self._executed = multi_async(executed, loop=self._loop)
            return self._executed
        else:
            raise InvalidOperation("Transaction already executed.")
Пример #54
0
 def test_shutdown(self):
     # Test an error
     pool = greenio.GreenPool()
     yield from self. async .assertEqual(pool.submit(lambda: 'OK'), 'OK')
     self.assertEqual(len(pool._greenlets), 1)
     self.assertEqual(len(pool._available), 1)
     a = pool.submit(lambda: 'a')
     b = pool.submit(lambda: 'b')
     self.assertEqual(len(pool._greenlets), 2)
     self.assertEqual(len(pool._available), 0)
     result = yield from multi_async([a, b])
     self.assertEqual(result[0], 'a')
     self.assertEqual(result[1], 'b')
     self.assertEqual(len(pool._greenlets), 2)
     self.assertEqual(len(pool._available), 2)
     yield from pool.shutdown()
     self.assertEqual(len(pool._greenlets), 0)
     self.assertEqual(len(pool._available), 0)
Пример #55
0
    def run(self, runner, testcls, all_tests, cfg):
        '''Run all test functions from the :attr:`testcls`.

        It uses the following algorithm:

        * Run the class method ``setUpClass`` of :attr:`testcls` if defined,
          unless the test class should be skipped
        * Call :meth:`run_test` for each test functions in :attr:`testcls`
        * Run the class method ``tearDownClass`` of :attr:`testcls` if defined,
          unless the test class should be skipped.
        '''
        runner.startTestClass(testcls)
        error = None
        timeout = cfg.test_timeout
        sequential = getattr(testcls, '_sequential_execution', cfg.sequential)
        skip_tests = getattr(testcls, '__unittest_skip__', False)
        if not skip_tests:
            error = yield self._run(runner,
                                    testcls,
                                    'setUpClass',
                                    timeout,
                                    add_err=False)
        # run the tests
        if not error:
            if sequential:
                # Loop over all test cases in class
                for test in all_tests:
                    yield self.run_test(test, runner, cfg)
            else:
                all = (self.run_test(test, runner, cfg) for test in all_tests)
                yield multi_async(all)
        else:
            for test in all_tests:
                runner.startTest(test)
                self.add_failure(test, runner, error[0], error[1])
                runner.stopTest(test)
        if not skip_tests:
            yield self._run(runner,
                            testcls,
                            'tearDownClass',
                            timeout,
                            add_err=False)
        yield runner.result
        runner.stopTestClass(testcls)
Пример #56
0
 def test_run_producerconsumer(self):
     '''A task which produce other tasks'''
     sample = 5
     r = yield self.proxy.run_new_task(jobname='standarddeviation',
                                       sample=sample, size=100)
     self.assertTrue(r)
     r = yield self.proxy.wait_for_task(r)
     self.assertEqual(r['status'], tasks.SUCCESS)
     self.assertEqual(r['result'], 'produced %s new tasks' % sample)
     self.assertTrue(tasks.nice_task_message(r))
     # We check for the tasks created
     created = yield self.proxy.get_tasks(from_task=r['id'])
     self.assertEqual(len(created), sample)
     stasks = []
     for task in created:
         stasks.append(self.proxy.wait_for_task(task['id']))
     created = yield multi_async(stasks)
     self.assertEqual(len(created), sample)
     for task in created:
         self.assertEqual(task['status'], tasks.SUCCESS)
Пример #57
0
    def _execute_request(self, request):
        response = request.response

        try:
            data = yield from as_coroutine(request.body_data())
        except ValueError:
            res, status = self._get_error_and_status(InvalidRequest(
                status=415, msg='Content-Type must be application/json'))
        else:
            # if it's batch request
            if isinstance(data, list):
                status = 200

                tasks = [self._call(request, each) for each in data]
                yield from multi_async(tasks, raise_on_error=False)
                res = [each.result()[0] for each in tasks]
            else:
                res, status = yield from self._call(request, data)

        response.status_code = status
        return res
Пример #58
0
    def render(self, request=None, callback=None):
        '''Render this string.

        This method returns a string or a :class:`~asyncio.Future` which
        results in a string. On the other hand, the callable method of
        a :class:`.String` **always** returns a :class:`~asyncio.Future`.
        '''
        stream = []
        async = False
        for data in self.stream(request):
            if isawaitable(data):
                async = True
            stream.append(data)

        if not callback:
            callback = self.to_string

        if async:
            return chain_future(multi_async(stream), callback=callback)
        else:
            return callback(stream)