Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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())