2025-07-01
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
'''
|
||||
Copyright (C) 2023 CG Cookie
|
||||
http://cgcookie.com
|
||||
hello@cgcookie.com
|
||||
|
||||
Created by Jonathan Denning, Jonathan Williamson
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
'''
|
||||
|
||||
from inspect import isfunction, signature
|
||||
|
||||
|
||||
##################################################
|
||||
|
||||
|
||||
# find functions of object that has key attribute
|
||||
# returns list of (attribute value, fn)
|
||||
def find_fns(obj, key, *, full_search=False):
|
||||
classes = type(obj).__mro__ if full_search else [type(obj)]
|
||||
members = [getattr(cls, k) for cls in classes for k in dir(cls) if hasattr(cls, k)]
|
||||
# test if type is fn_type rather than isfunction() because bpy has problems!
|
||||
# methods = [member for member in members if isfunction(member)]
|
||||
fn_type = type(find_fns)
|
||||
methods = [member for member in members if type(member) == fn_type]
|
||||
return [
|
||||
(getattr(method, key), method)
|
||||
for method in methods
|
||||
if hasattr(method, key)
|
||||
]
|
||||
|
||||
def self_wrapper(self, fn):
|
||||
sig = signature(fn)
|
||||
params = list(sig.parameters.values())
|
||||
if params[0].name != 'self': return fn
|
||||
def wrapped(*args, **kwargs):
|
||||
return fn(self, *args, **kwargs)
|
||||
return wrapped
|
||||
Reference in New Issue
Block a user