gradio/js/app/test/utils.ts
Freddy Boulton 755157f99c
Do not reload code inside gr.NO_RELOAD context (#7684)
* Add code

* Copy files

* I think its working

* Tidy up

* add changeset

* do not change demos

* test

* Don't copy files

* Add code

* lint

* Add reload mode e2e test

* Reload mode test

* add changeset

* add changeset

* Use NO_RELOAD

* add no reload to docs

* add changeset

* Fix docs

* handle else statements. No need to edit string

* Fix typos

* Use compile

* Do not use unparse

* notebook

* Documentation comments

* Fix top-package import without having to delete all modules

* Revert demo calculator

* Typo guides

* Fix website

---------

Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com>
Co-authored-by: aliabd <ali.si3luwa@gmail.com>
Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
2024-03-21 15:59:53 -04:00

62 lines
1.3 KiB
TypeScript

import { spawn } from "node:child_process";
import type { ChildProcess } from "child_process";
export function kill_process(process: ChildProcess) {
process.kill("SIGKILL");
}
type LaunchAppBackgroundReturn = {
port: number;
_process: ChildProcess;
};
export const launch_app_background = async (
command: string,
cwd?: string
): Promise<LaunchAppBackgroundReturn> => {
const _process = spawn(command, {
shell: true,
stdio: "pipe",
cwd: cwd || process.cwd(),
env: {
...process.env,
PYTHONUNBUFFERED: "true"
}
});
_process.stdout.setEncoding("utf8");
_process.stderr.setEncoding("utf8");
_process.on("exit", () => kill_process(_process));
_process.on("close", () => kill_process(_process));
_process.on("disconnect", () => kill_process(_process));
let port;
function std_out(data: any) {
const _data: string = data.toString();
console.log(_data);
const portRegExp = /:(\d+)/;
const match = portRegExp.exec(_data);
if (match && match[1] && _data.includes("Running on local URL:")) {
port = parseInt(match[1], 10);
}
}
function std_err(data: any) {
const _data: string = data.toString();
console.log(_data);
}
_process.stdout.on("data", std_out);
_process.stderr.on("data", std_err);
while (!port) {
await new Promise((r) => setTimeout(r, 1000));
}
return { port: port, _process: _process };
};