def load_tool_definition_by_name( tool_configuration_path, default_tool_name=None): tool_definition_by_name = {} configuration = RawCaseSensitiveConfigParser() configuration.read(tool_configuration_path) configuration_folder = dirname(tool_configuration_path) d = { u'configuration_path': tool_configuration_path, u'configuration_folder': configuration_folder, } for section_name in configuration.sections(): try: tool_name = TOOL_NAME_PATTERN.match(section_name).group(1).strip() except AttributeError: continue if not tool_name: tool_name = default_tool_name tool_definition = { unicode_safely(k): unicode_safely(v) for k, v in configuration.items(section_name)} for key in tool_definition: if key in ('show_standard_output', 'show_standard_error'): tool_definition[key] = asbool(tool_definition[key]) elif key.endswith('.dependencies'): tool_definition[key] = aslist(tool_definition[key]) tool_definition[u'tool_name'] = tool_name tool_definition[u'argument_names'] = parse_tool_argument_names( tool_definition.get('command_template', u'')) tool_definition_by_name[tool_name] = dict(tool_definition, **d) return make_absolute_paths(tool_definition_by_name, configuration_folder)
def find_tool_definition_by_name(folder, default_tool_name=None): tool_definition_by_name = {} folder = unicode_safely(folder) default_tool_name = unicode_safely(default_tool_name) for root_folder, folder_names, file_names in walk(folder): if are_same_path(root_folder, folder): tool_name = default_tool_name or basename(folder) else: tool_name = basename(root_folder) for file_name in file_names: if not fnmatch(file_name, '*.ini'): continue tool_definition_by_name.update(load_tool_definition_by_name( join(root_folder, file_name), default_tool_name=tool_name)) return tool_definition_by_name
def get_tool_definition_by_name_from_folder( tool_folder, default_tool_name=None): tool_definition_by_name = {} tool_folder = unicode_safely(tool_folder) default_tool_name = unicode_safely(default_tool_name) for root_folder, folder_names, file_names in walk(tool_folder): if are_same_path(root_folder, tool_folder): tool_name = default_tool_name or basename(tool_folder) else: tool_name = basename(root_folder) for file_name in file_names: if not fnmatch(file_name, '*.ini'): continue configuration_path = join(root_folder, file_name) tool_definition_by_name.update( get_tool_definition_by_name_from_path( configuration_path, default_tool_name=tool_name)) return tool_definition_by_name