rev 3563 - scripts

Pierre Habouzit madcoder at costa.debian.org
Mon Apr 17 14:12:08 UTC 2006


Author: madcoder
Date: 2006-04-17 14:12:07 +0000 (Mon, 17 Apr 2006)
New Revision: 3563

Added:
   scripts/bzlink.py
Log:
preliminary work on a Bugzilla <=> debbugs cheap linker



Added: scripts/bzlink.py
===================================================================
--- scripts/bzlink.py	2006-04-16 20:38:15 UTC (rev 3562)
+++ scripts/bzlink.py	2006-04-17 14:12:07 UTC (rev 3563)
@@ -0,0 +1,72 @@
+#! /usr/bin/env python
+
+import sys, re, os, email
+
+class InvalidBzMsg(Exception):
+    def __init__(self, reason):
+        self.args = (reason)
+
+class BzMsg:
+    _blocksRegex = re.compile(r"(^-------[^\n]*-------)\n", re.MULTILINE)
+
+    def __init__(self, fp):
+        self.msg = email.message_from_file(fp)
+        fp.close()
+
+        self.bug = -1
+        self.blocks = {}
+        self.additional = None
+
+        self._parse()
+
+    def _parse(self):
+        if 'x-bugzilla-url' not in self.msg:
+            raise InvalidBzMsg("Missing Bugzilla URL")
+
+        self.bug = self._findBugNumber()
+
+        if self.msg.is_multipart():
+            raise InvalidBzMsg("Cannot deal with multipart messages")
+
+        self._parsePayload()
+
+    def _findBugNumber(self):
+        if 'reply-to' in self.msg:
+            nb = self.msg['reply-to'].split('@')[0]
+            try:
+                return int(nb)
+            except:
+                pass
+
+        if 'subject' in self.msg:
+            m = re.compile(r"^\[Bug (\d*)\] ").match(self.msg['subject'])
+            if m:
+                return int(m.group(1))
+
+        raise InvalidBzMsg("Cannot guess bug number")
+
+    def _parsePayload(self, stripsig = True):
+        payload = self.msg.get_payload()
+
+        if stripsig:
+            where = payload.rfind("\n-- \n")
+            if where >= 0:
+                payload = payload[:where+1]
+
+        tmp = BzMsg._blocksRegex.split(payload)[1:]
+        for i in xrange(0, len(tmp) / 2):
+            self.blocks[tmp[2*i]] = tmp[2*i+1]
+
+        for k, v in self.blocks.iteritems():
+            if k == "------- You are receiving this mail because: -------":
+                self._parseBzChanges(v)
+            if k.startswith("------- Additional Comments From"):
+                self.additional = "%s\n\n%s" % (k, v)
+
+    def _parseBzChanges(self, s):
+        pass
+
+
+bzm = BzMsg(sys.stdin)
+print "Bug Number: #%i\n" % (bzm.bug)
+print bzm.additional


Property changes on: scripts/bzlink.py
___________________________________________________________________
Name: svn:executable
   + *




More information about the pkg-kde-commits mailing list