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)
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)
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)
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))
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})")
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) )