1import parsing
2parsing.parser.add_option("--processes", metavar="NUM_PROCESSES", type="int", help="Run in multiple processes, use Pyro if available")
3parsing.parser.add_option("--processes_pyro", metavar="NUM_PROCESSES", type="int", help="Run in multiple processes, requires Pyro")
4parsing.parser.add_option("--processes_old", metavar="NUM_PROCESSES", type="int", help="Run in multiple processes, old implementation")
5
6def enable_processes_pyro(nprocesses):
7    parsing.require_posix("--processes_pyro")
8    parsing.require_modules("--processes_pyro", "Pyro")
9    from testoob.running import PyroRunner
10    parsing.kwargs["runner"] = PyroRunner(max_processes = nprocesses)
11
12def enable_processes_old(nprocesses):
13    parsing.require_posix("--processes_old")
14    from testoob.running import ProcessedRunner
15    parsing.kwargs["runner"] = ProcessedRunner(max_processes = nprocesses)
16
17def process_options(options):
18    if options.processes_pyro is not None:
19        enable_processes_pyro(options.processes_pyro)
20
21    if options.processes_old is not None:
22        enable_processes_old(options.processes_old)
23
24    if options.processes is not None:
25        try:
26            enable_processes_pyro(options.processes)
27        except parsing.ArgumentsError:
28            enable_processes_old(options.processes)
29
30parsing.option_processors.append(process_options)
31