Fix T98039: Node Wrangler node preview no longer working
[blender-addons.git] / pose_library / functions.py
blobd9a85fd73bbc933b0fbc58683e8a4aeeadf6bd67
1 # SPDX-License-Identifier: GPL-2.0-or-later
3 """
4 Pose Library - functions.
5 """
7 from pathlib import Path
8 from typing import Any, List, Iterable
10 Datablock = Any
12 import bpy
15 def load_assets_from(filepath: Path) -> List[Datablock]:
16 if not has_assets(filepath):
17 # Avoid loading any datablocks when there are none marked as asset.
18 return []
20 # Append everything from the file.
21 with bpy.data.libraries.load(str(filepath)) as (
22 data_from,
23 data_to,
25 for attr in dir(data_to):
26 setattr(data_to, attr, getattr(data_from, attr))
28 # Iterate over the appended datablocks to find assets.
29 def loaded_datablocks() -> Iterable[Datablock]:
30 for attr in dir(data_to):
31 datablocks = getattr(data_to, attr)
32 for datablock in datablocks:
33 yield datablock
35 loaded_assets = []
36 for datablock in loaded_datablocks():
37 if not getattr(datablock, "asset_data", None):
38 continue
40 # Fake User is lost when appending from another file.
41 datablock.use_fake_user = True
42 loaded_assets.append(datablock)
43 return loaded_assets
46 def has_assets(filepath: Path) -> bool:
47 with bpy.data.libraries.load(str(filepath), assets_only=True) as (
48 data_from,
51 for attr in dir(data_from):
52 data_names = getattr(data_from, attr)
53 if data_names:
54 return True
55 return False