def __init__(self, bug=None, url=None, connection=None): assert len([i for i in (bug, url) if i]) == 1, "Bug needs one argument, either <bug> or <url>" assert connection, "Connection object needed" [self.__bugnumber, self.__url, self.__status, self.__importance, self.__sourcepackage, self.__summary] = [None]*6 self.__connection = connection self.__saved_hash = None if bug: if isinstance(bug, str): bug = int(bug) if isinstance(bug, int): self.__bugnumber = bug self.__url = bugnumber_to_url(self.__bugnumber) elif isinstance(bug, LPBugInfo): self.__bugnumber = int(bug) self.__url = bug.url self.__status = bug.status self.__importance = bug.importance self.__sourcepackage = bug.sourcepackage self.__summary = bug.summary self.__saved_hash = hash(bug) else: assert None, "type of bugnumber must be INT or STRING or bugnumber must be an instance of BugInfo, %s" %bug elif url: #TODO: check for valid url self.__url = valid_lp_url(url, BASEURL.BUG) assert self.__url, "Invalid launchpad url %s" %url self.__bugnumber = int(self.__url.split("/")[-1])
def _parse(): rows = xmldoc.xpathEval('//table[@class="sortable listing" and @id="latestwatches"]/tbody//tr') for row in rows: lp_url, lp_bugnr, lp_title, watch_url, watch_bugnr, watch_status, private = [None] * 7 data = row.xpathEval("td") parse_error(len(data) == 3, "BugPage.parse_html_bugtracker_bugpage.len_td=%s" %len(data), xml=row, url=debug_url) x = data[0].xpathEval("a") if x: lp_url = x[0].prop("href") lp_bugnr = int(lp_url.split("/").pop()) lp_title = x[0].content.split(":", 1)[-1].strip("\n ") x = data[1].xpathEval("a") parse_error(x, "BugPage.parse_html_bugtracker_bugpage.watch_url", xml=row, url=debug_url) watch_url = x[0].prop("href") watch_bugnr = x[0].content watch_status = data[2].content else: x = data[0].content parse_error("(Private)" in x, "BugPage.parse_html_bugtracker_bugpage.private", xml=row, url=debug_url) private = True x = x.split("#").pop() lp_bugnr = int(x.split(":").pop(0)) lp_url = bugnumber_to_url(lp_bugnr) b = BugInfoWatches( lp_url, lp_bugnr, lp_title, watch_url, watch_bugnr, watch_status, bool(private), all_tasks) yield b
def url(self): return self.__url or bugnumber_to_url(self.bugnumber)