4
0
mirror of https://github.com/nerfstudio-project/nerfstudio.git synced 2026-11-11 02:24:38 +08:00
nerfstudio/scripts/viewer/sync_viser_message_defs.py
2023-04-27 12:07:44 -07:00

55 lines
1.7 KiB
Python

"""Generate viser message definitions for TypeScript, by parsing Python dataclasses."""
import json
import pathlib
from datetime import datetime
import tyro
from viser.infra import generate_typescript_interfaces
from nerfstudio.viewer.viser import NerfstudioMessage
def main() -> None:
"""Generate viser message definitions for TypeScript, by parsing Python dataclasses."""
# Generate typescript source.
defs = generate_typescript_interfaces(NerfstudioMessage)
# Write to file.
# Three parents from nerfstudio/scripts/viewer/sync_viser_message_defs.py:
# - nerfstudio/scripts/viewer/
# - nerfstudio/scripts/
# - nerfstudio/
target_path = pathlib.Path(__file__).absolute().parent.parent.parent / pathlib.Path(
"nerfstudio/viewer/app/src/modules/WebSocket/ViserMessages.tsx"
)
assert target_path.exists()
old_defs = target_path.read_text(encoding="utf_8")
if old_defs != defs:
target_path.write_text(defs, encoding="utf_8")
with open("nerfstudio/viewer/app/package.json", "r", encoding="utf_8") as f:
data = json.load(f)
now = datetime.now()
data["version"] = now.strftime("%y-%m-%d") + "-0"
with open("nerfstudio/viewer/app/package.json", "w", encoding="utf_8") as f:
json.dump(data, f, indent=2)
print(f"Wrote updates to {target_path}")
print(f"Current viewer version is now {data['version']}")
else:
print("No update to messages.")
def entrypoint() -> None:
"""Entrypoint for use with pyproject scripts."""
# All entrypoints must currently be tyro CLIs.
tyro.cli(main)
if __name__ == "__main__":
entrypoint()