#! /usr/bin/env python """ generate standalone test script to be distributed along with an application. """ import os import sys def pytest_addoption(parser): group = parser.getgroup("debugconfig") group.addoption("--genscript", action="store", default=None, dest="genscript", metavar="path", help="create standalone py.test script at given target path.") def pytest_cmdline_main(config): genscript = config.getvalue("genscript") if genscript: import py mydir = py.path.local(__file__).dirpath() infile = mydir.join("standalonetemplate.py") pybasedir = py.path.local(py.__file__).dirpath().dirpath() genscript = py.path.local(genscript) main(pybasedir, outfile=genscript, infile=infile) return 0 def main(pybasedir, outfile, infile): import base64 import zlib try: import pickle except Importerror: import cPickle as pickle outfile = str(outfile) infile = str(infile) assert os.path.isabs(outfile) os.chdir(str(pybasedir)) files = [] for dirpath, dirnames, filenames in os.walk("py"): for f in filenames: if not f.endswith(".py"): continue fn = os.path.join(dirpath, f) files.append(fn) name2src = {} for f in files: k = f.replace(os.sep, ".")[:-3] name2src[k] = open(f, "r").read() data = pickle.dumps(name2src, 2) data = zlib.compress(data, 9) data = base64.encodestring(data) data = data.decode("ascii") exe = open(infile, "r").read() exe = exe.replace("@SOURCES@", data) open(outfile, "w").write(exe) os.chmod(outfile, 493) # 0755 sys.stdout.write("generated standalone py.test at %r, have fun!\n" % outfile) if __name__=="__main__": dn = os.path.dirname here = os.path.abspath(dn(__file__)) # py/plugin/ pybasedir = dn(dn(here)) outfile = os.path.join(os.getcwd(), "py.test-standalone") infile = os.path.join(here, 'standalonetemplate.py') main(pybasedir, outfile, infile)