#!/usr/bin/env python | |
import importlib.metadata | |
import os | |
import pathlib | |
import grpc_tools # type: ignore | |
from grpc_tools import protoc # type: ignore | |
from packaging import version | |
def get_pip_package_version(package_name: str) -> str: | |
try: | |
return importlib.metadata.version(package_name) | |
except importlib.metadata.PackageNotFoundError: | |
raise ValueError(f"Package `{package_name}` not found") | |
protobuf_version = version.Version(get_pip_package_version("protobuf")) | |
proto_root = os.path.join(os.path.dirname(grpc_tools.__file__), "_proto") | |
tmp_out: pathlib.Path = pathlib.Path(f"wandb/proto/v{protobuf_version.major}/") | |
os.chdir("../..") | |
for proto_file in [ | |
"wandb_base.proto", | |
"wandb_internal.proto", | |
"wandb_settings.proto", | |
"wandb_telemetry.proto", | |
"wandb_server.proto", | |
]: | |
ret = protoc.main( | |
( | |
"", | |
"-I", | |
proto_root, | |
"-I", | |
".", | |
f"--python_out={tmp_out}", | |
f"--mypy_out={tmp_out}", | |
f"wandb/proto/{proto_file}", | |
) | |
) | |
assert not ret | |
# clean up tmp dirs | |
for p in (tmp_out / "wandb" / "proto").glob("*pb2*"): | |
p.rename(tmp_out / p.name) | |
os.rmdir(tmp_out / "wandb" / "proto") | |
os.rmdir(tmp_out / "wandb") | |