/misc/updates-rss.cgi

#!/usr/bin/env python
"""
Convert /misc/updates to RSS 1.0
License: GPL 2; share and enjoy!
Author: Sean B. Palmer, inamidst.com
Requires: /usr/bin/xsltproc
"""

import cgitb; cgitb.enable()
import os, urllib, tempfile
from cgiutil import serve

def mktemp(text=None, pfx=None, sfx=None): 
   if pfx is None: pfx = 'updates-rss'
   if sfx is None: sfx = '.tmp'

   fd, fn = tempfile.mkstemp(prefix=pfx, suffix=sfx)
   if text: 
      f = os.fdopen(fd, 'w')
      f.write(text)
      f.close()
   return fn

def shell(script, scriptname): 
   def command(args): 
      status = os.spawnv(os.P_WAIT, script, [scriptname] + args)
      if status != 0: 
         msg = "%s %s returned %s status"
         raise Exception, msg % (script, args, abs(status))
      return
   return command

xsltproc = shell('/usr/bin/xsltproc', 'xsltproc')

def xslt(xsltfn, xmlfn, outfn): 
   args = ['--novalid', '-o', outfn, xsltfn, xmlfn]
   xsltproc(args)

def getXSLT(xsltfn, xmlfn): 
   outfn = mktemp(pfx='updates-rss', sfx='.rss')
   xslt(xsltfn, xmlfn, outfn)
   f = open(outfn, 'r')
   s = f.read()
   f.close()
   os.unlink(outfn)
   return s

def main(): 
   xsltfn = 'updates2rss.xsl'
   xmlfn, info = urllib.urlretrieve('http://inamidst.com/updates')
   result = getXSLT(xsltfn, xmlfn)
   os.unlink(xmlfn)
   serve(200, result, mime='text/xml')

if __name__=="__main__": 
   main()