import os
def list_bugs(args):
- bugs = [b for b in tree_root(os.getcwd()).list() if b.active]
+ active = True
+ status = ("minor", "serious", "critical", "fatal")
+ def filter(bug):
+ if active is not None:
+ if bug.active != active:
+ return False
+ if bug.status not in status:
+ return False
+ return True
+
+ bugs = [b for b in tree_root(os.getcwd()).list() ]
if len(bugs) == 0:
print "No matching bugs found"
for bug in bugs:
- print "%s: %s" % (unique_name(bug, bugs), bug.summary)
+ target = bug.target
+ if target is None:
+ target = ""
+ else:
+ target = " target: %s" % target
+ print "id: %s severity: %s%s\n%s\n" % (unique_name(bug, bugs),
+ bug.severity, target, bug.summary)
import os
import os.path
import cmdutil
+import errno
+
class NoBugDir(cmdutil.UserError):
def __init__(self, path):
continue
yield Bug(self.bugs_path, uuid)
-def file_property(name):
+def file_property(name, valid=None):
def getter(self):
- return self._get_value(name)
+ value = self._get_value(name)
+ if valid is not None:
+ assert value in valid
+ return value
def setter(self, value):
+ if valid is not None:
+ assert value in valid
return self._set_value(name, value)
return property(getter, setter)
name = file_property("name")
summary = file_property("summary")
+ creator = file_property("creator")
+ target = file_property("target")
+ severity = file_property("severity", valid=("wishlist", "minor", "serious",
+ "critical", "fatal"))
def _check_status(status):
assert status in ("open", "closed")
active = property(_get_active)
def _get_value(self, name):
- return file(self.get_path(name), "rb").read().rstrip("\n")
+ try:
+ return file(self.get_path(name), "rb").read().rstrip("\n")
+ except IOError, e:
+ if e.errno == errno.EEXIST:
+ return None
def _set_value(self, name, value):
+ if value is None:
+ os.unlink(self.get_path(name))
file(self.get_path(name), "wb").write("%s\n" % value)