move standalone script to become a plugin offering "--genscript",
adjust paths accordingly and add CHANGELOG entry. --HG-- branch : trunk
This commit is contained in:
parent
1103f2ad62
commit
fa0c7b18bf
|
@ -1,6 +1,9 @@
|
||||||
Changes between 1.X and 1.1.1
|
Changes between 1.X and 1.1.1
|
||||||
=====================================
|
=====================================
|
||||||
|
|
||||||
|
- new option: --genscript=path will generate a standalone py.test script
|
||||||
|
which will not need any libraries installed. thanks to Ralf Schmitt.
|
||||||
|
|
||||||
- new option: --ignore will prevent specified path from collection.
|
- new option: --ignore will prevent specified path from collection.
|
||||||
Can be specified multiple times.
|
Can be specified multiple times.
|
||||||
|
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
#! /usr/bin/env python
|
|
||||||
|
|
||||||
import os
|
|
||||||
import cPickle
|
|
||||||
import zlib
|
|
||||||
import base64
|
|
||||||
import sys
|
|
||||||
|
|
||||||
def main(pybasedir, outfile, infile):
|
|
||||||
os.chdir(str(pybasedir))
|
|
||||||
outfile = str(outfile)
|
|
||||||
infile = str(infile)
|
|
||||||
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("/", ".")[:-3]
|
|
||||||
name2src[k] = open(f, "rb").read()
|
|
||||||
|
|
||||||
data = cPickle.dumps(name2src, 2)
|
|
||||||
data = zlib.compress(data, 9)
|
|
||||||
data = base64.encodestring(data)
|
|
||||||
|
|
||||||
exe = open(infile, "rb").read()
|
|
||||||
exe = exe.replace("@SOURCES@", data)
|
|
||||||
|
|
||||||
open(outfile, "wb").write(exe)
|
|
||||||
os.chmod(outfile, 493) # 0755
|
|
||||||
sys.stdout.write("generated %s\n" % outfile)
|
|
||||||
|
|
||||||
if __name__=="__main__":
|
|
||||||
dn = os.path.dirname
|
|
||||||
pybasedir = dn(dn(os.path.abspath(__file__)))
|
|
||||||
outfile = os.path.join(dn(__file__), "py.test")
|
|
||||||
infile = outfile+"-in"
|
|
||||||
main(pybasedir, outfile, infile)
|
|
|
@ -8,7 +8,7 @@ from py.impl.test.outcome import Skipped
|
||||||
|
|
||||||
default_plugins = (
|
default_plugins = (
|
||||||
"default runner capture terminal mark skipping tmpdir monkeypatch "
|
"default runner capture terminal mark skipping tmpdir monkeypatch "
|
||||||
"recwarn pdb pastebin unittest helpconfig nose assertion").split()
|
"recwarn pdb pastebin unittest helpconfig nose assertion genscript").split()
|
||||||
|
|
||||||
def check_old_use(mod, modname):
|
def check_old_use(mod, modname):
|
||||||
clsname = modname[len('pytest_'):].capitalize() + "Plugin"
|
clsname = modname[len('pytest_'):].capitalize() + "Plugin"
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
#! /usr/bin/env python
|
||||||
|
|
||||||
|
import os
|
||||||
|
import zlib
|
||||||
|
import base64
|
||||||
|
import sys
|
||||||
|
try:
|
||||||
|
import pickle
|
||||||
|
except Importerror:
|
||||||
|
import cPickle as pickle
|
||||||
|
|
||||||
|
def pytest_addoption(parser):
|
||||||
|
group = parser.getgroup("general")
|
||||||
|
group.addoption("--genscript", action="store", default=None,
|
||||||
|
dest="genscript", metavar="path",
|
||||||
|
help="create standalone py.test script at given target path.")
|
||||||
|
|
||||||
|
def pytest_configure(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()
|
||||||
|
main(pybasedir, outfile=genscript, infile=infile)
|
||||||
|
raise SystemExit(0)
|
||||||
|
|
||||||
|
def main(pybasedir, outfile, infile):
|
||||||
|
os.chdir(str(pybasedir))
|
||||||
|
outfile = str(outfile)
|
||||||
|
infile = str(infile)
|
||||||
|
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("/", ".")[:-3]
|
||||||
|
name2src[k] = open(f, "rb").read()
|
||||||
|
|
||||||
|
data = pickle.dumps(name2src, 2)
|
||||||
|
data = zlib.compress(data, 9)
|
||||||
|
data = base64.encodestring(data)
|
||||||
|
|
||||||
|
exe = open(infile, "rb").read()
|
||||||
|
exe = exe.replace("@SOURCES@", data)
|
||||||
|
|
||||||
|
open(outfile, "wb").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)
|
|
@ -12,11 +12,11 @@ if sys.version_info >= (3,0):
|
||||||
exec("def do_exec(co, loc): exec(co, loc)\n")
|
exec("def do_exec(co, loc): exec(co, loc)\n")
|
||||||
import pickle
|
import pickle
|
||||||
sources = sources.encode("ascii") # ensure bytes
|
sources = sources.encode("ascii") # ensure bytes
|
||||||
|
sources = pickle.loads(zlib.decompress(base64.decodebytes(sources)))
|
||||||
else:
|
else:
|
||||||
import cPickle as pickle
|
import cPickle as pickle
|
||||||
exec("def do_exec(co, loc): exec co in loc\n")
|
exec("def do_exec(co, loc): exec co in loc\n")
|
||||||
|
sources = pickle.loads(zlib.decompress(base64.decodestring(sources)))
|
||||||
sources = pickle.loads(zlib.decompress(base64.decodestring(sources)))
|
|
||||||
|
|
||||||
class DictImporter(object):
|
class DictImporter(object):
|
||||||
sources = sources
|
sources = sources
|
|
@ -8,7 +8,7 @@
|
||||||
import time
|
import time
|
||||||
|
|
||||||
def pytest_addoption(parser):
|
def pytest_addoption(parser):
|
||||||
group = parser.addgroup("xmlresult", "xmlresult plugin options")
|
group = parser.getgroup("xmlresult", "xmlresult plugin options")
|
||||||
group.addoption('--xmlresult', action="store", dest="xmlresult", metavar="path", default=None,
|
group.addoption('--xmlresult', action="store", dest="xmlresult", metavar="path", default=None,
|
||||||
help="path for machine-readable xml result log.")
|
help="path for machine-readable xml result log.")
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
import py, os, sys
|
import py, os, sys
|
||||||
import generate_standalone_pytest
|
|
||||||
import subprocess
|
import subprocess
|
||||||
mydir = py.path.local(__file__).dirpath()
|
|
||||||
pybasedir = mydir.join("..")
|
|
||||||
assert pybasedir.join("py").check()
|
|
||||||
|
|
||||||
def pytest_funcarg__standalone(request):
|
def pytest_funcarg__standalone(request):
|
||||||
return request.cached_setup(scope="module", setup=lambda: Standalone(request))
|
return request.cached_setup(scope="module", setup=lambda: Standalone(request))
|
||||||
|
@ -11,10 +7,8 @@ def pytest_funcarg__standalone(request):
|
||||||
class Standalone:
|
class Standalone:
|
||||||
def __init__(self, request):
|
def __init__(self, request):
|
||||||
self.testdir = request.getfuncargvalue("testdir")
|
self.testdir = request.getfuncargvalue("testdir")
|
||||||
infile = mydir.join("py.test-in")
|
|
||||||
self.script = self.testdir.tmpdir.join("mypytest")
|
self.script = self.testdir.tmpdir.join("mypytest")
|
||||||
generate_standalone_pytest.main(pybasedir=pybasedir,
|
self.testdir.runpytest("--genscript=%s" % self.script)
|
||||||
infile=infile, outfile=self.script)
|
|
||||||
|
|
||||||
def run(self, anypython, testdir, *args):
|
def run(self, anypython, testdir, *args):
|
||||||
testdir.chdir()
|
testdir.chdir()
|
Loading…
Reference in New Issue