|
from __future__ import annotations |
|
|
|
import shutil |
|
import pathlib |
|
from typing import Any |
|
|
|
from hatchling.builders.hooks.plugin.interface import BuildHookInterface |
|
|
|
|
|
def copy_js_code(root: str | pathlib.Path): |
|
NOT_COMPONENT = [ |
|
"app", |
|
"node_modules", |
|
"storybook", |
|
"playwright-report", |
|
"workbench", |
|
"tooltils", |
|
"component-test", |
|
"core", |
|
"spa", |
|
] |
|
for entry in (pathlib.Path(root) / "js").iterdir(): |
|
if ( |
|
entry.is_dir() |
|
and not str(entry.name).startswith("_") |
|
and not str(entry.name) in NOT_COMPONENT |
|
): |
|
|
|
def ignore(s, names): |
|
ignored = [] |
|
for n in names: |
|
if ( |
|
n.startswith("CHANGELOG") |
|
or n.startswith("README.md") |
|
or n.startswith("node_modules") |
|
or ".test." in n |
|
or ".stories." in n |
|
or ".spec." in n |
|
): |
|
ignored.append(n) |
|
return ignored |
|
|
|
shutil.copytree( |
|
str(entry), |
|
str(pathlib.Path("gradio") / "_frontend_code" / entry.name), |
|
ignore=ignore, |
|
dirs_exist_ok=True, |
|
) |
|
shutil.copytree( |
|
str(pathlib.Path(root) / "client" / "js"), |
|
str(pathlib.Path("gradio") / "_frontend_code" / "client"), |
|
ignore=lambda d, names: ["node_modules", "test"], |
|
dirs_exist_ok=True, |
|
) |
|
|
|
|
|
class BuildHook(BuildHookInterface): |
|
def initialize(self, version: str, build_data: dict[str, Any]) -> None: |
|
copy_js_code(self.root) |
|
|
|
|
|
if __name__ == "__main__": |
|
copy_js_code(pathlib.Path("..").resolve()) |
|
|