Files
Avatar-Toolkit/core/mmd/properties/__init__.py
T
2025-04-10 23:40:51 +01:00

35 lines
1.4 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2014 MMD Tools authors
# This file was originally part of the MMD Tools add-on for Blender
# You can find MMD Tools here: https://github.com/MMD-Blender/blender_mmd_tools
# Neoneko has modified this file to work with Avatar Toolkit and may of made changes or improvements.
# MMD Tools is licensed under the terms of the GNU General Public License version 3 (GPLv3) same as Avatar Toolkit.
import bpy
def patch_library_overridable(property: "bpy.props._PropertyDeferred") -> "bpy.props._PropertyDeferred":
"""Apply recursively for each mmd_tools property class annotations.
Args:
property: The property to be patched.
Returns:
The patched property.
"""
property.keywords.setdefault("override", set()).add("LIBRARY_OVERRIDABLE")
if property.function.__name__ not in {"PointerProperty", "CollectionProperty"}:
return property
property_type = property.keywords["type"]
# The __annotations__ cannot be inherited. Manually search for base classes.
for inherited_type in (property_type, *property_type.__bases__):
if not inherited_type.__module__.startswith("mmd_tools.properties"):
continue
for annotation in inherited_type.__annotations__.values():
if not isinstance(annotation, bpy.props._PropertyDeferred):
continue
patch_library_overridable(annotation)
return property