blob: 0ee2ce0008050e8d8fbe3c61a5a40450d51a5c30 [file] [log] [blame]
Just van Rossum40117232000-03-28 12:05:13 +00001"""BuildCGIApplet.py -- Create a CGI applet from a Python script.
2
3Specilized version of BuildApplet, enabling Python CGI scripts to be
4used under Mac web servers like WebStar. The __main__ program is
5PythonCGISlave.py, which provides a compatibility layer, emulating
6Unix-style CGI scripts. See CGI_README.txt for details.
7"""
8
9import sys
10import os
11import macfs
12import MacOS
Jack Jansen5a6fdcd2001-08-25 12:15:04 +000013from Carbon import Res
Just van Rossum40117232000-03-28 12:05:13 +000014import EasyDialogs
15import buildtools
16import py_resource
17
18
19def main():
20 try:
21 buildcgiapplet()
22 except buildtools.BuildError, detail:
23 EasyDialogs.Message(detail)
24
25
26def buildcgiapplet():
27 buildtools.DEBUG=1
28
29 # Find the template
30 # (there's no point in proceeding if we can't find it)
31
32 template = buildtools.findtemplate()
Just van Rossumc88093a2000-03-28 14:53:32 +000033 wrapper = "PythonCGISlave.py"
34 if not os.path.exists("PythonCGISlave.py"):
35 wrapper = os.path.join(sys.exec_prefix, ":Mac:Tools:CGI", wrapper)
Just van Rossum40117232000-03-28 12:05:13 +000036
37 # Ask for source text if not specified in sys.argv[1:]
38 if not sys.argv[1:]:
39 srcfss, ok = macfs.PromptGetFile('Select a CGI script:', 'TEXT', 'APPL')
40 if not ok:
41 return
42 filename = srcfss.as_pathname()
43 dstfilename = mkcgifilename(filename)
44 dstfss, ok = macfs.StandardPutFile('Save application as:',
45 os.path.basename(dstfilename))
46 if not ok:
47 return
48 dstfilename = dstfss.as_pathname()
49 buildone(template, wrapper, filename, dstfilename)
50 else:
51 # Loop over all files to be processed
52 for filename in sys.argv[1:]:
53 dstfilename = mkcgifilename(filename)
54 buildone(template, wrapper, filename, dstfilename)
55
56
57def mkcgifilename(filename):
58 if filename[-3:] == '.py':
59 filename = filename[:-3]
60 filename = filename + ".cgi"
61 return filename
62
63
64def buildone(template, wrapper, src, dst):
65 buildtools.process(template, wrapper, dst, 1)
66 # write source as a PYC resource into dst
Just van Rossumc72d4cd2001-09-24 17:29:09 +000067 ref = Res.FSpOpenResFile(dst, 2)
Just van Rossum40117232000-03-28 12:05:13 +000068 try:
69 Res.UseResFile(ref)
70 py_resource.frompyfile(src, "CGI_MAIN", preload=1)
71 finally:
72 Res.CloseResFile(ref)
73
74
75if __name__ == '__main__':
76 main()