From a2c92dcedc06af32213acccaa2eecc40fd1c87e7 Mon Sep 17 00:00:00 2001 From: iamcourtney Date: Sep 11 2016 13:58:15 +0000 Subject: Added wildcard capabilities for searching by module name --- diff --git a/fm/modules.py b/fm/modules.py index 3263629..c163747 100644 --- a/fm/modules.py +++ b/fm/modules.py @@ -31,6 +31,9 @@ import fm.exceptions from fm.module import Module from fm.metadata_cache import MetadataCache from fm.fm_modules_resolver import FmModulesResolver +import fnmatch +import re + class Modules(OrderedDict): """ @@ -223,11 +226,7 @@ class Modules(OrderedDict): modules = self.parse_version_or_release(keywords, "_release") elif "_name" in keywords: - module_names = keywords["_name"] - for mod_name in module_names: - for name, mods in self.items(): - if (mod_name == name): - modules.extend(mods) + modules = self.parse_name(keywords) else: for name, mods in self.items(): @@ -237,6 +236,26 @@ class Modules(OrderedDict): return modules + def parse_name(self, keywords): + modules = [] + module_names = keywords["_name"] + + for mod_name in module_names: + + for name, mods in self.items(): + if mod_name == name: + modules.extend(mods) + + elif "*" in mod_name: + name_regex = fnmatch.translate(mod_name) + reobj = re.compile(name_regex) + matches = [m.group(0) for mod in mods for m in [reobj.search(mod.name)] if m] + for match in matches: + if (match not in module_names): + module_names.append(match) + + return modules + def parse_version_or_release(self, keywords, keyword): """ Parse the version or release for all the modules in the database