def _import_trackers(self, meta, reset): types = set() components = set() priorities = set() resolutions = set() for tracker in meta["trackers"]: types.add(tracker["label"]) v = tracker["vocabulary"] for x in v.get("Category", []): components.add(x) for x in v.get("priority", []): priorities.add(x) for x in v.get("Resolution", []): resolutions.add(x) if reset: @self.env.with_transaction() def do_reset_components(db): cursor = db.cursor() cursor.execute("DELETE FROM component") cursor.execute("DELETE FROM milestone") cursor.execute("DELETE FROM enum") cursor.execute("DELETE FROM version") cursor.execute("DELETE FROM ticket") cursor.execute("DELETE FROM ticket_change") @self.env.with_transaction() def do_reset_ticket_meta(db): cursor = db.cursor() for x in sorted(components): cursor.execute("INSERT INTO component (name, owner, description) VALUES (%s, 'admin', %s)", (x, x)) for i, x in enumerate(sorted(types)): cursor.execute("INSERT INTO enum (type, name, value) VALUES ('ticket_type', %s, %s)", (x, i + 1)) for i, x in enumerate(sorted(priorities)): cursor.execute("INSERT INTO enum (type, name, value) VALUES ('priority', %s, %s)", (x, i + 1)) for i, x in enumerate(sorted(resolutions)): cursor.execute("INSERT INTO enum (type, name, value) VALUES ('resolution', %s, %s)", (x, i + 1)) for tracker in meta["trackers"]: label = tracker["label"] for a in tracker["artifacts"]: owner = a.get("assigned_to", "") if owner == "Nobody" or owner == "No Change": owner = "" ticket = Ticket(self.env) # , a['id']) ticket.populate( { "summary": a.get("summary", ""), "reporter": a.get("submitter", ""), "description": a.get("description", ""), "type": label, "priority": a.get("priority", ""), "component": a.get("Category", ""), "owner": owner, "status": a.get("status", ""), "cc": "", "keywords": "", } ) created = dateutil.parser.parse(a["date"]) ticket.insert(created) changes = a["comments"] changes.extend(a["history"]) lastcom = None for c in sorted(changes, key=lambda x: x["date"]): modified = dateutil.parser.parse(c["date"]) if c["class"] == "COMMENT": author = c.get("submitter", "") comment = c.get("comment", "") if lastcom != None and lastcom == modified: modified += datetime.timedelta(0, 10) lastcom = modified elif c["class"] == "FIELDCHANGE": author = c["by"] comment = None field = c["field"] value = c["old"] # WTF? if field == "status": ticket.status = value elif field == "Resolution": ticket.resolution = value elif field == "assigned_to": ticket.owner = value elif field == "close_date": continue ticket.save_changes(author, comment, modified) return "OK"
def _import_trackers(self, meta, reset): types = set() components = set() priorities = set() resolutions = set() for tracker in meta['trackers']: types.add(tracker['label']) v = tracker['vocabulary'] for x in v.get('Category', []): components.add(x) for x in v.get('priority', []): priorities.add(x) for x in v.get('Resolution', []): resolutions.add(x) if reset: @self.env.with_transaction() def do_reset_components(db): cursor = db.cursor() cursor.execute("DELETE FROM component") cursor.execute("DELETE FROM milestone") cursor.execute("DELETE FROM enum") cursor.execute("DELETE FROM version") cursor.execute("DELETE FROM ticket") cursor.execute("DELETE FROM ticket_change") @self.env.with_transaction() def do_reset_ticket_meta(db): cursor = db.cursor() for x in sorted(components): cursor.execute( "INSERT INTO component (name, owner, description) VALUES (%s, 'admin', %s)", (x, x)) for i, x in enumerate(sorted(types)): cursor.execute( "INSERT INTO enum (type, name, value) VALUES ('ticket_type', %s, %s)", (x, i + 1)) for i, x in enumerate(sorted(priorities)): cursor.execute( "INSERT INTO enum (type, name, value) VALUES ('priority', %s, %s)", (x, i + 1)) for i, x in enumerate(sorted(resolutions)): cursor.execute( "INSERT INTO enum (type, name, value) VALUES ('resolution', %s, %s)", (x, i + 1)) for tracker in meta['trackers']: label = tracker['label'] for a in tracker['artifacts']: owner = a.get('assigned_to', '') if owner == 'Nobody' or owner == 'No Change': owner = '' ticket = Ticket(self.env) #, a['id']) ticket.populate({ 'summary': a.get('summary', ''), 'reporter': a.get('submitter', ''), 'description': a.get('description', ''), 'type': label, 'priority': a.get('priority', ''), 'component': a.get('Category', ''), 'owner': owner, 'status': a.get('status', ''), 'cc': '', 'keywords': '', }) created = dateutil.parser.parse(a['date']) ticket.insert(created) changes = a['comments'] changes.extend(a['history']) lastcom = None for c in sorted(changes, key=lambda x: x['date']): modified = dateutil.parser.parse(c['date']) if c['class'] == 'COMMENT': author = c.get('submitter', '') comment = c.get('comment', '') if lastcom != None and lastcom == modified: modified += datetime.timedelta(0, 10) lastcom = modified elif c['class'] == 'FIELDCHANGE': author = c['by'] comment = None field = c['field'] value = c['old'] # WTF? if field == 'status': ticket.status = value elif field == 'Resolution': ticket.resolution = value elif field == 'assigned_to': ticket.owner = value elif field == 'close_date': continue ticket.save_changes(author, comment, modified) return 'OK'