148 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
 # ***** BEGIN GPL LICENSE BLOCK *****
 | 
						|
 #
 | 
						|
 # 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 2
 | 
						|
 # 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, write to the Free Software Foundation,
 | 
						|
 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 | 
						|
 #
 | 
						|
 # Contributor(s): Campbell Barton
 | 
						|
 #
 | 
						|
 # #**** END GPL LICENSE BLOCK #****
 | 
						|
 | 
						|
# <pep8 compliant>
 | 
						|
 | 
						|
if 1:
 | 
						|
    # Print once every 1000
 | 
						|
    GEN_PATH = True
 | 
						|
    PRINT_DATA = False
 | 
						|
    PRINT_DATA_INT = 1000
 | 
						|
    VERBOSE = False
 | 
						|
    VERBOSE_TYPE = False
 | 
						|
    MAX_RECURSIVE = 8
 | 
						|
else:
 | 
						|
    # Print everything
 | 
						|
    GEN_PATH = True
 | 
						|
    PRINT_DATA = True
 | 
						|
    PRINT_DATA_INT = 0
 | 
						|
    VERBOSE = False
 | 
						|
    VERBOSE_TYPE = False
 | 
						|
    MAX_RECURSIVE = 8
 | 
						|
 | 
						|
seek_count = [0]
 | 
						|
 | 
						|
 | 
						|
def seek(r, txt, recurs):
 | 
						|
 | 
						|
    seek_count[0] += 1
 | 
						|
 | 
						|
    if PRINT_DATA_INT:
 | 
						|
        if not (seek_count[0] % PRINT_DATA_INT):
 | 
						|
            print(seek_count[0], txt)
 | 
						|
 | 
						|
    if PRINT_DATA:
 | 
						|
        print(txt)
 | 
						|
 | 
						|
    newtxt = ''
 | 
						|
 | 
						|
    if recurs > MAX_RECURSIVE:
 | 
						|
        #print ("Recursion is over max")
 | 
						|
        #print (txt)
 | 
						|
        return
 | 
						|
 | 
						|
    type_r = type(r)
 | 
						|
 | 
						|
    # print(type_r)
 | 
						|
    # print(dir(r))
 | 
						|
 | 
						|
    # basic types
 | 
						|
    if type_r in (float, int, bool, type(None)):
 | 
						|
        if PRINT_DATA:
 | 
						|
            print(txt + ' -> ' + str(r))
 | 
						|
        return
 | 
						|
 | 
						|
    if type_r == str:
 | 
						|
        if PRINT_DATA:
 | 
						|
            print(txt + ' -> "' + str(r) + '"')
 | 
						|
        return
 | 
						|
 | 
						|
    try:
 | 
						|
        keys = r.keys()
 | 
						|
    except:
 | 
						|
        keys = None
 | 
						|
 | 
						|
    if keys != None:
 | 
						|
        if PRINT_DATA:
 | 
						|
            print(txt + '.keys() - ' + str(r.keys()))
 | 
						|
 | 
						|
    try:
 | 
						|
        __members__ = dir(r)
 | 
						|
    except:
 | 
						|
        __members__ = []
 | 
						|
 | 
						|
    for item in __members__:
 | 
						|
        if item.startswith("__"):
 | 
						|
            continue
 | 
						|
 | 
						|
        if GEN_PATH:
 | 
						|
            newtxt = txt + '.' + item
 | 
						|
 | 
						|
        if item == 'rna_type' and VERBOSE_TYPE == False:  # just avoid because it spits out loads of data
 | 
						|
            continue
 | 
						|
 | 
						|
        value = getattr(r, item, None)
 | 
						|
 | 
						|
        seek(value, newtxt, recurs + 1)
 | 
						|
 | 
						|
    if keys:
 | 
						|
        for k in keys:
 | 
						|
            if GEN_PATH:
 | 
						|
                newtxt = txt + '["' + k + '"]'
 | 
						|
            seek(r.__getitem__(k), newtxt, recurs + 1)
 | 
						|
 | 
						|
    else:
 | 
						|
        try:
 | 
						|
            length = len(r)
 | 
						|
        except:
 | 
						|
            length = 0
 | 
						|
 | 
						|
        if VERBOSE == False and length >= 4:
 | 
						|
            for i in (0, length - 1):
 | 
						|
                if i > 0:
 | 
						|
                    if PRINT_DATA:
 | 
						|
                        print((" " * len(txt)) + " ... skipping " + str(length - 2) + " items ...")
 | 
						|
 | 
						|
                if GEN_PATH:
 | 
						|
                    newtxt = txt + '[' + str(i) + ']'
 | 
						|
                seek(r[i], newtxt, recurs + 1)
 | 
						|
        else:
 | 
						|
            for i in range(length):
 | 
						|
                if GEN_PATH:
 | 
						|
                    newtxt = txt + '[' + str(i) + ']'
 | 
						|
                seek(r[i], newtxt, recurs + 1)
 | 
						|
 | 
						|
seek(bpy.data, 'bpy.data', 0)
 | 
						|
# seek(bpy.types, 'bpy.types', 0)
 | 
						|
'''
 | 
						|
for d in dir(bpy.types):
 | 
						|
    t = getattr(bpy.types, d)
 | 
						|
    try:	r = t.bl_rna
 | 
						|
    except:	r = None
 | 
						|
    if r:
 | 
						|
        seek(r, 'bpy.types.' + d + '.bl_rna', 0)
 | 
						|
'''
 | 
						|
 | 
						|
#print dir(bpy)
 | 
						|
#import sys
 | 
						|
#sys.exit()
 | 
						|
 | 
						|
print("iter over ", seek_count, "rna items")
 |