blender/source/gameengine/PyDoc/bge_api_validate_py.txt
Campbell Barton 0c482f7607 BGE API - small changes
- print CListValue errors only once.
- bge_api_validate_py.txt now validates modules as well as types.
- added missing functions and consts for epydoc modules. some of these in GameLogic.py still need sorting.
2009-04-24 20:27:04 +00:00

146 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(type_mame, member):
filename = os.path.join(doc_dir, type_mame + '.py')
# print filename
file = open(filename, 'rU')
for l in file:
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:
file.close()
return True
file.close()
return False
print '\n\n\nChecking Docs'
PRINT_OK = False
for type_name in sorted(type_members.keys()):
members = type_members[type_name]
try:
mod = __import__(type_name)
if PRINT_OK:
print "type: %s" % type_name
except:
print "missing: %s - %s" % (type_name, str(sorted(members)))
continue
reload(mod) # incase were editing it
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_name, 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(mod_name, 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