/proj/unrddl/index.cgi
#!/usr/bin/env python
"""
UnRDDL - Convert RDDL Documents to HTML
Author: Sean B. Palmer, inamidst.com
License: GPL 2; share and enjoy!
Requires: /usr/bin/xsltproc
"""
import cgitb; cgitb.enable()
import sys, os, cgi, urllib, tempfile
sys.path.append('../../misc')
from cgiutil import serve
form = cgi.FieldStorage()
form.__call__ = lambda s: form[s].value
def mktemp(text=None, pfx=None, sfx=None):
if pfx is None: pfx = 'unrddled'
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 % (scriptname, 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='unrddled', sfx='.html')
xslt(xsltfn, xmlfn, outfn)
f = open(outfn, 'r')
s = f.read()
f.close()
os.unlink(outfn)
return s
XHTMLStrict = """
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >
""".strip()
def main():
xsltfn = 'v2.xsl'
if form.has_key('uri'):
uri = form('uri')
xmlfn, info = urllib.urlretrieve(uri)
result = getXSLT(xsltfn, xmlfn)
os.unlink(xmlfn)
result = result.replace(' xmlns:rddl="http://www.rddl.org/"', '', 1)
result = XHTMLStrict + '\n\n' + result
serve(200, result, mime='text/html')
else: serve(200, __doc__.lstrip(), mime='text/plain')
if __name__=="__main__":
main()