12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- """Custom build hook for Hatch."""
- import importlib.util
- import pathlib
- import subprocess
- import sys
- from typing import Any
- from hatchling.builders.hooks.plugin.interface import BuildHookInterface
- class CustomBuilder(BuildHookInterface):
- """Custom build hook for Hatch."""
- PLUGIN_NAME = "custom"
- def marker(self) -> pathlib.Path:
- """Get the marker file path.
- Returns:
- The marker file path.
- """
- return (
- pathlib.Path(self.directory)
- / f".reflex-{self.metadata.version}.pyi_generated"
- )
- def finalize(
- self, version: str, build_data: dict[str, Any], artifact_path: str
- ) -> None:
- """Finalize the build process.
- Args:
- version: The version of the package.
- build_data: The build data.
- artifact_path: The path to the artifact.
- """
- if self.marker().exists():
- return
- if importlib.util.find_spec("pre_commit") and importlib.util.find_spec("toml"):
- import json
- import toml
- import yaml
- reflex_dir = pathlib.Path(__file__).parent.parent
- pre_commit_config = json.loads(
- json.dumps(
- toml.load(reflex_dir / "pyproject.toml")["tool"]["pre-commit"]
- )
- )
- (reflex_dir / ".pre-commit-config.yaml").write_text(
- yaml.dump(pre_commit_config), encoding="utf-8"
- )
- if not (pathlib.Path(self.root) / "scripts").exists():
- return
- for file in (pathlib.Path(self.root) / "reflex").rglob("**/*.pyi"):
- file.unlink(missing_ok=True)
- subprocess.run(
- [sys.executable, "-m", "reflex.utils.pyi_generator"],
- check=True,
- )
- self.marker().touch()
|