Source code for toil.utils.toilMain
import os
import re
import sys
import textwrap
import types
from typing import Any, Dict
from importlib.metadata import version as metadata_version
from toil.version import version
[docs]
def main() -> None:
modules = loadModules()
if len(sys.argv) < 2 or sys.argv[1] == '--help':
printHelp(modules)
sys.exit(0)
cmd = sys.argv[1]
if cmd == '--version':
printVersion()
sys.exit(0)
try:
module = modules[cmd]
except KeyError:
sys.stderr.write(f'Unknown option "{cmd}". Pass --help to display usage information.\n')
sys.exit(1)
del sys.argv[1]
get_or_die(module, 'main')()
[docs]
def get_or_die(module: types.ModuleType, name: str) -> Any:
"""
Get an object from a module or complain that it is missing.
"""
if hasattr(module, name):
return getattr(module, name)
else:
sys.stderr.write(f'Internal Toil error!\nToil utility module '
f'{module.__name__} is missing required attribute {name}\n')
sys.exit(1)
[docs]
def loadModules() -> Dict[str, types.ModuleType]:
# noinspection PyUnresolvedReferences
from toil.utils import toilClean # noqa
from toil.utils import toilConfig # noqa
from toil.utils import toilDebugFile # noqa
from toil.utils import toilDebugJob # noqa
from toil.utils import toilDestroyCluster # noqa
from toil.utils import toilKill # noqa
from toil.utils import toilLaunchCluster # noqa
from toil.utils import toilRsyncCluster # noqa
from toil.utils import toilServer # noqa
from toil.utils import toilSshCluster # noqa
from toil.utils import toilStats # noqa
from toil.utils import toilStatus # noqa
return {'-'.join([i.lower() for i in re.findall('[A-Z][^A-Z]*', name)]): module for name, module in locals().items()}
[docs]
def printHelp(modules: Dict[str, types.ModuleType]) -> None:
name = os.path.basename(sys.argv[0])
descriptions = '\n '.join(f'{cmd} - {get_or_die(mod, "__doc__").strip()}' for cmd, mod in modules.items() if mod)
print(textwrap.dedent(f"""
Usage: {name} COMMAND ...
{name} --help
{name} COMMAND --help
Where COMMAND is one of the following:
{descriptions}
"""[1:]))
[docs]
def printVersion() -> None:
try:
detected_version = metadata_version('toil')
if "a" in detected_version:
# This probably means Toil is installed as development
print(version)
else:
print(detected_version)
except:
print(f'Version gathered from toil.version: {version}')