include needed for windows
[blender.git] / source / blender / python / rna_dump.py
index 826051d9ceba00b08656a43417b67ea1eaeb8b8b..df902886f30fa5d8c076b862b47561f378c9c7a9 100644 (file)
  #
  # 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  #
  # Contributor(s): Campbell Barton
  #
  # #**** END GPL LICENSE BLOCK #****
 
+# <pep8 compliant>
 
-PRINT_DATA = True
-VERBOSE = False
-VERBOSE_TYPE = False
-SKIP_RECURSIVE = False
-
-
-def seek(r, txt):
-       print(txt)
-       newtxt = ''
-       
-       if len(txt) > 200:
-               print ("Somthing is wrong")
-               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 PRINT_DATA:  newtxt = txt + '.' + item
-               
-               if item == 'rna_type' and VERBOSE_TYPE==False: # just avoid because it spits out loads of data
-                       continue
-               
-               if SKIP_RECURSIVE:
-                       if item in txt:
-                               if PRINT_DATA:
-                                       print(newtxt + ' - (skipping to avoid recursive search)')
-                               continue
-               
-               try:    value = getattr(r, item)
-               except: value = None
-               
-               seek( value, newtxt)
-       
-       
-       if keys:
-               for k in keys:
-                       if PRINT_DATA:  newtxt = txt + '["' + k + '"]'
-                       seek(r.__getitem__(k), newtxt)
-       
-       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 PRINT_DATA:  newtxt = txt + '[' + str(i) + ']'
-                               seek(r[i], newtxt)
-               else:
-                       for i in range(length):
-                               if PRINT_DATA:  newtxt = txt + '[' + str(i) + ']'
-                               seek(r[i], newtxt)
-
-#print (dir(bpy))
-seek(bpy, 'bpy')
+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")