Merged changes in the trunk up to revision 32684.
[blender.git] / source / blender / python / rna_dump.py
1  # ***** BEGIN GPL LICENSE BLOCK *****
2  #
3  # This program is free software; you can redistribute it and/or
4  # modify it under the terms of the GNU General Public License
5  # as published by the Free Software Foundation; either version 2
6  # of the License, or (at your option) any later version.
7  #
8  # This program is distributed in the hope that it will be useful,
9  # but WITHOUT ANY WARRANTY; without even the implied warranty of
10  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  # GNU General Public License for more details.
12  #
13  # You should have received a copy of the GNU General Public License
14  # along with this program; if not, write to the Free Software Foundation,
15  # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16  #
17  # Contributor(s): Campbell Barton
18  #
19  # #**** END GPL LICENSE BLOCK #****
20
21 if 1:
22     # Print once every 1000
23     GEN_PATH = True
24     PRINT_DATA = False
25     PRINT_DATA_INT = 1000
26     VERBOSE = False
27     VERBOSE_TYPE = False
28     MAX_RECURSIVE = 8
29 else:
30     # Print everything
31     GEN_PATH = True
32     PRINT_DATA = True
33     PRINT_DATA_INT = 0
34     VERBOSE = False
35     VERBOSE_TYPE = False
36     MAX_RECURSIVE = 8
37
38 seek_count = [0]
39
40 def seek(r, txt, recurs):
41
42     seek_count[0] += 1
43
44     if PRINT_DATA_INT:
45         if not (seek_count[0] % PRINT_DATA_INT):
46             print(seek_count[0], txt)
47
48     if PRINT_DATA:
49         print(txt)
50
51     newtxt = ''
52
53     if recurs > MAX_RECURSIVE:
54         #print ("Recursion is over max")
55         #print (txt)
56         return
57
58     type_r = type(r)
59
60     # print(type_r)
61     # print(dir(r))
62
63     # basic types
64     if type_r in (float, int, bool, type(None)):
65         if PRINT_DATA:
66             print(txt + ' -> ' + str(r))
67         return
68
69     if type_r == str:
70         if PRINT_DATA:
71             print(txt + ' -> "' + str(r) + '"')
72         return
73
74     try:        keys = r.keys()
75     except: keys = None
76
77     if keys != None:
78         if PRINT_DATA:
79             print(txt + '.keys() - ' + str(r.keys()))
80
81     try:        __members__ = dir(r)
82     except: __members__ = []
83
84     for item in __members__:
85         if item.startswith('__'):
86             continue
87
88         if GEN_PATH: newtxt = txt + '.' + item
89
90         if item == 'rna_type' and VERBOSE_TYPE==False: # just avoid because it spits out loads of data
91             continue
92
93         try:    value = getattr(r, item)
94         except: value = None
95
96         seek( value, newtxt, recurs + 1)
97
98
99     if keys:
100         for k in keys:
101             if GEN_PATH: newtxt = txt + '["' + k + '"]'
102             seek(r.__getitem__(k), newtxt, recurs+1)
103
104     else:
105         try:    length = len( r )
106         except: length = 0
107
108         if VERBOSE==False and length >= 4:
109             for i in (0, length-1):
110                 if i>0:
111                     if PRINT_DATA:
112                         print((' '*len(txt)) + ' ... skipping '+str(length-2)+' items ...')
113
114                 if GEN_PATH: newtxt = txt + '[' + str(i) + ']'
115                 seek(r[i], newtxt, recurs+1)
116         else:
117             for i in range(length):
118                 if GEN_PATH: newtxt = txt + '[' + str(i) + ']'
119                 seek(r[i], newtxt, recurs+1)
120
121 seek(bpy.data, 'bpy.data', 0)
122 # seek(bpy.types, 'bpy.types', 0)
123 '''
124 for d in dir(bpy.types):
125     t = getattr(bpy.types, d)
126     try:        r = t.bl_rna
127     except:     r = None
128     if r:
129         seek(r, 'bpy.types.' + d + '.bl_rna', 0)
130 '''
131
132 #print dir(bpy)
133 #import sys
134 #sys.exit()
135
136 print("iter over ", seek_count, "rna items")