Ejemplo n.º 1
0
    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"
Ejemplo n.º 2
0
    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'