Files
blender-portable-repo/scripts/addons/flamenco/bat_v2/submodules.py
T
Nathan 6c3b78075b work: restore shift+spacebar for media play/pause
maybe put in maya config? idk what funiman's preference is
2026-05-29 14:58:59 -06:00

73 lines
2.6 KiB
Python

import os
from pathlib import Path
from typing import TYPE_CHECKING
# SORRY FOR THE COMPLEXITY!
#
# Flamenco needs to be able to deal with BAT versions 1 and 2 at the same time,
# by loading them from different wheel files, depending on which version of
# Blender is running.
#
# At the same time, there's developers who will be really happy when mypy can do
# its thing, and when Blender can load mypy and BAT from virtual environments.
WHEEL_MODULE = "blender_asset_tracer"
WHEEL_FILENAME_PREFIX = "blender_asset_tracer-2."
if TYPE_CHECKING:
# When type-checking, BAT should be importable.
import blender_asset_tracer as bat_toplevel
from blender_asset_tracer import (
file_usage,
pack,
path_rewriting,
path_rewriting_process,
)
else:
# For development only: if we can import BAT directly, just assume it's the
# right version and go with it.
if "VIRTUAL_ENV" in os.environ:
import site
from pathlib import Path
venv_path = Path(os.environ["VIRTUAL_ENV"])
print(f"Reactivating virtualenv: {venv_path}")
# Add the virtual environments libraries.
lib_dirs_posix = list(venv_path.rglob("lib/*/site-packages"))
lib_dirs_windows = list(venv_path.rglob("Lib/site-packages"))
for lib_dir in lib_dirs_posix + lib_dirs_windows:
site.addsitedir(str(lib_dir))
try:
import blender_asset_tracer as bat_toplevel
from blender_asset_tracer import (
file_usage,
pack,
path_rewriting,
path_rewriting_process,
)
except ImportError:
# At runtime, some trickery is necessary to load BAT from the bundled wheel file, without making
# it available in `sys.modules` (to prevent interaction with other add-ons).
from .. import wheels
# Load all the submodules we need from BAT in one go.
_bat_modules = wheels.load_wheel(
WHEEL_MODULE,
("file_usage", "pack", "path_rewriting", "path_rewriting_process"),
filename_prefix=WHEEL_FILENAME_PREFIX,
)
bat_toplevel, file_usage, pack, path_rewriting, path_rewriting_process = (
_bat_modules
)
# Expose the location of the wheel file to BAT by setting an environment
# variable. This is necessary for BAT's path rewriting sub-process, in
# order to know where to load its own sources from.
wheel_filename: Path = wheels.filename(
WHEEL_MODULE,
filename_prefix=WHEEL_FILENAME_PREFIX,
)
os.environ["BAT_WHEEL"] = str(wheel_filename)