def dump_plugins(args): """Dump plugins information""" plugins_manager.log.setLevel(logging.DEBUG) plugins_manager.ensure_plugins_loaded() plugins_manager.integrate_macros_plugins() plugins_manager.integrate_executor_plugins() plugins_manager.initialize_extra_operators_links_plugins() plugins_manager.initialize_web_ui_plugins() _header("PLUGINS MANGER:", "#") for attr_name in PLUGINS_MANAGER_ATTRIBUTES_TO_DUMP: attr_value = getattr(plugins_manager, attr_name) print(f"{attr_name} = ", end='') pprint(attr_value) print() _header("PLUGINS:", "#") if not plugins_manager.plugins: print("No plugins loaded") else: print(f"Loaded {len(plugins_manager.plugins)} plugins") for plugin_no, plugin in enumerate(plugins_manager.plugins, 1): _header(f"{plugin_no}. {plugin.name}", "=") for attr_name in PLUGINS_ATTRIBUTES_TO_DUMP: attr_value = getattr(plugin, attr_name) print(f"{attr_name} = ", end='') pprint(attr_value) print()
def dump_plugins(args): """Dump plugins information""" plugins_manager.ensure_plugins_loaded() plugins_manager.integrate_macros_plugins() plugins_manager.integrate_executor_plugins() plugins_manager.initialize_extra_operators_links_plugins() plugins_manager.initialize_web_ui_plugins() if not plugins_manager.plugins: print("No plugins loaded") return plugins_info: List[Dict[str, str]] = [] for plugin in plugins_manager.plugins: info = {"name": plugin.name} info.update( {n: getattr(plugin, n) for n in PLUGINS_ATTRIBUTES_TO_DUMP}) plugins_info.append(info) # Remove empty info if args.output == "table": # pylint: disable=too-many-nested-blocks # We can do plugins_info[0] as the element it will exist as there's # at least one plugin at this point for col in list(plugins_info[0]): if all(not bool(p[col]) for p in plugins_info): for plugin in plugins_info: del plugin[col] AirflowConsole().print_as(plugins_info, output=args.output)
def dump_plugins(args): """Dump plugins information""" plugins_manager.ensure_plugins_loaded() plugins_manager.integrate_macros_plugins() plugins_manager.integrate_executor_plugins() plugins_manager.initialize_extra_operators_links_plugins() plugins_manager.initialize_web_ui_plugins() if not plugins_manager.plugins: print("No plugins loaded") return console = Console() console.print("[bold yellow]SUMMARY:[/bold yellow]") console.print( f"[bold green]Plugins directory[/bold green]: {conf.get('core', 'plugins_folder')}\n", highlight=False) console.print( f"[bold green]Loaded plugins[/bold green]: {len(plugins_manager.plugins)}\n", highlight=False) for attr_name in PLUGINS_MANAGER_ATTRIBUTES_TO_DUMP: attr_value: Optional[List[Any]] = getattr(plugins_manager, attr_name) if not attr_value: continue table = SimpleTable(title=attr_name.capitalize().replace("_", " ")) table.add_column(width=100) for item in attr_value: # pylint: disable=not-an-iterable table.add_row(f"- {_get_name(item)}", ) console.print(table) console.print("[bold yellow]DETAILED INFO:[/bold yellow]") for plugin in plugins_manager.plugins: table = SimpleTable(title=plugin.name) for attr_name in PLUGINS_ATTRIBUTES_TO_DUMP: value = getattr(plugin, attr_name) if not value: continue table.add_row(attr_name.capitalize().replace("_", " "), _join_plugins_names(value)) console.print(table)
def test_registering_plugin_macros(self, request): """ Tests whether macros that originate from plugins are being registered correctly. """ from airflow import macros from airflow.plugins_manager import integrate_macros_plugins def cleanup_macros(): """Reloads the airflow.macros module such that the symbol table is reset after the test.""" # We're explicitly deleting the module from sys.modules and importing it again # using import_module() as opposed to using importlib.reload() because the latter # does not undo the changes to the airflow.macros module that are being caused by # invoking integrate_macros_plugins() del sys.modules['airflow.macros'] importlib.import_module('airflow.macros') request.addfinalizer(cleanup_macros) def custom_macro(): return 'foo' class MacroPlugin(AirflowPlugin): name = 'macro_plugin' macros = [custom_macro] with mock_plugin_manager(plugins=[MacroPlugin()]): # Ensure the macros for the plugin have been integrated. integrate_macros_plugins() # Test whether the modules have been created as expected. plugin_macros = importlib.import_module( f"airflow.macros.{MacroPlugin.name}") for macro in MacroPlugin.macros: # Verify that the macros added by the plugin are being set correctly # on the plugin's macro module. assert hasattr(plugin_macros, macro.__name__) # Verify that the symbol table in airflow.macros has been updated with an entry for # this plugin, this is necessary in order to allow the plugin's macros to be used when # rendering templates. assert hasattr(macros, MacroPlugin.name)