svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r19820:HEAD Notes: * Game and sequencer RNA, and sequencer header are now out of date a bit after changes in trunk. * I didn't know how to port these bugfixes, most likely they are not needed anymore. * Fix "duplicate strip" always increase the user count for ipo. * IPO pinning on sequencer strips was lost during Undo.
		
			
				
	
	
		
			137 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
#~ 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; version 2 of the License.
 | 
						|
 | 
						|
#~ 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.
 | 
						|
 | 
						|
# This script must run from a logic brick so it has access to the game engine api
 | 
						|
# it assumes the root blender source directory is the current working directory
 | 
						|
# 
 | 
						|
# Currently it only prints missing modules and methods (not attributes)
 | 
						|
 | 
						|
import sys, os
 | 
						|
 | 
						|
BGE_API_DOC_PATH = 'source/gameengine/PyDoc'
 | 
						|
 | 
						|
 | 
						|
mods = ['GameLogic', 'Rasterizer', 'GameKeys']
 | 
						|
mods_dict = {}
 | 
						|
for m in mods:
 | 
						|
	mods_dict[m] = sys.modules[m]
 | 
						|
 | 
						|
 | 
						|
import GameTypes
 | 
						|
type_members = {}
 | 
						|
 | 
						|
for type_name in dir(GameTypes):
 | 
						|
	if type_name.startswith('__'):
 | 
						|
		continue
 | 
						|
	
 | 
						|
	type_object = getattr(GameTypes, type_name)
 | 
						|
	
 | 
						|
	members = []
 | 
						|
	type_members[type_object.__name__] = members
 | 
						|
	
 | 
						|
	for member in type_object.__dict__.keys():
 | 
						|
		if member.startswith('__'):
 | 
						|
			continue
 | 
						|
		
 | 
						|
		# print type_object.__name__ + '.' + k
 | 
						|
		members.append(member)
 | 
						|
 | 
						|
 | 
						|
 | 
						|
doc_dir= os.path.join(os.getcwd(), BGE_API_DOC_PATH)
 | 
						|
 | 
						|
if doc_dir not in sys.path:
 | 
						|
	sys.path.append(doc_dir)
 | 
						|
 | 
						|
 | 
						|
def check_attribute(class_ob, member):
 | 
						|
	doc = class_ob.__doc__
 | 
						|
	if not doc:
 | 
						|
		return False
 | 
						|
	
 | 
						|
	for l in doc.split('\n'):
 | 
						|
		l = l.strip()
 | 
						|
		
 | 
						|
		'''
 | 
						|
			@ivar foo: blah blah
 | 
						|
		to
 | 
						|
			foo
 | 
						|
			
 | 
						|
		'''
 | 
						|
		
 | 
						|
		if l.startswith('@ivar') or l.startswith('@var'):
 | 
						|
			var = l.split()[1].split(':')[0]
 | 
						|
			
 | 
						|
			if var == member:
 | 
						|
				return True
 | 
						|
	
 | 
						|
	return False
 | 
						|
	
 | 
						|
	
 | 
						|
	
 | 
						|
	
 | 
						|
 | 
						|
 | 
						|
print '\n\n\nChecking Docs'
 | 
						|
 | 
						|
PRINT_OK = False
 | 
						|
 | 
						|
pymod = sys.modules['GameTypes']
 | 
						|
del sys.modules['GameTypes'] # temp remove
 | 
						|
mod = __import__('GameTypes') # get the python module
 | 
						|
reload(mod) # incase were editing it
 | 
						|
sys.modules['GameTypes'] = pymod
 | 
						|
 | 
						|
for type_name in sorted(type_members.keys()):
 | 
						|
	members = type_members[type_name]
 | 
						|
	
 | 
						|
	try:
 | 
						|
		type_class = getattr(mod, type_name)
 | 
						|
	except:
 | 
						|
		print "missing class: %s.%s - %s" % (type_name, type_name, str(sorted(members)))
 | 
						|
		continue
 | 
						|
	
 | 
						|
	for member in sorted(members):
 | 
						|
		try:
 | 
						|
			getattr(type_class, member)
 | 
						|
			if PRINT_OK:
 | 
						|
				print "\tfound: %s.%s" % (type_name, member)
 | 
						|
		except:
 | 
						|
			if check_attribute(type_class, member):
 | 
						|
				if PRINT_OK:
 | 
						|
					print "\tfound attr: %s.%s" % (type_name, member)
 | 
						|
			else:
 | 
						|
				print "\tmissing: %s.%s" % (type_name, member)
 | 
						|
 | 
						|
 | 
						|
# Now check the modules
 | 
						|
for mod_name, pymod in mods_dict.iteritems():
 | 
						|
	print pymod
 | 
						|
	del sys.modules[mod_name]
 | 
						|
		
 | 
						|
	# Now well get the python version
 | 
						|
	pydoc = __import__(mod_name)
 | 
						|
	pydoc = reload(pydoc) # avoid using the out dated pyc file only
 | 
						|
	print pydoc.__file__
 | 
						|
	
 | 
						|
	for member in sorted(dir(pymod)):
 | 
						|
		if hasattr(pydoc, member) or check_attribute(pydoc, member):
 | 
						|
			if PRINT_OK:
 | 
						|
				print "\tfound module attr: %s.%s" % (mod_name, member)
 | 
						|
		else:
 | 
						|
			print "\tmissing module attr: %s.%s" % (mod_name, member)
 | 
						|
	
 | 
						|
	# Restore real module
 | 
						|
	sys.modules[mod_name] = pymod
 | 
						|
 | 
						|
 | 
						|
sys.path.pop() # remove the pydoc dir from our import paths
 | 
						|
 | 
						|
 |