libbe.command.depend now shares libbe.command.list's status/severity parsing for...
authorW. Trevor King <wking@drexel.edu>
Thu, 28 Oct 2010 19:31:44 +0000 (15:31 -0400)
committerW. Trevor King <wking@drexel.edu>
Thu, 28 Oct 2010 19:31:44 +0000 (15:31 -0400)
libbe/command/depend.py
libbe/command/list.py

index baea5392c1e95e0022dfe2a85b45bbec31ad79e8..a5c3e5efba80fcaf529f36f27368cd74d901be86 100644 (file)
@@ -23,6 +23,7 @@ import libbe
 import libbe.bug
 import libbe.command
 import libbe.command.util
+from libbe.command.list import Filter, parse_status, parse_severity
 import libbe.util.tree
 
 BLOCKS_TAG="BLOCKS:"
@@ -145,20 +146,15 @@ class Depend (libbe.command.Command):
                     '\n'.join(['%s |-- %s' % (blockee.id.user(), blocker.id.user())
                                for blockee,blocker in fixed])
             return 0
-        allowed_status_values = \
-            libbe.command.util.select_values(
-                params['status'], libbe.bug.status_values)
-        allowed_severity_values = \
-            libbe.command.util.select_values(
-                params['severity'], libbe.bug.severity_values)
+        status = parse_status(params['status'])
+        severity = parse_severity(params['severity'])
+        filter = Filter(status, severity)
 
         bugA, dummy_comment = libbe.command.util.bug_comment_from_user_id(
             bugdir, params['bug-id'])
 
         if params['tree-depth'] != None:
-            dtree = DependencyTree(bugdir, bugA, params['tree-depth'],
-                                   allowed_status_values,
-                                   allowed_severity_values)
+            dtree = DependencyTree(bugdir, bugA, params['tree-depth'], filter)
             if len(dtree.blocked_by_tree()) > 0:
                 print >> self.stdout, '%s blocked by:' % bugA.id.user()
                 for depth,node in dtree.blocked_by_tree().thread():
@@ -374,14 +370,11 @@ class DependencyTree (object):
     """
     Note: should probably be DependencyDiGraph.
     """
-    def __init__(self, bugdir, root_bug, depth_limit=0,
-                 allowed_status_values=None,
-                 allowed_severity_values=None):
+    def __init__(self, bugdir, root_bug, depth_limit=0, filter=None):
         self.bugdir = bugdir
         self.root_bug = root_bug
         self.depth_limit = depth_limit
-        self.allowed_status_values = allowed_status_values
-        self.allowed_severity_values = allowed_severity_values
+        self.filter = filter
 
     def _build_tree(self, child_fn):
         root = libbe.util.tree.Tree()
@@ -393,11 +386,7 @@ class DependencyTree (object):
             if self.depth_limit > 0 and node.depth == self.depth_limit:
                 continue
             for bug in child_fn(self.bugdir, node.bug):
-                if self.allowed_status_values != None \
-                        and not bug.status in self.allowed_status_values:
-                    continue
-                if self.allowed_severity_values != None \
-                        and not bug.severity in self.allowed_severity_values:
+                if not self.filter(self.bugdir, bug):
                     continue
                 child = libbe.util.tree.Tree()
                 child.bug = bug
index 3eb19326910f53ea7fdbf162b04643ae036bd6f1..645ae045f3cb6bb0786f946123dcb92a039a0da5 100644 (file)
@@ -75,6 +75,30 @@ class Filter (object):
                 return False
         return True
 
+def parse_status(status):
+    if status == 'all':
+        status = libbe.bug.status_values
+    elif status == 'active':
+        status = list(libbe.bug.active_status_values)
+    elif status == 'inactive':
+        status = list(libbe.bug.inactive_status_values)
+    else:
+        status = libbe.command.util.select_values(
+            status, libbe.bug.status_values)
+    return status
+
+def parse_severity(severity, important=False):
+    if severity == 'all':
+        severity = libbe.bug.severity_values
+    elif important == True:
+        serious = libbe.bug.severity_values.index('serious')
+        severity.append(list(libbe.bug.severity_values[serious:]))
+    else:
+        severity = libbe.command.util.select_values(
+            severity, libbe.bug.severity_values)
+    return severity
+
+
 class List (libbe.command.Command):
     """List bugs
 
@@ -198,25 +222,9 @@ class List (libbe.command.Command):
                         'Invalid sort on "%s".\nValid sorts:\n  %s'
                     % (cmp, '\n  '.join(AVAILABLE_CMPS)))
             cmp_list.append(eval('libbe.bug.cmp_%s' % cmp))
-        # select status
-        if params['status'] == 'all':
-            status = libbe.bug.status_values
-        elif params['status'] == 'active':
-            status = list(libbe.bug.active_status_values)
-        elif params['status'] == 'inactive':
-            status = list(libbe.bug.inactive_status_values)
-        else:
-            status = libbe.command.util.select_values(
-                params['status'], libbe.bug.status_values)
-        # select severity
-        if params['severity'] == 'all':
-            severity = libbe.bug.severity_values
-        elif params['important'] == True:
-            serious = libbe.bug.severity_values.index('serious')
-            severity.append(list(libbe.bug.severity_values[serious:]))
-        else:
-            severity = libbe.command.util.select_values(
-                params['severity'], libbe.bug.severity_values)
+        status = parse_status(params['status'])
+        severity = parse_severity(params['severity'],
+                                  important=params['important'])
         # select assigned
         if params['assigned'] == None:
             if params['mine'] == True: