| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- from dataclasses import dataclass
- import os
- import shutil
- from typing import List
- from jinja2 import Environment, FileSystemLoader
- from .filters import to_dash_plural, to_snake_case, to_plural, to_underscore_plural
- def main():
- cfg = Config(
- class_names=[
- "Worker",
- "Model",
- "ModelInstance",
- "ModelFile",
- "User",
- "InferenceBackend",
- "Benchmark",
- "ModelRouteTarget",
- ]
- )
- env = Environment(loader=FileSystemLoader(cfg.template_dir), auto_reload=True)
- env.filters["to_snake_case"] = to_snake_case
- env.filters["to_plural"] = to_plural
- env.filters["to_underscore_plural"] = to_underscore_plural
- env.filters["to_dash_plural"] = to_dash_plural
- reset(cfg)
- gen_http_clients(env, cfg)
- gen_clients(env, cfg)
- gen_clientset(env, cfg)
- write_init(cfg)
- print("Code gen succeeded!")
- @dataclass
- class Config:
- template_dir: str = os.path.join(os.path.dirname(__file__), "templates")
- output_dir: str = "gpustack/client"
- class_names: List[str] = None
- def gen_clients(env: Environment, cfg: Config):
- template = env.get_template("client.py.jinja")
- for class_name in cfg.class_names:
- data = {
- "class_name": class_name,
- }
- client_code = template.render(data)
- with open(
- f"{cfg.output_dir}/generated_{to_snake_case(class_name)}_client.py", "w"
- ) as f:
- f.write(client_code)
- def gen_clientset(env: Environment, cfg: Config):
- template = env.get_template("clientset.py.jinja")
- data = {
- "class_names": cfg.class_names,
- }
- client_code = template.render(data)
- with open(f"{cfg.output_dir}/generated_clientset.py", "w") as f:
- f.write(client_code)
- def gen_http_clients(env: Environment, cfg: Config):
- shutil.copyfile(
- f"{cfg.template_dir}/http_client.py.jinja",
- f"{cfg.output_dir}/generated_http_client.py",
- )
- def write_init(cfg: Config):
- with open(f"{cfg.output_dir}/__init__.py", "w") as f:
- f.write(
- """from .generated_clientset import ClientSet
- __all__ = ["ClientSet"]
- """
- )
- def reset(cfg: Config):
- output_dir = cfg.output_dir
- if os.path.exists(output_dir):
- for file in os.listdir(output_dir):
- if file == "__init__.py" or file.startswith("generated_"):
- os.remove(os.path.join(output_dir, file))
- if not os.path.exists(output_dir):
- os.makedirs(output_dir)
- if __name__ == "__main__":
- main()
|