blob: 2b7eeb92005b40be2c6d74b4f7087160b751cd3f [file] [log] [blame]
#!/usr/bin/env python3
import argparse
import subprocess
import sys
verbose = False
def call(*args, **kwargs):
if verbose:
print(' '.join(args[0]))
ret = subprocess.call(*args, **kwargs)
if ret != 0:
sys.exit(ret)
def main(argv):
parser = argparse.ArgumentParser(prog='run')
parser.add_argument('-v', '--verbose', action='store_true')
subps = parser.add_subparsers()
subp = subps.add_parser('build', help='Build the package.')
subp.set_defaults(func=run_build)
subp = subps.add_parser('check', help='Lint the source code w/ ruff.')
subp.set_defaults(func=run_check)
subp = subps.add_parser('clean', help='Remove any local files.')
subp.set_defaults(func=run_clean)
subp = subps.add_parser(
'coverage', help='Run tests and report code coverage.'
)
subp.set_defaults(func=run_coverage)
subp = subps.add_parser('format', help='Format the source code')
subp.set_defaults(func=run_format)
subp = subps.add_parser('help', help='Get help on a subcommand.')
subp.add_argument(
nargs='?',
action='store',
dest='subcommand',
help='The command to get help for.',
)
subp.set_defaults(func=run_help)
subp = subps.add_parser(
'install', help='build the package and install locally.'
)
subp.set_defaults(func=run_install)
subp.add_argument(
'--system',
action='store_true',
help=(
'Install to the system site-package dir '
"rather than the user's (requires root)."
),
)
subp = subps.add_parser('lint', help='Lint the source code w/ pylint.')
subp.set_defaults(func=run_lint)
subp = subps.add_parser('tests', help='run the tests')
subp.set_defaults(func=run_tests)
args = parser.parse_args(argv)
global verbose
if args.verbose:
verbose = True
args.func(args)
def run_build(args):
del args
call([sys.executable, 'setup.py', 'build', '--quiet'])
def run_check(args):
del args
call([sys.executable, '-m', 'ruff', 'check'])
def run_clean(args):
del args
call(['git', 'clean', '-fxd'])
def run_coverage(args):
del args
call(
[
sys.executable,
'-m',
'coverage',
'run',
'-m',
'unittest',
'discover',
'-p',
'*_test.py',
]
)
call([sys.executable, '-m', 'coverage', 'report', '--show-missing'])
def run_format(args):
del args
call([sys.executable, '-m', 'ruff', 'format'])
def run_help(args):
if args.subcommand:
main([args.subcommand, '--help'])
main(['--help'])
def run_install(args):
if args.system:
argv = []
else:
argv = ['--user']
call([sys.executable, 'setup.py', 'install'] + argv)
def run_lint(args):
del args
call(sys.executable + ' -m pylint run */*.py', shell=True)
def run_tests(args):
del args
call([sys.executable, '-m', 'unittest', 'discover', '-p', '*_test.py'])
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))