- new version of PythonCGISlave
- new script/applet BuildCGIApplet
This largely supercedes :Mac:Demos:cgi, except for the html doc file. Should it move here? Merged with CGI_README.txt?
Todo: fullbuild support.
(jvr)
diff --git a/Mac/Tools/CGI/BuildCGIApplet.py b/Mac/Tools/CGI/BuildCGIApplet.py
new file mode 100644
index 0000000..29783c2
--- /dev/null
+++ b/Mac/Tools/CGI/BuildCGIApplet.py
@@ -0,0 +1,74 @@
+"""BuildCGIApplet.py -- Create a CGI applet from a Python script.
+
+Specilized version of BuildApplet, enabling Python CGI scripts to be
+used under Mac web servers like WebStar. The __main__ program is
+PythonCGISlave.py, which provides a compatibility layer, emulating
+Unix-style CGI scripts. See CGI_README.txt for details.
+"""
+
+import sys
+import os
+import macfs
+import MacOS
+import Res
+import EasyDialogs
+import buildtools
+import py_resource
+
+
+def main():
+	try:
+		buildcgiapplet()
+	except buildtools.BuildError, detail:
+		EasyDialogs.Message(detail)
+
+
+def buildcgiapplet():
+	buildtools.DEBUG=1
+	
+	# Find the template
+	# (there's no point in proceeding if we can't find it)
+	
+	template = buildtools.findtemplate()
+	wrapper = os.path.join(sys.exec_prefix, ":Mac:Tools:CGI:PythonCGISlave.py")
+	
+	# Ask for source text if not specified in sys.argv[1:]
+	if not sys.argv[1:]:
+		srcfss, ok = macfs.PromptGetFile('Select a CGI script:', 'TEXT', 'APPL')
+		if not ok:
+			return
+		filename = srcfss.as_pathname()
+		dstfilename = mkcgifilename(filename)
+		dstfss, ok = macfs.StandardPutFile('Save application as:', 
+				os.path.basename(dstfilename))
+		if not ok:
+			return
+		dstfilename = dstfss.as_pathname()
+		buildone(template, wrapper, filename, dstfilename)
+	else:
+		# Loop over all files to be processed
+		for filename in sys.argv[1:]:
+			dstfilename = mkcgifilename(filename)
+			buildone(template, wrapper, filename, dstfilename)
+
+
+def mkcgifilename(filename):
+	if filename[-3:] == '.py':
+		filename = filename[:-3]
+	filename = filename + ".cgi"
+	return filename
+
+
+def buildone(template, wrapper, src, dst):
+	buildtools.process(template, wrapper, dst, 1)
+	# write source as a PYC resource into dst
+	ref = Res.OpenResFile(dst)
+	try:
+		Res.UseResFile(ref)
+		py_resource.frompyfile(src, "CGI_MAIN", preload=1)
+	finally:
+		Res.CloseResFile(ref)
+
+
+if __name__ == '__main__':
+	main()