Is there a utility to tally function calls from other files?
C.D. Reimer
chris at cdreimer.com
Sat Jun 13 22:24:57 EDT 2015
Here's my code and output for the curious. I'm sure someone will come up
with a five-line version. :)
import os, time
def main():
def_str = 'def '
line_limit = 5
call_tally = []
import_str = 'from bg_helper import '
path = 'scripts'
startTime = time.time()
# pull call names from helper file
with open(os.path.join(path, 'bg_helper.py')) as f:
for line in f:
search = line.find(def_str)
if search != -1:
call_tally.append([(line[len(def_str):].split('('))[0], 0])
call_tally.sort()
# walk through the scripts directory
fileList = next(os.walk(path))[2]
fileList.remove('bg_helper.py')
fileList.remove('bg_helper.pyc')
# check files for import statements
for filename in fileList:
i = 0
with open(os.path.join(path, filename)) as f:
for line in f:
if i < line_limit:
search = line.find(import_str)
if search != -1:
found = line[len(import_str):].strip('\n').split(', ')
found.sort()
for found in enumerate(found):
for tally in enumerate(call_tally):
if tally[1][0] == found[1]:
tally[1][1] += 1
i += 1
else:
break
# print the results
print 'FUNCTION CALLS\t\tTALLY\tNOTES\n'
for tally in enumerate(call_tally):
print tally[1][0],'\t\t', tally[1][1],
if tally[1][1] == 0:
print '\t** NO CALLS **'
else:
print ''
print '\nEvaluated',len(fileList),'files in',
print '{0:.1g}'.format(time.time() - startTime),'seconds\n'
if __name__ == "__main__":
main()
FUNCTION CALLS TALLY NOTES
card_faces 1
pick_card 1
replay_game 3
roll_dice 2
slot_faces 0 ** NO CALLS **
Evaluated 10 files in 0.08 seconds
More information about the Python-list
mailing list