Welcome to mirror list, hosted at ThFree Co, Russian Federation.

bge_api_validate_py.txt « PyDoc « gameengine « source - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: ebd74c06bb37f314c1a169c9051441f173862c59 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#~ 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