SVN: toys/stbr/src-builder-status.py
beorn
beorn at pld-linux.org
Sun Dec 7 00:05:12 CET 2008
Author: beorn
Date: Sun Dec 7 00:05:12 2008
New Revision: 10025
Modified:
toys/stbr/src-builder-status.py
Log:
- Complete rewrite in a more "python-way" spirit
- Builder address checked only in headers, not entire
message
Modified: toys/stbr/src-builder-status.py
==============================================================================
--- toys/stbr/src-builder-status.py (original)
+++ toys/stbr/src-builder-status.py Sun Dec 7 00:05:12 2008
@@ -1,44 +1,99 @@
#!/usr/bin/python
+#-*- coding: utf8 -*-
+#
+# This script uses stbr mailbox to fetch the build status of a SPEC file.
+# It is used by the PLD Neatty Web Builder Monitor And Such to display
+# the current state of the package. Hopefully.
+#
+# TODO:
+# - DEBUG mode fired from the commandline (getopt?)
+# - Status determined from the message sent date, not from the position
+# in a mailbox file
+# - Python 2.6 detection and proper message parsing in case of that
+# version (see BIG FAT WARNING below)
+#
+# !!! BIG FAT WARNING !!!
+# The mailbox module has changed in Python 2.6, so this code will stop
+# working FOR SURE. If the Python interpreter on this machine has been
+# upgraded, this script stopped working and you see this big fat warning,
+# then nobody (me?) cared to clean some very important point on the TODO
+# list above. Please send a few grave words to me at beorn at alpha.pl and
+# revert script to the 10018 SVN release.
+# !!! BIG FAT WARNING !!!
+#
+# $Id:$
+import email
+import email.Errors
+import mailbox
import os
import sys
-import re
-import readline
-mailbox = "/var/mail/stbr"
-#f_log = "/home/users/stbr/ApHeX/scripts/"
-f_log = "./"
-
-lines = []
-builder_l = []
-status_l = []
-
-def parseMailbox():
- try:
- pld = sys.argv[1]
- spec = sys.argv[2]
- except(IndexError):
- print "Usage: %s th|ti spec" % sys.argv[0]
- return
- srcbuilder = pld + "-src"
- f = open(mailbox, 'r')
- read = f.xreadlines()
- for l in read:
- l = l.strip()
- lines.append(l)
- i = 0
- while(i < len(lines)):
- if re.match("^From:", lines[i]):
- Rbuilder = lines[i].split(" ")
- if re.match(srcbuilder, Rbuilder[2]):
- builder_l.append(Rbuilder[2])
- i = i + 9
- if re.match(spec, lines[i]):
- status = lines[i].split(" ")
- status_l.append(status[2])
- i = i + 1
- for i in range(len(status_l)):
- if re.match(srcbuilder, builder_l[i]):
- print status_l[i]
-parseMailbox()
+MAILBOX = '/var/mail/stbr'
+ALLOWED_DISTVER = ('th', 'ti')
+ALLOWED_STATUS = ('OK', 'FAILED')
+DEBUG = False # Change this to True in case of disaster to see what is going on
+
+
+
+def email_reader_factory(fh):
+ try:
+ return email.message_from_file(fh)
+ except email.Errors.MessageParseError:
+ return ''
+
+
+try:
+ (distver, spec) = sys.argv[1:3]
+ distver = distver.lower()
+ if distver not in ALLOWED_DISTVER:
+ raise Exception()
+except:
+ sys.stderr.write('Usage: %s { %s } <spec>\n' % (os.path.basename(__file__), ' | '.join(ALLOWED_DISTVER)))
+ sys.exit(1)
+
+#result = 'UNKNOWN'
+result = None
+
+try:
+ fh = open(MAILBOX, 'rb')
+ mbox = mailbox.UnixMailbox(fh, email_reader_factory)
+ for message in mbox:
+ if not message:
+ continue
+ elif DEBUG:
+ sys.stderr.write('DEBUG: processing message %s\n' % (message['Message-ID'],))
+
+ if not message['From'].endswith('builder-%s-src at pld-linux.org>' % (distver,)):
+ continue
+
+ for line in message.get_payload().split('\n'):
+ if line.startswith(spec):
+ try:
+ (junk, branch, status) = line.split(' ', 2)
+ except:
+ if DEBUG:
+ sys.stderr.write('DEBUG:\tDismantle error at line "%s"\n' % (line,))
+ continue
+ if status not in ALLOWED_STATUS:
+ continue
+ else:
+ result = status
+ break
+ fh.close()
+except Exception, e:
+ if DEBUG:
+ raise
+ try:
+ fh.close()
+ except:
+ pass
+ sys.stdout.write('Script Error\n')
+ sys.exit(2)
+
+if result:
+ sys.stdout.write('%s\n' % (result,))
+
+# vim: sts=4 noai nocp indentexpr=
+
More information about the pld-cvs-commit
mailing list