def test_instantiate_extensions(): class Extension1: pass class Extension2: pass with EntryPointContext(extension1=Extension1, extension2=Extension2): # successful instantiation of extensions extensions = instantiate_extensions('group') assert 'extension1' in extensions.keys() assert isinstance(extensions['extension1'], Extension1) assert 'extension2' in extensions.keys() assert isinstance(extensions['extension2'], Extension2) # unique extension instances unique_extensions = instantiate_extensions('group', unique_instance=True) assert 'extension1' in unique_extensions.keys() assert isinstance(unique_extensions['extension1'], Extension1) assert extensions['extension1'] != unique_extensions['extension1'] # exclude extension names extensions = instantiate_extensions('group', exclude_names=['extension1']) assert 'extension1' not in extensions.keys() assert 'extension2' in extensions.keys()
def test_instantiate_extensions_exception(): class ExtensionRaisingException: def __init__(self): raise Exception('extension raising exception') class ExtensionSkipExtensionException: def __init__(self): raise SkipExtensionException( 'extension raising skip extension exception') with EntryPointContext( exception=ExtensionRaisingException, skip_extension_exception=ExtensionSkipExtensionException): with patch('colcon_core.plugin_system.logger.error') as error: with patch('colcon_core.plugin_system.logger.info') as info: extensions = instantiate_extensions('group') # the entry point raising an exception different than a skip # extension exception results in an error message in the log assert error.call_count == 1 assert len(error.call_args[0]) == 1 assert "Exception instantiating extension 'group.exception'" \ in error.call_args[0][0] assert 'extension raising exception' in error.call_args[0][0] # the entry point raising a skip extension exception results in # an info message in the log assert info.call_count == 1 assert len(info.call_args[0]) == 1 assert "Skipping extension 'group.skip_extension_exception'" \ in info.call_args[0][0] assert 'extension raising skip extension exception' \ in info.call_args[0][0] # neither of the entry points was loaded successfully assert extensions == {}
def test_order_extensions_grouped_by_priority(): with EntryPointContext(foo=ExtensionA, bar=ExtensionB, baz=ExtensionC): extensions = instantiate_extensions('group') # ensure correct order based on priority grouped_extensions = order_extensions_grouped_by_priority(extensions) assert list(grouped_extensions.keys()) == [110, 100] # ensure correct order in each priority group based on name assert list(grouped_extensions[110].keys()) == ['baz'] assert list(grouped_extensions[100].keys()) == ['bar', 'foo']
def get_argument_parser_extensions(): """ Get the available argument parser extensions. The extensions are ordered by their priority and entry point name. :rtype: OrderedDict """ extensions = instantiate_extensions(__name__) for name, extension in extensions.items(): extension.ARGUMENT_PARSER_DECORATOR_NAME = name return order_extensions_by_priority(extensions)
def get_desktop_notification_extensions(): """ Get the available desktop notification extensions. The extensions are ordered by their priority and entry point name. :rtype: OrderedDict """ extensions = instantiate_extensions(__name__) for name, extension in extensions.items(): extension.DESKTOP_NOTIFICATION_NAME = name return order_extensions_by_priority(extensions)
def get_package_discovery_extensions(): """ Get the available package discovery extensions. The extensions are ordered by their priority and entry point name. :rtype: OrderedDict """ extensions = instantiate_extensions(__name__) for name, extension in extensions.items(): extension.PACKAGE_DISCOVERY_NAME = name return order_extensions_by_priority(extensions)
def get_package_selection_extensions(): """ Get the available package selection extensions. The extensions are ordered by their entry point name. :rtype: OrderedDict """ extensions = instantiate_extensions(__name__) for name, extension in extensions.items(): extension.PACKAGE_SELECTION_NAME = name return order_extensions_by_name(extensions)
def get_base_handler_extensions(): """ Get the available base handler extensions. The extensions are ordered by their entry point name. :rtype: OrderedDict """ extensions = instantiate_extensions(__name__) for name, extension in extensions.items(): extension.BASE_HANDLER_NAME = name return order_extensions_by_name(extensions)
def get_verb_extensions(): """ Get the available verb extensions. The extensions are ordered by their entry point name. :rtype: OrderedDict """ extensions = instantiate_extensions(__name__) for name, extension in extensions.items(): extension.VERB_NAME = name return order_extensions_by_name(extensions)
def get_test_result_extensions(*, exclude_names=None): """ Get the available test result extensions. The extensions are ordered by their entry point name. :rtype: OrderedDict """ extensions = instantiate_extensions(__name__, exclude_names=exclude_names) for name, extension in extensions.items(): extension.TEST_RESULT_NAME = name return order_extensions_by_name(extensions)
def get_package_augmentation_extensions(): """ Get the available package augmentation extensions. The extensions are ordered by their priority and entry point name. :rtype: OrderedDict """ extensions = instantiate_extensions(__name__) for name, extension in extensions.items(): extension.PACKAGE_AUGMENTATION_NAME = name return order_extensions_by_priority(extensions)
def get_event_handler_extensions(*, context): """ Get the available event handler extensions. The extensions are ordered by their priority and entry point name. :rtype: OrderedDict """ extensions = instantiate_extensions(__name__) for name, extension in extensions.items(): extension.EVENT_HANDLER_NAME = name extension.context = context return order_extensions_by_priority(extensions)
def get_package_identification_extensions(): """ Get the available package identification extensions. The extensions are grouped by their priority and each group is ordered by the entry point name. :rtype: OrderedDict """ extensions = instantiate_extensions(__name__) for name, extension in extensions.items(): extension.PACKAGE_IDENTIFICATION_NAME = name return order_extensions_grouped_by_priority(extensions)
def get_prefix_path_extensions(): """ Get the available prefix path extensions. The extensions are grouped by their priority and each group is ordered by the entry point name. :rtype: OrderedDict """ extensions = instantiate_extensions(__name__) for name, extension in extensions.items(): extension.PREFIX_PATH_NAME = name return order_extensions_grouped_by_priority(extensions)
def get_environment_extensions(): """ Get the available environment extensions. The extensions are ordered by their priority and entry point name. :rtype: OrderedDict """ extensions = instantiate_extensions(__name__) for name in list(extensions.keys()): extension = extensions[name] extension.ENVIRONMENT_NAME = name return order_extensions_by_priority(extensions)
def get_executor_extensions(): """ Get the available executor extensions. The extensions are grouped by their priority and each group is ordered by the entry point name. :rtype: OrderedDict """ extensions = instantiate_extensions(__name__) for name, extension in extensions.items(): extension.EXECUTOR_NAME = name return order_extensions_grouped_by_priority(extensions)
def get_python_testing_step_extensions(): """ Get the available Python testing step extensions. The extensions are ordered by their priority and entry point name. :rtype: OrderedDict """ extensions = instantiate_extensions('colcon_core.python_testing', unique_instance=False) for name in list(extensions.keys()): extension = extensions[name] extension.STEP_TYPE = name return order_extensions_by_priority(extensions)
def get_python_testing_step_extension(step_name): """ Get a specific Python testing step extension. :param str step_name: The entry point name of the extension :returns: A unique instance of the extension, otherwise None """ extensions = instantiate_extensions('colcon_core.python_testing.' + step_name, unique_instance=True) if step_name not in extensions: return None extension = extensions[step_name] extension.STEP_NAME = step_name return extension
def get_bundle_installer_extensions(): """ Get the bundle installer extensions and verify if they should be loaded. The extensions are ordered by their entry point name. :rtype: OrderedDict """ extensions = instantiate_extensions(__name__) filtered_extensions = { name: extension for name, extension in extensions.items() if extension.should_load() } for name, extension in filtered_extensions.items(): extension.INSTALLER_NAME = name return order_extensions_by_priority(extensions)
def get_task_extension(task_name, package_type): """ Get a specific task extension. :param str task_name: The entry point name identifying a group of task extensions :param str package_type: The package type identifying a task extension within the group :returns: The task extension """ extensions = instantiate_extensions(task_name, unique_instance=True) if package_type not in extensions: return None extension = extensions[package_type] extension.TASK_NAME = task_name.split('.')[-1] extension.PACKAGE_TYPE = package_type return extension
def get_task_extensions(task_name, *, unique_instance=False): """ Get the available task extensions. The extensions are ordered by their entry point name. :param str task_name: The task name identifying a group of task extensions :param bool unique_instance: The flag if the returned instances should be unique or cached instances can be returned instead :rtype: OrderedDict """ extensions = instantiate_extensions('%s.%s' % (__name__, task_name), unique_instance=unique_instance) for name in list(extensions.keys()): extension = extensions[name] assert hasattr(extension, task_name) extension.TASK_NAME = task_name extension.PACKAGE_TYPE = name return order_extensions_by_name(extensions)
def get_python_testing_step_extension(step_name): """ Get a specific Python testing step extension. :param str step_name: The entry point name of the extension :returns: A unique instance of the extension, otherwise None """ group_name = 'colcon_core.python_testing' extension_types = load_entry_points(group_name) extension_names = list(extension_types.keys()) if step_name not in extension_names: return None extension_names.remove(step_name) extensions = instantiate_extensions( group_name, exclude_names=extension_names, unique_instance=True) if step_name not in extensions: return None extension = extensions[step_name] extension.STEP_NAME = step_name return extension
def get_argcomplete_completer_extensions(*, exclude_names=None): """Get the argcomplete completer extensions in priority order.""" extensions = instantiate_extensions(__name__, exclude_names=exclude_names) for name, extension in extensions.items(): extension.ARGCOMPLETE_COMPLETER_NAME = name return order_extensions_by_priority(extensions)
def test_order_extensions_by_name(): with EntryPointContext(foo=ExtensionA, bar=ExtensionB, baz=ExtensionC): extensions = instantiate_extensions('group') # ensure correct order based on name ordered_extensions = order_extensions_by_name(extensions) assert list(ordered_extensions.keys()) == ['bar', 'baz', 'foo']
def instantiate_extensions_without_cache(group_name, *, exclude_names=None, unique_instance=False): return instantiate_extensions(group_name)