Exemplo n.º 1
0
    def run(self):
        is_debug = self.log.loglevel == logging.DEBUG
        protocol = (WebSocketProtocol if self.app.callable.websocket_enabled
                    else HttpProtocol)
        self._server_settings = self.app.callable._helper(
            loop=self.loop,
            debug=is_debug,
            protocol=protocol,
            ssl=self.ssl_context,
            run_async=True)
        self._server_settings['signal'] = self.signal
        self._server_settings.pop('sock')
        trigger_events(self._server_settings.get('before_start', []),
                       self.loop)
        self._server_settings['before_start'] = ()

        self._runner = asyncio.ensure_future(self._run(), loop=self.loop)
        try:
            self.loop.run_until_complete(self._runner)
            self.app.callable.is_running = True
            trigger_events(self._server_settings.get('after_start', []),
                           self.loop)
            self.loop.run_until_complete(self._check_alive())
            trigger_events(self._server_settings.get('before_stop', []),
                           self.loop)
            self.loop.run_until_complete(self.close())
        finally:
            trigger_events(self._server_settings.get('after_stop', []),
                           self.loop)
            self.loop.close()

        sys.exit(self.exit_code)
Exemplo n.º 2
0
    def run(self):
        is_debug = self.log.loglevel == logging.DEBUG
        protocol = (
            self.websocket_protocol
            if self.app.callable.websocket_enabled
            else self.http_protocol
        )

        self._server_settings = self.app.callable._helper(
            loop=self.loop,
            debug=is_debug,
            protocol=protocol,
            ssl=self.ssl_context,
            run_async=True,
        )
        self._server_settings["signal"] = self.signal
        self._server_settings.pop("sock")
        trigger_events(
            self._server_settings.get("before_start", []), self.loop
        )
        self._server_settings["before_start"] = ()

        self._runner = asyncio.ensure_future(self._run(), loop=self.loop)
        try:
            self.loop.run_until_complete(self._runner)
            self.app.callable.is_running = True
            trigger_events(
                self._server_settings.get("after_start", []), self.loop
            )
            self.loop.run_until_complete(self._check_alive())
            trigger_events(
                self._server_settings.get("before_stop", []), self.loop
            )
            self.loop.run_until_complete(self.close())
        except BaseException:
            traceback.print_exc()
        finally:
            try:
                trigger_events(
                    self._server_settings.get("after_stop", []), self.loop
                )
            except BaseException:
                traceback.print_exc()
            finally:
                self.loop.close()

        sys.exit(self.exit_code)
Exemplo n.º 3
0
    def run(self):
        is_debug = self.log.loglevel == logging.DEBUG
        protocol = (
            self.websocket_protocol
            if self.app.callable.websocket_enabled
            else self.http_protocol
        )
        self._server_settings = self.app.callable._helper(
            loop=self.loop,
            debug=is_debug,
            protocol=protocol,
            ssl=self.ssl_context,
            run_async=True,
        )
        self._server_settings["signal"] = self.signal
        self._server_settings.pop("sock")
        trigger_events(
            self._server_settings.get("before_start", []), self.loop
        )
        self._server_settings["before_start"] = ()

        self._runner = asyncio.ensure_future(self._run(), loop=self.loop)
        try:
            self.loop.run_until_complete(self._runner)
            self.app.callable.is_running = True
            trigger_events(
                self._server_settings.get("after_start", []), self.loop
            )
            self.loop.run_until_complete(self._check_alive())
            trigger_events(
                self._server_settings.get("before_stop", []), self.loop
            )
            self.loop.run_until_complete(self.close())
        except BaseException:
            traceback.print_exc()
        finally:
            try:
                trigger_events(
                    self._server_settings.get("after_stop", []), self.loop
                )
            except BaseException:
                traceback.print_exc()
            finally:
                self.loop.close()

        sys.exit(self.exit_code)
Exemplo n.º 4
0
    def run(self):
        is_debug = self.log.loglevel == logging.DEBUG
        protocol = (WebSocketProtocol
                    if self.app.callable.websocket_enabled else HttpProtocol)
        self._server_settings = self.app.callable._helper(loop=self.loop,
                                                          debug=is_debug,
                                                          protocol=protocol,
                                                          ssl=self.ssl_context,
                                                          run_async=True)
        self._server_settings['signal'] = self.signal
        self._server_settings.pop('sock')
        trigger_events(self._server_settings.get('before_start', []),
                       self.loop)
        self._server_settings['before_start'] = ()

        self._runner = asyncio.ensure_future(self._run(), loop=self.loop)
        try:
            self.loop.run_until_complete(self._runner)
            self.app.callable.is_running = True
            trigger_events(self._server_settings.get('after_start', []),
                           self.loop)
            self.loop.run_until_complete(self._check_alive())
            trigger_events(self._server_settings.get('before_stop', []),
                           self.loop)
            self.loop.run_until_complete(self.close())
        except:
            traceback.print_exc()
        finally:
            try:
                trigger_events(self._server_settings.get('after_stop', []),
                               self.loop)
            except:
                traceback.print_exc()
            finally:
                self.loop.close()

        sys.exit(self.exit_code)
Exemplo n.º 5
0
    def _sanic_endpoint_test(self,
                             method='get',
                             uri='/',
                             gather_request=True,
                             debug=False,
                             server_kwargs={},
                             *request_args,
                             **request_kwargs):
        loop = self._loop
        results = [None, None]
        exceptions = []
        do_kill_server = request_kwargs.pop('end_server', False)
        if gather_request:

            def _collect_request(request):
                if results[0] is None:
                    results[0] = request

            self.app.request_middleware.appendleft(_collect_request)

        @self.app.listener('after_server_start')
        async def _collect_response(loop):
            try:
                if do_kill_server:
                    request_kwargs['end_session'] = True
                response = await self._local_request(method, uri,
                                                     *request_args,
                                                     **request_kwargs)
                results[-1] = response
            except Exception as e2:
                import traceback
                traceback.print_tb(e2.__traceback__)
                exceptions.append(e2)
            # Don't stop here! self.app.stop()

        if self._server is not None:
            _server = self._server
        else:
            _server_co = self.app.create_server(host=HOST,
                                                debug=debug,
                                                port=self.app.test_port,
                                                **server_kwargs)

            server.trigger_events(self.app.listeners['before_server_start'],
                                  loop)

            try:
                loop._stopping = False
                http_server = loop.run_until_complete(_server_co)
            except Exception as e1:
                import traceback
                traceback.print_tb(e1.__traceback__)
                raise e1
            self._server = _server = http_server
        server.trigger_events(self.app.listeners['after_server_start'], loop)
        self.app.listeners['after_server_start'].pop()

        if do_kill_server:
            try:
                _server.close()
                self._server = None
                loop.run_until_complete(_server.wait_closed())
                self.app.stop()
            except Exception as e3:
                import traceback
                traceback.print_tb(e3.__traceback__)
                exceptions.append(e3)
        if exceptions:
            raise ValueError("Exception during request: {}".format(exceptions))

        if gather_request:
            self.app.request_middleware.pop()
            try:
                request, response = results
                return request, response
            except:
                raise ValueError(
                    "Request and response object expected, got ({})".format(
                        results))
        else:
            try:
                return results[-1]
            except:
                raise ValueError(
                    "Request object expected, got ({})".format(results))
Exemplo n.º 6
0
    def _sanic_endpoint_test(
        self,
        method="get",
        uri="/",
        gather_request=True,
        debug=False,
        server_kwargs=None,
        *request_args,
        **request_kwargs,
    ):
        loop = self._loop
        results = [None, None]
        exceptions = []
        server_kwargs = server_kwargs or {"return_asyncio_server": True}
        if gather_request:

            def _collect_request(request):
                if results[0] is None:
                    results[0] = request

            self.app.request_middleware.appendleft(_collect_request)

        if uri.startswith(
            ("http:", "https:", "ftp:", "ftps://", "//", "ws:", "wss:")):
            url = uri
        else:
            uri = uri if uri.startswith("/") else f"/{uri}"
            scheme = "http"
            url = f"{scheme}://{HOST}:{PORT}{uri}"

        @self.app.listener("after_server_start")
        async def _collect_response(loop):
            try:
                response = await self._local_request(method, url,
                                                     *request_args,
                                                     **request_kwargs)
                results[-1] = response
            except Exception as e2:
                exceptions.append(e2)

        if self._server is not None:
            _server = self._server
        else:
            _server_co = self.app.create_server(host=HOST,
                                                debug=debug,
                                                port=PORT,
                                                **server_kwargs)

            server.trigger_events(self.app.listeners["before_server_start"],
                                  loop)

            try:
                loop._stopping = False
                _server = loop.run_until_complete(_server_co)
            except Exception as e1:
                raise e1
            self._server = _server
        server.trigger_events(self.app.listeners["after_server_start"], loop)
        self.app.listeners["after_server_start"].pop()

        if exceptions:
            raise ValueError(f"Exception during request: {exceptions}")

        if gather_request:
            self.app.request_middleware.pop()
            try:
                request, response = results
                return request, response
            except Exception:
                raise ValueError(
                    f"Request and response object expected, got ({results})")
        else:
            try:
                return results[-1]
            except Exception:
                raise ValueError(f"Request object expected, got ({results})")
Exemplo n.º 7
0
    def _sanic_endpoint_test(
        self,
        method="get",
        uri="/",
        gather_request=True,
        debug=False,
        server_kwargs={"return_asyncio_server": True},
        *request_args,
        **request_kwargs
    ):
        loop = self._loop
        results = [None, None]
        exceptions = []
        do_kill_server = request_kwargs.pop("end_server", False)
        if gather_request:

            def _collect_request(request):
                if results[0] is None:
                    results[0] = request

            self.app.request_middleware.appendleft(_collect_request)

        @self.app.listener("after_server_start")
        async def _collect_response(loop):
            try:
                if do_kill_server:
                    request_kwargs["end_session"] = True
                response = await self._local_request(
                    method, uri, *request_args, **request_kwargs
                )
                results[-1] = response
            except Exception as e2:
                import traceback

                traceback.print_tb(e2.__traceback__)
                exceptions.append(e2)
            # Don't stop here! self.app.stop()

        if self._server is not None:
            _server = self._server
        else:
            _server_co = self.app.create_server(
                host=HOST, debug=debug, port=PORT, **server_kwargs
            )

            server.trigger_events(
                self.app.listeners["before_server_start"], loop
            )

            try:
                loop._stopping = False
                http_server = loop.run_until_complete(_server_co)
            except Exception as e1:
                import traceback

                traceback.print_tb(e1.__traceback__)
                raise e1
            self._server = _server = http_server
        server.trigger_events(self.app.listeners["after_server_start"], loop)
        self.app.listeners["after_server_start"].pop()

        if do_kill_server:
            try:
                _server.close()
                self._server = None
                loop.run_until_complete(_server.wait_closed())
                self.app.stop()
            except Exception as e3:
                import traceback

                traceback.print_tb(e3.__traceback__)
                exceptions.append(e3)
        if exceptions:
            raise ValueError("Exception during request: {}".format(exceptions))

        if gather_request:
            self.app.request_middleware.pop()
            try:
                request, response = results
                return request, response
            except Exception:
                raise ValueError(
                    "Request and response object expected, got ({})".format(
                        results
                    )
                )
        else:
            try:
                return results[-1]
            except Exception:
                raise ValueError(
                    "Request object expected, got ({})".format(results)
                )