from functools import total_ordering import ee.tools import importlib import logging import pkgutil import sys def eprint(*args, **kwargs): print(*args, file=sys.stderr, **kwargs) @total_ordering class Tool(object): def __init__(self, module_name, name): self.module_name = module_name self.name = name def __eq__(self, other): return self.name == other.name def __lt__(self, other): return self.name < other.name def find_tools(): prefix = ee.tools.__name__ + '.' ps = pkgutil.walk_packages(ee.tools.__path__, prefix) tools = [] for (module_loader, module_name, ispkg) in ps: name = module_name.replace(prefix, '').replace('_', '-') tools.append(Tool(module_name, name)) return sorted(tools) def main(): logging.basicConfig() # you need to initialize logging, otherwise you will not see anything from requests logging.getLogger().setLevel(logging.DEBUG) requests_log = logging.getLogger("requests.packages.urllib3") requests_log.setLevel(logging.DEBUG) requests_log.propagate = True tools = find_tools() if len(sys.argv) <= 1: eprint("Available tools:") for t in tools: print(t.name) exit(1) name = sys.argv[1] del sys.argv[1] for t in tools: if t.name != name: continue sys.argv[0] = t.name importlib.import_module(t.module_name) exit(0) eprint("No such tool: {}".format(name)) exit(1) if __name__ == "__main__": main()