async def api_spawn(app, **kwargs) -> None: config = Config(app, **kwargs) server = Server(config=config) if (config.reload or config.workers > 1) and not isinstance(app, str): logger = logging.getLogger("uvicorn.error") logger.warn( "You must pass the application as an import string to enable 'reload' or 'workers'." ) sys.exit(1) if config.should_reload or config.workers > 1: logger = logging.getLogger("s4.error") logger.warn("S4 not supposed to use 'workers' and 'reload'.") sys.exit(1) else: config.setup_event_loop() await server.serve()
def setup_app_and_run(directory, config_path, runner, tool_override): uvicorn_config = Config(app, host="127.0.0.1", port=8889, log_level="info") uvicorn_config.setup_event_loop() server = Server(uvicorn_config) app.loop = asyncio.get_event_loop() # EM app.em = EventEmitter(app.loop) config = read_toml_config(config_path, tool_override) # TODO: Re-add support for multiple test suites app.suite = TestSuite(config["name"], runner, app.em, config) app.suites: Dict[str, TestSuite] = {config["name"]: app.suite} # Tests app.tests = Tests(app.suites) app.ws_client = WebsocketClients() app.directory = directory async def forward_notifications(message): LOGGER.debug("Forwarding to %d clients: %r", len(app.ws_client.clients), message) data = { "jsonrpc": "2.0", "id": None, "method": "test", "params": message } await app.ws_client.broadcast(json.dumps(data)) app.em.register(forward_notifications) app.em.register(process_notification) app.loop.run_until_complete(server.serve())