From 9ae7a68c435961159b7a1d2543a6f9e8bc585d73 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 2 May 2025 11:21:58 +0500 Subject: [PATCH] Display actual Bonsai version for live repo (reuse last commit date) --- src/bonsai/bonsai/__init__.py | 7 +++++++ src/bonsai/bonsai/tool/blender.py | 26 +++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/bonsai/bonsai/__init__.py b/src/bonsai/bonsai/__init__.py index 561b76f67e..829f859332 100644 --- a/src/bonsai/bonsai/__init__.py +++ b/src/bonsai/bonsai/__init__.py @@ -252,6 +252,12 @@ if IN_BLENDER: ifcopenshell.api.add_pre_listener("*", "action_logger", log_api) + def purge_cache(): + """Purge cache left from previous session (e.g. after reload or update).""" + import bonsai.tool as tool + + tool.Blender.get_bonsai_version.cache_clear() + def register(): if platform.system() == "Windows": clean_up_dlls_safe_links() @@ -269,6 +275,7 @@ if IN_BLENDER: bonsai.REINSTALLED_BBIM_VERSION = current_version bonsai.bim.register() + purge_cache() def unregister(): if platform.system() == "Windows": diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index 463d621174..0150fc19a4 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -24,6 +24,7 @@ import json import os import platform import subprocess +import contextlib import numpy as np import numpy.typing as npt from ifcopenshell import entity_instance @@ -34,9 +35,10 @@ import bonsai.tool as tool import bonsai.bim import types import importlib +from datetime import datetime from mathutils import Vector from pathlib import Path -from functools import lru_cache +from functools import lru_cache, cache from bonsai.bim.ifc import IFC_CONNECTED_TYPE from typing import Any, Optional, Union, Literal, Iterable, Callable, TypeVar, Generator, TYPE_CHECKING from typing_extensions import assert_never @@ -1246,9 +1248,27 @@ class Blender(bonsai.core.tool.Blender): return bonsai.get_last_commit_hash() @classmethod + @cache def get_bonsai_version(cls) -> str: - bbim = cls.get_bbim_extension_package() - version = bbim.bbim_semver["version"] + version = None + + # Try to retrieve actual version for live-dev environment. + with contextlib.suppress(Exception): + import git + + path = Path(__file__).resolve().parent + repo = git.Repo(str(path), search_parent_directories=True) + repo_path = repo.working_tree_dir + assert repo_path + version_ = (Path(repo_path) / "VERSION").read_text().strip() + commit_date = bonsai.get_last_commit_date() + assert commit_date + commit_date = datetime.fromisoformat(commit_date) + version = f"{version_}-alpha{commit_date.strftime('%y%m%d')}" + + if version is None: + bbim = cls.get_bbim_extension_package() + version = bbim.bbim_semver["version"] if commit_hash := cls.get_last_commit_hash(): version += f"-{commit_hash}" return version