Source code for blendersynth.run.import_handling

"""For calling errors if a user tries run certain operations in the wrong python environment"""

from importlib import import_module
from typing import Union

package_name = "blendersynth"


[docs] def conditional_import( condition: bool, src: str, name: str = None ) -> Union["IllegalImport", object]: """ [No longer used in __init__.py, but kept here for reference] Imports a module if condition, otherwise returns IllegalImport. :param condition: If True, import the module :param src: The module to import :param name: The name of the module to import. If None, the last part of src is used. :return: The imported module, or IllegalImport if condition is False """ if condition: if src.startswith("."): module = import_module(src, package=package_name) else: module = import_module(src) if name is None: return module return getattr(module, name if name else src.split(".")[-1]) else: return IllegalImport()
[docs] class IllegalImport: """Object which raises error on any interaction, to tell users they have used BlenderSynth incorrectly.""" def __init__(self, REQUIRES_BLENDER=True): self.REQUIRES_BLENDER = REQUIRES_BLENDER def __call__(self, *args, **kwargs): raise ImportError(self._message) def __getattr__(self, name): raise ImportError(self._message) @property def _message(self): if self.REQUIRES_BLENDER: return ( "This object can only be used inside a Blender python environment. " "Make sure that either:" "\n- bsyn.run_this_script() is run on a previous line" "\n- This script is being run from another python script, using bsyn.execute_jobs." ) else: return "This object can only be used outside a Blender python environment. "