1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
"""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 = "PythonCGISlave.py"
if not os.path.exists("PythonCGISlave.py"):
wrapper = os.path.join(sys.exec_prefix, ":Mac:Tools:CGI", wrapper)
# 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()
|