4042: Add support for filter and group of lists
authorPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 2 Oct 2014 17:44:47 +0000 (13:44 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 2 Oct 2014 17:44:47 +0000 (13:44 -0400)
crunch_scripts/run-command

index 74ad8a87fca0a8f0aadf685d09e8fa29a0fcb002..01ab10259cfb1c2214b8e77221f8112f706af709 100755 (executable)
@@ -101,7 +101,28 @@ def expand_item(p, c):
 def expand_list(p, l):
     return [exp for arg in l for exp in expand_item(p, arg)]
 
+def add_to_group(gr, match):
+    m = ('^_^').join(match.groups()[1:])
+    if m not in gr:
+        gr[m] = []
+    gr[m].extend(match.group(0))
+
 def get_items(p, value):
+    if isinstance(value, dict):
+        if "filter" in value and "regex" in value:
+            pattern = re.compile(value["regex"])
+            items = get_items(p, value["group"])
+            return [i for i in items if pattern.match(i)]
+
+        if "group" in value and "regex" in value:
+            pattern = re.compile(value["regex"])
+            items = get_items(p, value["group"])
+            groups = {}
+            for i in items:
+                p = pattern.match(i)
+                if p:
+                    add_to_group(groups, p)
+            return [r[k] for k in r]
     if isinstance(value, list):
         return expand_list(p, value)