def find_blockers(self, ticket, field, blockers): remote_tktsys = RemoteTicketSystem(self.env) links = remote_tktsys.parse_links(ticket[field]) for remote_name, link in links: linked_ticket = RemoteTicket(self.env, remote_name, link) if linked_ticket['status'] != 'closed': blockers.append((remote_name, link)) else: self.find_blockers(linked_ticket, field, blockers) return blockers
def find_blockers(self, ticket, field, blockers): remote_tktsys = RemoteTicketSystem(self.env) links = remote_tktsys.parse_links(ticket[field]) for remote_name, link in links: linked_ticket = RemoteTicket(self.env, remote_name, link) if linked_ticket['status'] != 'closed': blockers.append((remote_name, link)) else: self.find_blockers(linked_ticket, field, blockers) return blockers
def validate_links_exist(self, ticket, end): remote_tktsys = RemoteTicketSystem(self.env) links = remote_tktsys.parse_links(ticket[end]) bad_links = [] for remote_name, link in links: try: tkt = RemoteTicket(self.env, remote_name, link) except ResourceNotFound: bad_links.append((remote_name, link)) if bad_links: return ("Remote tickets linked in '%s' could not be found: [%s]" % (end, ', '.join('%s:#%s' % t for t in bad_links)))
def validate_links_exist(self, ticket, end): remote_tktsys = RemoteTicketSystem(self.env) links = remote_tktsys.parse_links(ticket[end]) bad_links = [] for remote_name, link in links: try: tkt = RemoteTicket(self.env, remote_name, link) except ResourceNotFound: bad_links.append((remote_name, link)) if bad_links: return ("Remote tickets linked in '%s' could not be found: [%s]" % (end, ', '.join('%s:#%s' % t for t in bad_links)))
def find_cycle(self, ticket, field, path): tkt_ref = '%s:#%s' % (getattr(ticket, 'remote_name', ''), ticket.id) if tkt_ref in path: path.append(tkt_ref) return path path.append(tkt_ref) remote_tktsys = RemoteTicketSystem(self.env) links = remote_tktsys.parse_links(ticket[field]) for remote_name, link in links: linked_ticket = RemoteTicket(self.env, remote_name, link) cycle = self.find_cycle(linked_ticket, field, copy(path)) if cycle != None: return cycle return None
def find_cycle(self, ticket, field, path): tkt_ref = '%s:#%s' % (getattr(ticket, 'remote_name', ''), ticket.id) if tkt_ref in path: path.append(tkt_ref) return path path.append(tkt_ref) remote_tktsys = RemoteTicketSystem(self.env) links = remote_tktsys.parse_links(ticket[field]) for remote_name, link in links: linked_ticket = RemoteTicket(self.env, remote_name, link) cycle = self.find_cycle(linked_ticket, field, copy(path)) if cycle != None: return cycle return None
def _remote_tickets(self, ticket, context): link_fields = [f for f in ticket.fields if f['type'] == 'link'] rts = RemoteTicketSystem(self.env) linked_tickets = [] linked_rejects = [] for field in link_fields: for link_name, link in rts.parse_links(ticket[field['name']]): tkt_fmt = format_to_oneliner(self.env, context, '%s:#%s' % (link_name, link)) try: tkt = RemoteTicket(self.env, link_name, link) linked_tickets.append((field['label'], tkt_fmt, tkt)) except ResourceNotFound: linked_rejects.append((field['label'], tkt_fmt)) return linked_tickets, linked_rejects