mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-16 21:42:19 +00:00
More reliable way to get bbim package name #5214
See #5214 for details, can't rely on 'bpy.context.preferences.addons' as it may contain a missing addons too (if addon was manually uninstalled and it won't be able to load but it will still appear in 'addons').
This commit is contained in:
@@ -59,6 +59,7 @@ last_error = None
|
|||||||
last_actions: deque = deque(maxlen=10)
|
last_actions: deque = deque(maxlen=10)
|
||||||
FIRST_INSTALLED_BBIM_VERSION: Union[str, None] = None
|
FIRST_INSTALLED_BBIM_VERSION: Union[str, None] = None
|
||||||
REINSTALLED_BBIM_VERSION: Union[str, None] = None
|
REINSTALLED_BBIM_VERSION: Union[str, None] = None
|
||||||
|
REGISTERED_BBIM_PACKAGE: str
|
||||||
|
|
||||||
|
|
||||||
def initialize_bbim_semver():
|
def initialize_bbim_semver():
|
||||||
@@ -238,6 +239,10 @@ if IN_BLENDER:
|
|||||||
if platform.system() == "Windows":
|
if platform.system() == "Windows":
|
||||||
clean_up_dlls_safe_links()
|
clean_up_dlls_safe_links()
|
||||||
|
|
||||||
|
import bonsai
|
||||||
|
|
||||||
|
bonsai.REGISTERED_BBIM_PACKAGE = __package__
|
||||||
|
|
||||||
import bonsai.bim
|
import bonsai.bim
|
||||||
|
|
||||||
current_version = bbim_semver["version"]
|
current_version = bbim_semver["version"]
|
||||||
|
|||||||
@@ -1114,10 +1114,7 @@ class Blender(bonsai.core.tool.Blender):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_blender_addon_package_name(cls) -> str:
|
def get_blender_addon_package_name(cls) -> str:
|
||||||
for package_name in bpy.context.preferences.addons.keys():
|
return bonsai.REGISTERED_BBIM_PACKAGE
|
||||||
if package_name.endswith(".bonsai"):
|
|
||||||
return package_name
|
|
||||||
return "bonsai"
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_bbim_extension_package(cls) -> types.ModuleType:
|
def get_bbim_extension_package(cls) -> types.ModuleType:
|
||||||
@@ -1151,6 +1148,10 @@ class Blender(bonsai.core.tool.Blender):
|
|||||||
|
|
||||||
for package_name in bpy.context.preferences.addons.keys():
|
for package_name in bpy.context.preferences.addons.keys():
|
||||||
if package_name.endswith(".sun_position"):
|
if package_name.endswith(".sun_position"):
|
||||||
sun_position = importlib.import_module(package_name)
|
try:
|
||||||
|
sun_position = importlib.import_module(package_name)
|
||||||
|
return sun_position
|
||||||
|
except ModuleNotFoundError:
|
||||||
|
pass
|
||||||
|
|
||||||
return sun_position
|
return sun_position
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ import bpy
|
|||||||
logger = logging.getLogger("sverchok.ifc")
|
logger = logging.getLogger("sverchok.ifc")
|
||||||
|
|
||||||
|
|
||||||
def get_blender_addon_package_name(addon_name: str) -> types.ModuleType:
|
def get_blender_addon_package_by_name(addon_name: str) -> types.ModuleType:
|
||||||
# Check for legacy addons.
|
# Check for legacy addons.
|
||||||
if addon_name in bpy.context.preferences.addons:
|
if addon_name in bpy.context.preferences.addons:
|
||||||
return importlib.import_module(addon_name)
|
return importlib.import_module(addon_name)
|
||||||
@@ -44,20 +44,23 @@ def get_blender_addon_package_name(addon_name: str) -> types.ModuleType:
|
|||||||
raise ModuleNotFoundError
|
raise ModuleNotFoundError
|
||||||
|
|
||||||
# Check for Blender extensions.
|
# Check for Blender extensions.
|
||||||
bbim_package_name = None
|
addon_package = None
|
||||||
for package_name in bpy.context.preferences.addons.keys():
|
for package_name in bpy.context.preferences.addons.keys():
|
||||||
if package_name.endswith(f".{addon_name}"):
|
if package_name.endswith(f".{addon_name}"):
|
||||||
bbim_package_name = package_name
|
try:
|
||||||
if bbim_package_name is None:
|
addon_package = importlib.import_module(package_name)
|
||||||
|
except ModuleNotFoundError:
|
||||||
|
pass
|
||||||
|
if addon_package is None:
|
||||||
raise ModuleNotFoundError
|
raise ModuleNotFoundError
|
||||||
return importlib.import_module(bbim_package_name)
|
return addon_package
|
||||||
|
|
||||||
|
|
||||||
def ensure_addons_are_enabled(*addon_names: str) -> None:
|
def ensure_addons_are_enabled(*addon_names: str) -> None:
|
||||||
errors = []
|
errors = []
|
||||||
for addon_name in addon_names:
|
for addon_name in addon_names:
|
||||||
try:
|
try:
|
||||||
module = get_blender_addon_package_name(addon_name)
|
module = get_blender_addon_package_by_name(addon_name)
|
||||||
# `__addon_enabled__` is not present if addon wasn't enabled before
|
# `__addon_enabled__` is not present if addon wasn't enabled before
|
||||||
if not getattr(module, "__addon_enabled__", False):
|
if not getattr(module, "__addon_enabled__", False):
|
||||||
errors.append(f"- Addon {addon_name} appears to be disabled, it should be enabled before IFC Sverchok.")
|
errors.append(f"- Addon {addon_name} appears to be disabled, it should be enabled before IFC Sverchok.")
|
||||||
|
|||||||
Reference in New Issue
Block a user