[docs]defrun(self):try:print_log(f"Running immuneML version {Constants.VERSION}\n",include_datetime=True)self.set_cache()print_log(f"immuneML: parsing the specification...\n",include_datetime=True)symbol_table,self._specification_path=ImmuneMLParser.parse_yaml_file(self._specification_path,self._result_path)print_log(f"immuneML: starting the analysis...\n",include_datetime=True)instructions=symbol_table.get_by_type(SymbolType.INSTRUCTION)output=symbol_table.get("output")model=SemanticModel([instruction.itemforinstructionininstructions],self._result_path,output)result=model.run()self.clear_cache()print_log(f"ImmuneML: finished analysis.\n",include_datetime=True)returnresultexcept(ModuleNotFoundError,ImportError)ase:sys_exit(f"{e}\n\nAn error occurred when trying to import a package. Please check if all necessary "f"packages are installed correctly. See the log above for more details.")
[docs]defrun_immuneML(namespace:argparse.Namespace):ifos.path.isdir(namespace.result_path)andlen(os.listdir(namespace.result_path))!=0:raiseValueError(f"Directory {namespace.result_path} already exists. Please specify a new output directory "f"for the analysis.")PathBuilder.build(namespace.result_path)logging.basicConfig(filename=Path(namespace.result_path)/"log.txt",level=logging.INFO,format='%(asctime)s%(levelname)s: %(message)s')warnings.showwarning=lambdamessage,category,filename,lineno,file=None,line=None:logging.warning(message)ifnamespace.toolisNone:app=ImmuneMLApp(namespace.specification_path,namespace.result_path)else:app_cls=ReflectionHandler.get_class_by_name(namespace.tool,"api/")app=app_cls(**vars(namespace))app.run()
[docs]defmain():parser=argparse.ArgumentParser(description="immuneML command line tool")parser.add_argument("specification_path",help="Path to specification YAML file. Always used to define the ""analysis.")parser.add_argument("result_path",help="Output directory path.")parser.add_argument("--tool",help="Name of the tool which calls immuneML. This name will be used to invoke ""appropriate API call, which will then do additional work in tool-dependent ""way before running standard immuneML.")parser.add_argument("--version",action="version",version=Constants.VERSION)namespace=parser.parse_args()namespace.specification_path=Path(namespace.specification_path)namespace.result_path=Path(namespace.result_path)run_immuneML(namespace)