class LaunchpadBug:
def __init__(self, text):
bug = rfc822.Message(text)
- self.duplicate_of = bug.get("duplicate-of", None)
- if self.duplicate_of == "":
+ dupestr = bug.get("duplicate-of", None)
+ if dupestr == "":
self.duplicate_of = None
+ else:
+ self.duplicate_of = int(dupestr)
self.id = int(bug["bug"])
self.tasks = {}
class RemoteLaunchpadData:
- def __init__(self, uri, id):
-
+ def __init__(self, uri, id=None):
text = urllib.urlopen(urlparse.urljoin(uri+"/", "+text"))
# Two forms of URLs supported:
if uri.split("/")[-2] == "+bug":
self.resolution = None
lp_bug = LaunchpadBug(text)
+ if id is not None and int(id) != lp_bug.id:
+ raise ParseExn(uri, "Expected id %s, got %d" % (id, lp_bug.id))
self.id = lp_bug.id
if lp_bug.duplicate_of is not None:
- raise DupeExn(uri)
+ dupe_uri = "%s/%d" % ("/".join(uri.split("/")[:-1]),
+ lp_bug.duplicate_of)
+ self.duplicate = RemoteLaunchpadData(dupe_uri)
+ else:
+ self.duplicate = None
if product is None:
if len(lp_bug.tasks) != 1: