blob: 29783c2e48aed8ecc97f68be6edcda4cb2b992ca [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
13import Res
14import 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()
33 wrapper = os.path.join(sys.exec_prefix, ":Mac:Tools:CGI:PythonCGISlave.py")
34
35 # Ask for source text if not specified in sys.argv[1:]
36 if not sys.argv[1:]:
37 srcfss, ok = macfs.PromptGetFile('Select a CGI script:', 'TEXT', 'APPL')
38 if not ok:
39 return
40 filename = srcfss.as_pathname()
41 dstfilename = mkcgifilename(filename)
42 dstfss, ok = macfs.StandardPutFile('Save application as:',
43 os.path.basename(dstfilename))
44 if not ok:
45 return
46 dstfilename = dstfss.as_pathname()
47 buildone(template, wrapper, filename, dstfilename)
48 else:
49 # Loop over all files to be processed
50 for filename in sys.argv[1:]:
51 dstfilename = mkcgifilename(filename)
52 buildone(template, wrapper, filename, dstfilename)
53
54
55def mkcgifilename(filename):
56 if filename[-3:] == '.py':
57 filename = filename[:-3]
58 filename = filename + ".cgi"
59 return filename
60
61
62def buildone(template, wrapper, src, dst):
63 buildtools.process(template, wrapper, dst, 1)
64 # write source as a PYC resource into dst
65 ref = Res.OpenResFile(dst)
66 try:
67 Res.UseResFile(ref)
68 py_resource.frompyfile(src, "CGI_MAIN", preload=1)
69 finally:
70 Res.CloseResFile(ref)
71
72
73if __name__ == '__main__':
74 main()