def do_compile(refs: Dict[Any, Any] = {}) -> Tuple[Dict[str, inmanta_type.Type], Namespace]: """ Perform a complete compilation run for the current project (as returned by :py:meth:`inmanta.module.Project.get`) :param refs: Datastructure used to pass on mocking information to the compiler. Supported options: * key="facts"; value=Dict with the following structure: {"<resource_id": {"<fact_name>": "<fact_value"}} """ compiler = Compiler(refs=refs) LOGGER.debug("Starting compile") project = module.Project.get() try: (statements, blocks) = compiler.compile() except ParserException as e: compiler.handle_exception(e) sched = scheduler.Scheduler(compiler_config.track_dataflow(), project.get_relation_precedence_policy()) try: success = sched.run(compiler, statements, blocks) except CompilerException as e: if compiler_config.dataflow_graphic_enable.get(): show_dataflow_graphic(sched, compiler) compiler.handle_exception(e) success = False LOGGER.debug("Compile done") if not success: sys.stderr.write("Unable to execute all statements.\n") if compiler_config.export_compile_data.get(): compiler.export_data() if compiler_config.dataflow_graphic_enable.get(): show_dataflow_graphic(sched, compiler) return (sched.get_types(), compiler.get_ns())
def get_types_and_scopes() -> Tuple[Dict[str, inmanta_type.Type], Namespace]: """ Only run the compilation steps required to extract the different types and scopes. """ compiler = Compiler() (statements, blocks) = compiler.compile() sched = scheduler.Scheduler(compiler_config.track_dataflow()) sched.define_types(compiler, statements, blocks) return sched.get_types(), compiler.get_ns()
def anchormap(refs: Dict[Any, Any] = {}) -> Sequence[Tuple[Location, Location]]: """ Return all lexical references Performs compilation up to and including the type resolution, but doesn't start executing :param refs: Datastructure used to pass on mocking information to the compiler. Supported options: * key="facts"; value=Dict with the following structure: {"<resource_id": {"<fact_name>": "<fact_value"}} """ compiler = Compiler(refs=refs) LOGGER.debug("Starting compile") (statements, blocks) = compiler.compile() sched = scheduler.Scheduler() return sched.anchormap(compiler, statements, blocks)
def do_compile(refs={}): """ Run run run """ project = Project.get() compiler = Compiler(os.path.join(project.project_path, project.main_file), refs=refs) LOGGER.debug("Starting compile") (statements, blocks) = compiler.compile() sched = scheduler.Scheduler() success = sched.run(compiler, statements, blocks) LOGGER.debug("Compile done") if not success: sys.stderr.write("Unable to execute all statements.\n") return (sched.get_types(), compiler.get_ns())