of which are not only used for building the navigation, but also to actually tell py.test where docs should be generated. Also cleaned up and fixed the situation regarding relative links in the navigation menu and stylesheet/js paths. --HG-- branch : trunk
90 lines
3.4 KiB
Python
Executable File
90 lines
3.4 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
""" run py.test with the --apigen option and rsync the results to a host
|
|
|
|
rsyncs the whole package (with all the ReST docs converted to HTML) as well
|
|
as the apigen docs to a given remote host and path
|
|
"""
|
|
from _findpy import py
|
|
import py
|
|
import sys
|
|
|
|
def rsync(pkgpath, apidocspath, gateway, remotepath):
|
|
""" copy the code and docs to the remote host """
|
|
# copy to a temp dir first, even though both paths (normally) share the
|
|
# same parent dir, that may contain other stuff that we don't want to
|
|
# copy...
|
|
tempdir = py.test.ensuretemp('update_website_rsync_temp')
|
|
pkgpath.copy(tempdir.ensure(pkgpath.basename, dir=True))
|
|
apidocspath.copy(tempdir.ensure(apidocspath.basename, dir=True))
|
|
|
|
rs = py.execnet.RSync(tempdir)
|
|
rs.add_target(gateway, remotepath, delete=True)
|
|
rs.send()
|
|
|
|
def run_tests(pkgpath, apigenpath, args='', captureouterr=False):
|
|
""" run the unit tests and build the docs """
|
|
pypath = py.__package__.getpath()
|
|
pytestpath = pypath.join('bin/py.test')
|
|
# XXX this would need a Windows specific version if we want to allow
|
|
# running this script on that platform, but currently --apigen doesn't
|
|
# work there anyway...
|
|
apigenscript = pkgpath.join('apigen/apigen.py') # XXX be more general here?
|
|
if not apigenscript.check(file=True):
|
|
apigenscript = pypath.join('apigen/apigen.py')
|
|
cmd = ('APIGENPATH="%s" PYTHONPATH="%s:%s" python '
|
|
'"%s" %s --apigen="%s" "%s"' % (apigenpath, pypath.dirpath(),
|
|
pkgpath.dirpath(), pytestpath,
|
|
args, apigenscript,
|
|
pkgpath))
|
|
if captureouterr:
|
|
cmd += ' > /dev/null 2>&1'
|
|
try:
|
|
output = py.process.cmdexec(cmd)
|
|
except py.error.Error, e:
|
|
return e.err or str(e)
|
|
return None
|
|
|
|
def main(pkgpath, apidocspath, rhost, rpath, args='', ignorefail=False):
|
|
print 'running tests'
|
|
errors = run_tests(pkgpath, apidocspath, args)
|
|
if errors:
|
|
print >>sys.stderr, \
|
|
'Errors while running the unit tests: %s' % (errors,)
|
|
if not ignorefail:
|
|
print >>sys.stderr, ('if you want to continue the update '
|
|
'regardless of failures, use --ignorefail')
|
|
sys.exit(1)
|
|
|
|
print 'rsyncing'
|
|
gateway = py.execnet.SshGateway(rhost)
|
|
errors = rsync(pkgpath, apidocspath, gateway, rpath)
|
|
if errors:
|
|
print >>sys.stderr, 'Errors while rsyncing: %s'
|
|
sys.exit(1)
|
|
|
|
if __name__ == '__main__':
|
|
args = sys.argv[1:]
|
|
if '--help' in args or '-h' in args:
|
|
print 'usage: %s [options]'
|
|
print
|
|
print 'run the py lib tests and update the py lib website'
|
|
print 'options:'
|
|
print ' --ignorefail: ignore errors in the unit tests and always'
|
|
print ' try to rsync'
|
|
print ' --help: show this message'
|
|
print
|
|
print 'any additional arguments are passed on as-is to the py.test'
|
|
print 'child process'
|
|
sys.exit()
|
|
ignorefail = False
|
|
if '--ignorefail' in args:
|
|
args.remove('--ignorefail')
|
|
ignorefail = True
|
|
args = ' '.join(sys.argv[1:])
|
|
pkgpath = py.__package__.getpath()
|
|
apidocspath = pkgpath.dirpath().join('apigen')
|
|
main(pkgpath, apidocspath, 'codespeak.net',
|
|
'/home/guido/rsynctests', args, ignorefail)
|
|
|