svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r21899:21908
[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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, 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.__rna__
127         except: r = None
128         if r:
129                 seek(r, 'bpy.types.' + d + '.__rna__', 0)
130 '''
131
132 #print dir(bpy)
133 #import sys
134 #sys.exit()
135
136 print("iter over ", seek_count, "rna items")