You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-02 16:44:46 +08:00
Fix inconsistencies in uncompyle2 script, rename to scripts/uncompyle2 & add to setup.py (these are all changes from wibiti). Also, change script headers so they work on Windows too. Remove build folder from repo & add .gitignore so it doesn't inadvertently get added again.
124 lines
3.9 KiB
Python
Executable File
124 lines
3.9 KiB
Python
Executable File
#! python
|
|
|
|
'''
|
|
test_pythonlib -- uncompyle and verify Python libraries
|
|
|
|
Usage-Examples:
|
|
|
|
test_pythonlib --all # decompile all tests (suite + libs)
|
|
test_pythonlib --all --verify # decomyile all tests and verify results
|
|
test_pythonlib --test # decompile only the testsuite
|
|
test_pythonlib --2.2 --verify # decompile and verify python lib 2.2
|
|
|
|
Adding own test-trees:
|
|
|
|
Step 1) Edit this file and add a new entry to 'test_options', eg.
|
|
test_options['mylib'] = ('/usr/lib/mylib', PYOC, 'mylib')
|
|
Step 2: Run the test:
|
|
test_pythonlib --mylib # decompile 'mylib'
|
|
test_pythonlib --mylib --verify # decompile verify 'mylib'
|
|
'''
|
|
|
|
from uncompyle2 import main, verify
|
|
import getopt, sys
|
|
import os, time, shutil
|
|
from fnmatch import fnmatch
|
|
|
|
#----- configure this for your needs
|
|
|
|
lib_prefix = ['.', '/usr/lib/', '/usr/local/lib/']
|
|
target_base = '/tmp/py-dis/'
|
|
|
|
PYC = ('*.pyc', )
|
|
PYO = ('*.pyo', )
|
|
PYOC = ('*.pyc', '*.pyo')
|
|
|
|
test_options = {
|
|
# name: (src_basedir, pattern, output_base_suffix)
|
|
'test': ['test', PYC, 'test'],
|
|
'2.5': ['python2.5', PYC, 'python-lib2.5'],
|
|
'2.6': ['python2.6', PYC, 'python-lib2.6'],
|
|
'2.7': ['python2.7', PYC, 'python-lib2.7']
|
|
}
|
|
|
|
#-----
|
|
|
|
def help():
|
|
print 'Usage-Examples:'
|
|
print 'test_pythonlib --all # decompile all tests (suite + libs)'
|
|
print 'test_pythonlib --all --verify # decomyile all tests and verify results'
|
|
print 'test_pythonlib --test # decompile only the testsuite'
|
|
print 'test_pythonlib --2.2 --verify # decompile and verify python lib 2.2'
|
|
|
|
def do_tests(src_dir, patterns, target_dir, start_with=None, do_verify=0):
|
|
def visitor(files, dirname, names):
|
|
files.extend(
|
|
[os.path.normpath(os.path.join(dirname, n))
|
|
for n in names
|
|
for pat in patterns
|
|
if fnmatch(n, pat)])
|
|
|
|
files = []
|
|
cwd = os.getcwd()
|
|
os.chdir(src_dir)
|
|
os.path.walk(os.curdir, visitor, files)
|
|
os.chdir(cwd)
|
|
files.sort()
|
|
|
|
if start_with:
|
|
try:
|
|
start_with = files.index(start_with)
|
|
files = files[start_with:]
|
|
print '>>> starting with file', files[0]
|
|
except ValueError:
|
|
pass
|
|
|
|
print time.ctime()
|
|
print 'Working directory: ', src_dir
|
|
try:
|
|
main(src_dir, target_dir, files, [], do_verify=do_verify)
|
|
except (KeyboardInterrupt, OSError):
|
|
print
|
|
exit(1)
|
|
|
|
if __name__ == '__main__':
|
|
do_verify = 0
|
|
test_dirs = []
|
|
checked_dirs = []
|
|
start_with = None
|
|
|
|
test_options_keys = test_options.keys(); test_options_keys.sort()
|
|
opts, args = getopt.getopt(sys.argv[1:], '',
|
|
['start-with=', 'verify', 'all', ] \
|
|
+ test_options_keys )
|
|
if not opts:
|
|
help()
|
|
for opt, val in opts:
|
|
if opt == '--verify':
|
|
do_verify = 1
|
|
elif opt == '--start-with':
|
|
start_with = val
|
|
elif opt[2:] in test_options_keys:
|
|
test_dirs.append(test_options[opt[2:]])
|
|
elif opt == '--all':
|
|
for val in test_options_keys:
|
|
test_dirs.append(test_options[val])
|
|
else:
|
|
help()
|
|
|
|
for src_dir, pattern, target_dir in test_dirs:
|
|
for libpath in lib_prefix:
|
|
testpath = os.path.join(libpath, src_dir)
|
|
testlibfile = "%s/%s" % (testpath, 'os.py')
|
|
testfile = "%s/%s" % (testpath, 'test_empty.py')
|
|
if os.path.exists(testlibfile) or os.path.exists(testfile):
|
|
src_dir = testpath
|
|
checked_dirs.append([src_dir, pattern, target_dir])
|
|
break
|
|
|
|
for src_dir, pattern, target_dir in checked_dirs:
|
|
target_dir = os.path.join(target_base, target_dir)
|
|
if os.path.exists(target_dir):
|
|
shutil.rmtree(target_dir, ignore_errors=1)
|
|
do_tests(src_dir, pattern, target_dir, start_with, do_verify)
|