text: # ##### 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.
  #
  # ##### 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 is not 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 is 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 is 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")
  