parent
b1feb81b8a
commit
36288223b4
8
MANIFEST
8
MANIFEST
|
@ -3,6 +3,11 @@ LICENSE
|
||||||
MANIFEST
|
MANIFEST
|
||||||
README.txt
|
README.txt
|
||||||
_findpy.py
|
_findpy.py
|
||||||
|
bin-for-dist/all-plat.sh
|
||||||
|
bin-for-dist/gendoc.py
|
||||||
|
bin-for-dist/genscripts.py
|
||||||
|
bin-for-dist/gensetup.py
|
||||||
|
bin-for-dist/makepluginlist.py
|
||||||
doc/announce/release-0.9.0.txt
|
doc/announce/release-0.9.0.txt
|
||||||
doc/announce/release-0.9.2.txt
|
doc/announce/release-0.9.2.txt
|
||||||
doc/announce/release-1.0.0.txt
|
doc/announce/release-1.0.0.txt
|
||||||
|
@ -87,13 +92,10 @@ example/funcarg/test_simpleprovider.py
|
||||||
example/genhtml.py
|
example/genhtml.py
|
||||||
example/genhtmlcss.py
|
example/genhtmlcss.py
|
||||||
example/genxml.py
|
example/genxml.py
|
||||||
makepluginlist.py
|
|
||||||
py/LICENSE
|
py/LICENSE
|
||||||
py/__init__.py
|
py/__init__.py
|
||||||
py/_com.py
|
py/_com.py
|
||||||
py/bin/_findpy.py
|
py/bin/_findpy.py
|
||||||
py/bin/_genscripts.py
|
|
||||||
py/bin/gendoc.py
|
|
||||||
py/bin/py.cleanup
|
py/bin/py.cleanup
|
||||||
py/bin/py.countloc
|
py/bin/py.countloc
|
||||||
py/bin/py.lookup
|
py/bin/py.lookup
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
py.test --dist=each $* \
|
||||||
|
--tx 'popen//python=python2.6' \
|
||||||
|
--tx 'ssh=noco//python=/usr/local/bin/python2.4//chdir=/tmp/pytest-python2.4' \
|
||||||
|
--tx 'socket=192.168.1.106:8888'
|
|
@ -1,5 +1,7 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
XXX
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
from _findpy import py
|
from _findpy import py
|
|
@ -1,6 +1,7 @@
|
||||||
from _findpy import py
|
from _findpy import py
|
||||||
|
|
||||||
mydir = py.magic.autopath().dirpath()
|
bindir = py.magic.autopath().dirpath().dirpath("py").join("bin")
|
||||||
|
assert bindir.check(), bindir
|
||||||
|
|
||||||
def getbasename(name):
|
def getbasename(name):
|
||||||
assert name[:2] == "py"
|
assert name[:2] == "py"
|
||||||
|
@ -8,7 +9,7 @@ def getbasename(name):
|
||||||
|
|
||||||
def genscript_unix(name):
|
def genscript_unix(name):
|
||||||
basename = getbasename(name)
|
basename = getbasename(name)
|
||||||
path = mydir.join(basename)
|
path = bindir.join(basename)
|
||||||
path.write(py.code.Source("""
|
path.write(py.code.Source("""
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
from _findpy import py
|
from _findpy import py
|
||||||
|
@ -19,7 +20,7 @@ def genscript_unix(name):
|
||||||
def genscript_windows(name):
|
def genscript_windows(name):
|
||||||
basename = getbasename(name)
|
basename = getbasename(name)
|
||||||
winbasename = basename + ".cmd"
|
winbasename = basename + ".cmd"
|
||||||
path = mydir.join("win32").join(winbasename)
|
path = bindir.join("win32").join(winbasename)
|
||||||
path.write(py.code.Source("""
|
path.write(py.code.Source("""
|
||||||
@echo off
|
@echo off
|
||||||
python "%%~dp0\..\%s" %%*
|
python "%%~dp0\..\%s" %%*
|
|
@ -0,0 +1,342 @@
|
||||||
|
import sys
|
||||||
|
|
||||||
|
sys.path.insert(0, sys.argv[1])
|
||||||
|
import py
|
||||||
|
|
||||||
|
toolpath = py.magic.autopath()
|
||||||
|
binpath = py.path.local(py.__file__).dirpath('bin')
|
||||||
|
|
||||||
|
def error(msg):
|
||||||
|
print >>sys.stderr, msg
|
||||||
|
raise SystemExit, 1
|
||||||
|
|
||||||
|
def reformat(text):
|
||||||
|
return " ".join(text.split())
|
||||||
|
|
||||||
|
class SetupWriter(object):
|
||||||
|
EXCLUDES = ("MANIFEST.in", "contrib")
|
||||||
|
|
||||||
|
def __init__(self, basedir, pkg, setuptools=False):
|
||||||
|
self.basedir = basedir
|
||||||
|
self.setuptools = setuptools
|
||||||
|
assert self.basedir.check()
|
||||||
|
self.pkg = pkg
|
||||||
|
self.meta = pkg.__pkg__
|
||||||
|
self.lines = []
|
||||||
|
self.allpaths = self.getallpath(self.basedir)
|
||||||
|
|
||||||
|
def getallpath(self, basedir):
|
||||||
|
contrib = self.basedir.join("contrib")
|
||||||
|
allpath = []
|
||||||
|
lines = py.process.cmdexec("hg st -mcan").split("\n")
|
||||||
|
for path in lines:
|
||||||
|
p = basedir.join(path)
|
||||||
|
assert p.check(), p
|
||||||
|
if not p.relto(contrib) and p != contrib and not self.isexcluded(p):
|
||||||
|
allpath.append(p)
|
||||||
|
return allpath
|
||||||
|
|
||||||
|
def append(self, string):
|
||||||
|
lines = string.split("\n")
|
||||||
|
while lines:
|
||||||
|
if not lines[0].strip():
|
||||||
|
lines.pop(0)
|
||||||
|
continue
|
||||||
|
break
|
||||||
|
if not lines:
|
||||||
|
self.lines.append("")
|
||||||
|
return
|
||||||
|
line = lines[0]
|
||||||
|
indent = len(line) - len(line.lstrip())
|
||||||
|
for line in lines:
|
||||||
|
if line.strip():
|
||||||
|
assert not line[:indent].strip(), line
|
||||||
|
line = line[indent:]
|
||||||
|
self.lines.append(line)
|
||||||
|
|
||||||
|
def write_winfuncs(self):
|
||||||
|
self.append('''
|
||||||
|
''')
|
||||||
|
|
||||||
|
def tip_info(self, indent=8):
|
||||||
|
old = self.basedir.chdir()
|
||||||
|
indent = " " * indent
|
||||||
|
try:
|
||||||
|
info = []
|
||||||
|
output = py.process.cmdexec(
|
||||||
|
"hg tip --template '" # tags: {tags}\n"
|
||||||
|
#"branch: {branches}\n"
|
||||||
|
"revision: {rev}:{node}\n'"
|
||||||
|
)
|
||||||
|
for line in output.split("\n"):
|
||||||
|
info.append("%s %s" %(indent, line.strip()))
|
||||||
|
return "\n".join(info)
|
||||||
|
finally:
|
||||||
|
old.chdir()
|
||||||
|
|
||||||
|
def setup_header(self):
|
||||||
|
#tooltime = "%s %s" %(py.std.time.asctime(), py.std.time.tzname[0])
|
||||||
|
toolname = toolpath.basename
|
||||||
|
#toolrevision = py.path.svnwc(toolpath).info().rev
|
||||||
|
|
||||||
|
pkgname = self.pkg.__name__
|
||||||
|
info = self.tip_info()
|
||||||
|
self.append('''
|
||||||
|
"""
|
||||||
|
py lib / py.test setup.py file, autogenerated by %(toolname)s
|
||||||
|
''' % locals())
|
||||||
|
#self.append(info)
|
||||||
|
self.append('''
|
||||||
|
"""
|
||||||
|
import os, sys
|
||||||
|
''')
|
||||||
|
|
||||||
|
if self.setuptools:
|
||||||
|
#import ez_setup
|
||||||
|
#ez_setup.use_setuptools()
|
||||||
|
self.append("""
|
||||||
|
from setuptools import setup
|
||||||
|
""")
|
||||||
|
else:
|
||||||
|
self.append("""
|
||||||
|
from distutils.core import setup
|
||||||
|
""")
|
||||||
|
|
||||||
|
def setup_trailer(self):
|
||||||
|
self.append('''
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
''')
|
||||||
|
|
||||||
|
def setup_function(self):
|
||||||
|
params = self.__dict__.copy()
|
||||||
|
params.update(self.meta.__dict__)
|
||||||
|
#params['url'] = self.wcinfo.url
|
||||||
|
#params['rev'] = self.wcinfo.rev
|
||||||
|
#params['long_description'] = reformat(params['long_description'])
|
||||||
|
#print py.std.pprint.pprint(params)
|
||||||
|
self.append('long_description = """')
|
||||||
|
for line in params['long_description'].split('\n'):
|
||||||
|
self.append(line)
|
||||||
|
self.append('"""')
|
||||||
|
trunk = None
|
||||||
|
if params['version'] == 'trunk':
|
||||||
|
trunk = 'trunk'
|
||||||
|
self.append('trunk = %r' % trunk)
|
||||||
|
self.append('''
|
||||||
|
def main():
|
||||||
|
setup(
|
||||||
|
name=%(name)r,
|
||||||
|
description=%(description)r,
|
||||||
|
long_description = long_description,
|
||||||
|
version= trunk or %(version)r,
|
||||||
|
url=%(url)r,
|
||||||
|
license=%(license)r,
|
||||||
|
platforms=%(platforms)r,
|
||||||
|
author=%(author)r,
|
||||||
|
author_email=%(author_email)r,
|
||||||
|
''' % params)
|
||||||
|
indent = " " * 8
|
||||||
|
#self.append_pprint(indent, py_modules=['_findpy',]),
|
||||||
|
#self.append_pprint(indent, scripts=self.getscripts())
|
||||||
|
self.append_pprint(indent, entry_points={'console_scripts':self.getconsolescripts()})
|
||||||
|
self.append_pprint(indent, classifiers=self.meta.classifiers)
|
||||||
|
self.append_pprint(indent, packages=self.getpackages())
|
||||||
|
#self.append_pprint(indent, data_files=self.getdatafiles())
|
||||||
|
self.append_pprint(indent, package_data=self.getpackagedata())
|
||||||
|
#self.append_pprint(indent, package_dir={'py': 'py'})
|
||||||
|
#self.append_pprint(indent, packages=self.getpackages())
|
||||||
|
if self.setuptools:
|
||||||
|
self.append_pprint(indent, zip_safe=False)
|
||||||
|
self.lines.append(indent[4:] + ")\n")
|
||||||
|
|
||||||
|
def setup_scripts(self):
|
||||||
|
# XXX this was used for a different approach
|
||||||
|
not used
|
||||||
|
self.append("""
|
||||||
|
def getscripts():
|
||||||
|
if sys.platform == "win32":
|
||||||
|
base = "py/bin/win32/"
|
||||||
|
ext = ".cmd"
|
||||||
|
else:
|
||||||
|
base = "py/bin/"
|
||||||
|
ext = ""
|
||||||
|
l = []
|
||||||
|
for name in %r:
|
||||||
|
l.append(base + name + ext)
|
||||||
|
return l
|
||||||
|
""" % ([script.basename for script in binpath.listdir("py.*")]))
|
||||||
|
|
||||||
|
def append_pprint(self, indent, append=",", **kw):
|
||||||
|
for name, value in kw.items():
|
||||||
|
stringio = py.std.StringIO.StringIO()
|
||||||
|
value = py.std.pprint.pprint(value, stream=stringio)
|
||||||
|
stringio.seek(0)
|
||||||
|
lines = stringio.readlines()
|
||||||
|
line = lines.pop(0).rstrip()
|
||||||
|
self.lines.append(indent + "%s=%s" %(name, line))
|
||||||
|
indent = indent + " " * (len(name)+1)
|
||||||
|
for line in lines:
|
||||||
|
self.lines.append(indent + line.rstrip())
|
||||||
|
self.lines[-1] = self.lines[-1] + append
|
||||||
|
|
||||||
|
def getconsolescripts(self):
|
||||||
|
bindir = self.basedir.join('py', 'bin')
|
||||||
|
scripts = []
|
||||||
|
for p in self.allpaths:
|
||||||
|
if p.dirpath() == bindir:
|
||||||
|
if p.basename.startswith('py.'):
|
||||||
|
shortname = "py" + p.basename[3:]
|
||||||
|
scripts.append("%s = py.cmdline:%s" %
|
||||||
|
(p.basename, shortname))
|
||||||
|
return scripts
|
||||||
|
|
||||||
|
def getscripts(self):
|
||||||
|
bindir = self.basedir.join('py', 'bin')
|
||||||
|
scripts = []
|
||||||
|
for p in self.allpaths:
|
||||||
|
if p.dirpath() == bindir:
|
||||||
|
if p.basename.startswith('py.'):
|
||||||
|
scripts.append(p.relto(self.basedir))
|
||||||
|
return scripts
|
||||||
|
|
||||||
|
def getpackages(self):
|
||||||
|
packages = []
|
||||||
|
for p in self.allpaths: # contains no directories!
|
||||||
|
#if p.basename == "py":
|
||||||
|
# continue
|
||||||
|
if p.dirpath('__init__.py').check():
|
||||||
|
modpath = p.dirpath().relto(self.basedir).replace(p.sep, '.')
|
||||||
|
if modpath != "py" and not modpath.startswith("py."):
|
||||||
|
continue
|
||||||
|
if modpath in packages:
|
||||||
|
continue
|
||||||
|
for exclude in self.EXCLUDES:
|
||||||
|
if modpath.startswith(exclude):
|
||||||
|
print "EXCLUDING", modpath
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
packages.append(modpath)
|
||||||
|
packages.sort()
|
||||||
|
return packages
|
||||||
|
|
||||||
|
def getpackagedata(self):
|
||||||
|
datafiles = []
|
||||||
|
pkgbase = self.basedir.join(self.pkg.__name__)
|
||||||
|
for p in self.allpaths:
|
||||||
|
if p.check(file=1) and (not p.dirpath("__init__.py").check()
|
||||||
|
or p.ext != ".py"):
|
||||||
|
if p.dirpath() != self.basedir:
|
||||||
|
x = p.relto(pkgbase)
|
||||||
|
if x:
|
||||||
|
datafiles.append(p.relto(pkgbase))
|
||||||
|
return {'py': datafiles}
|
||||||
|
|
||||||
|
def getdatafiles(self):
|
||||||
|
datafiles = []
|
||||||
|
for p in self.allpaths:
|
||||||
|
if p.check(file=1) and not p.ext == ".py":
|
||||||
|
if p.dirpath() != self.basedir:
|
||||||
|
datafiles.append(p.relto(self.basedir))
|
||||||
|
return datafiles
|
||||||
|
|
||||||
|
def setup_win32(self):
|
||||||
|
import winpath
|
||||||
|
self.append(py.std.inspect.getsource(winpath))
|
||||||
|
self.append("""
|
||||||
|
from distutils.command.install import install
|
||||||
|
class my_install(install):
|
||||||
|
def finalize_other(self):
|
||||||
|
install.finalize_other(self)
|
||||||
|
on_win32_add_to_PATH()
|
||||||
|
cmdclass = {'install': my_install}
|
||||||
|
""")
|
||||||
|
|
||||||
|
def setup_win32(self):
|
||||||
|
self.append(r'''
|
||||||
|
# scripts for windows: turn "py.SCRIPT" into "py_SCRIPT" and create
|
||||||
|
# "py.SCRIPT.cmd" files invoking "py_SCRIPT"
|
||||||
|
from distutils.command.install_scripts import install_scripts
|
||||||
|
class my_install_scripts(install_scripts):
|
||||||
|
def run(self):
|
||||||
|
install_scripts.run(self)
|
||||||
|
#print self.outfiles
|
||||||
|
for fn in self.outfiles:
|
||||||
|
basename = os.path.basename(fn)
|
||||||
|
if basename.startswith("py.") and not basename.endswith(".cmd"):
|
||||||
|
newbasename = basename.replace(".", "_")
|
||||||
|
newfn = os.path.join(os.path.dirname(fn), newbasename)
|
||||||
|
if os.path.exists(newfn):
|
||||||
|
os.remove(newfn)
|
||||||
|
os.rename(fn, newfn)
|
||||||
|
fncmd = fn + ".cmd"
|
||||||
|
if os.path.exists(fncmd):
|
||||||
|
os.remove(fncmd)
|
||||||
|
f = open(fncmd, 'w')
|
||||||
|
f.write("@echo off\n")
|
||||||
|
f.write('python "%%~dp0\%s" %%*' %(newbasename))
|
||||||
|
f.close()
|
||||||
|
if sys.platform == "win32":
|
||||||
|
cmdclass = {'install_scripts': my_install_scripts}
|
||||||
|
else:
|
||||||
|
cmdclass = {}
|
||||||
|
''')
|
||||||
|
|
||||||
|
def write_setup(self):
|
||||||
|
self.setup_header()
|
||||||
|
self.setup_function()
|
||||||
|
#self.setup_scripts()
|
||||||
|
#self.setup_win32()
|
||||||
|
self.setup_trailer()
|
||||||
|
targetfile = self.basedir.join("setup.py")
|
||||||
|
targetfile.write("\n".join(self.lines))
|
||||||
|
print "wrote", targetfile
|
||||||
|
|
||||||
|
def isexcluded(self, wcpath):
|
||||||
|
return wcpath.basename[0] == "."
|
||||||
|
rel = wcpath.relto(self.basedir)
|
||||||
|
if rel.find("testing") != -1:
|
||||||
|
return True
|
||||||
|
|
||||||
|
def write_manifest(self):
|
||||||
|
lines = []
|
||||||
|
for p in self.allpaths:
|
||||||
|
if p.check(dir=1):
|
||||||
|
continue
|
||||||
|
toadd = p.relto(self.basedir)
|
||||||
|
if toadd:
|
||||||
|
for exclude in self.EXCLUDES:
|
||||||
|
if toadd.startswith(exclude):
|
||||||
|
break
|
||||||
|
assert toadd.find(exclude) == -1, (toadd, exclude)
|
||||||
|
else:
|
||||||
|
lines.append("%s" %(toadd))
|
||||||
|
lines.sort()
|
||||||
|
targetfile = self.basedir.join("MANIFEST")
|
||||||
|
targetfile.write("\n".join(lines))
|
||||||
|
print "wrote", targetfile
|
||||||
|
|
||||||
|
def write_all(self):
|
||||||
|
self.write_manifest()
|
||||||
|
self.write_setup()
|
||||||
|
|
||||||
|
def parseargs():
|
||||||
|
basedir = py.path.local(sys.argv[1])
|
||||||
|
if not basedir.check():
|
||||||
|
error("basedir not found: %s" %(basedir,))
|
||||||
|
pydir = basedir.join('py')
|
||||||
|
if not pydir.check():
|
||||||
|
error("no 'py' directory found in: %s" %(pydir,))
|
||||||
|
actualpydir = py.path.local(py.__file__).dirpath()
|
||||||
|
if pydir != actualpydir:
|
||||||
|
error("package dir conflict, %s != %s" %(pydir, actualpydir))
|
||||||
|
return basedir
|
||||||
|
|
||||||
|
def main(basedir=None):
|
||||||
|
if basedir is None:
|
||||||
|
basedir = parseargs()
|
||||||
|
writer = SetupWriter(basedir, py, setuptools=True)
|
||||||
|
writer.write_all()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -10,9 +10,7 @@ Contact and Communication points
|
||||||
|
|
||||||
- `Testing In Python`_: a mailing list for testing tools and discussion.
|
- `Testing In Python`_: a mailing list for testing tools and discussion.
|
||||||
|
|
||||||
- `py-svn general commit mailing list`_ to follow development commits,
|
- `commit mailing list`_ or `@pylibcommit`_ to follow development commits,
|
||||||
|
|
||||||
- http://twitter.com/pylibcommit for following commits via twitter
|
|
||||||
|
|
||||||
- `bitbucket issue tracker`_ use this bitbucket issue tracker to report
|
- `bitbucket issue tracker`_ use this bitbucket issue tracker to report
|
||||||
bugs or request features.
|
bugs or request features.
|
||||||
|
@ -27,6 +25,8 @@ Contact and Communication points
|
||||||
|
|
||||||
.. _tetamap: http://tetamap.wordpress.com
|
.. _tetamap: http://tetamap.wordpress.com
|
||||||
|
|
||||||
|
.. _`@pylibcommit`: http://twitter.com/pylibcommit
|
||||||
|
|
||||||
|
|
||||||
..
|
..
|
||||||
get an account on codespeak
|
get an account on codespeak
|
||||||
|
@ -45,8 +45,6 @@ Contact and Communication points
|
||||||
.. _`py-dev`:
|
.. _`py-dev`:
|
||||||
.. _`development mailing list`:
|
.. _`development mailing list`:
|
||||||
.. _`py-dev developers list`: http://codespeak.net/mailman/listinfo/py-dev
|
.. _`py-dev developers list`: http://codespeak.net/mailman/listinfo/py-dev
|
||||||
.. _`subversion commit mailing list`:
|
|
||||||
.. _`py-svn`:
|
.. _`py-svn`:
|
||||||
.. _`py-svn general commit mailing list`: http://codespeak.net/mailman/listinfo/py-svn
|
.. _`commit mailing list`: http://codespeak.net/mailman/listinfo/py-svn
|
||||||
.. _`development bug/feature tracker`: https://codespeak.net/issue/py-dev/
|
|
||||||
|
|
||||||
|
|
12
doc/faq.txt
12
doc/faq.txt
|
@ -6,7 +6,7 @@ Frequently Asked Questions
|
||||||
:local:
|
:local:
|
||||||
:depth: 2
|
:depth: 2
|
||||||
|
|
||||||
naming, nose and magic
|
On naming, nose and magic
|
||||||
============================
|
============================
|
||||||
|
|
||||||
Why the ``py`` naming? what is it?
|
Why the ``py`` naming? what is it?
|
||||||
|
@ -34,7 +34,7 @@ for the ``py.test`` command line tool is: in the
|
||||||
What's the relation to ``nosetests``?
|
What's the relation to ``nosetests``?
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
|
|
||||||
py.test and nose_ share some basic philosophy when it comes
|
py.test and nose_ share basic philosophy when it comes
|
||||||
to running Python tests. In fact,
|
to running Python tests. In fact,
|
||||||
with py.test-1.0.1 it is easy to run many test suites
|
with py.test-1.0.1 it is easy to run many test suites
|
||||||
that currently work with ``nosetests``. nose_ was created
|
that currently work with ``nosetests``. nose_ was created
|
||||||
|
@ -51,13 +51,13 @@ What's all this "magic" with py.test?
|
||||||
"All this magic" usually boils down to two issues:
|
"All this magic" usually boils down to two issues:
|
||||||
|
|
||||||
* There is a special tweak to importing: `py/__init__.py`_ contains
|
* There is a special tweak to importing: `py/__init__.py`_ contains
|
||||||
contains a dictionary which maps the ``py.*`` namespaces
|
a dictionary which maps the importable ``py.*`` namespaces to
|
||||||
to objects in files. When looking at the project source code
|
objects in files. When looking at the project source code
|
||||||
you see imports like ``from py.__.test.session import Session``. The
|
you see imports like ``from py.__.test.session import Session``. The
|
||||||
the double ``__`` underscore indicates the "normal" python
|
the double ``__`` underscore indicates the "normal" python
|
||||||
filesystem/namespace coupled import, i.e. it points to
|
filesystem/namespace coupled import, i.e. it points to
|
||||||
``py/test/session.py``'s ``Session`` object. However,
|
``py/test/session.py``'s ``Session`` object. However,
|
||||||
normal usage happens through the clean exported `py namespaces`_
|
from the outside you use the "non-underscore" `py namespaces`_
|
||||||
so this distinction usually only shows up if you hack
|
so this distinction usually only shows up if you hack
|
||||||
on internal code or see internal tracebacks.
|
on internal code or see internal tracebacks.
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ What's all this "magic" with py.test?
|
||||||
off assert re-intepretation.
|
off assert re-intepretation.
|
||||||
|
|
||||||
Other than that, ``py.test`` has bugs or quirks like any other computer
|
Other than that, ``py.test`` has bugs or quirks like any other computer
|
||||||
software although it has a *strong* focus on running robustly and has
|
software. In fact, it has a *strong* focus on running robustly and has
|
||||||
over a thousand automated tests for its own code base.
|
over a thousand automated tests for its own code base.
|
||||||
|
|
||||||
.. _`py namespaces`: index.html
|
.. _`py namespaces`: index.html
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -105,8 +105,6 @@ def main():
|
||||||
'py.xmlobj.testing'],
|
'py.xmlobj.testing'],
|
||||||
package_data={'py': ['LICENSE',
|
package_data={'py': ['LICENSE',
|
||||||
'bin/_findpy.py',
|
'bin/_findpy.py',
|
||||||
'bin/_genscripts.py',
|
|
||||||
'bin/gendoc.py',
|
|
||||||
'bin/py.cleanup',
|
'bin/py.cleanup',
|
||||||
'bin/py.countloc',
|
'bin/py.countloc',
|
||||||
'bin/py.lookup',
|
'bin/py.lookup',
|
||||||
|
|
Loading…
Reference in New Issue