##################################################
# SPYCE - Python-based HTML Scripting
# Copyright (c) 2002 Rimon Barr.
#
# Refer to spyce.py
# CVS: $Id: installHelper.py 312 2002-12-02 00:56:49Z batripler $
##################################################
__doc__ = 'Spyce install helper script'
import os, imp, sys, getopt, string, re, time
CONF_BEGIN_MARK = '### BEGIN SPYCE CONFIG MARKER'
CONF_END_MARK = '### END SPYCE CONFIG MARKER'
HTTPD_LOCATIONS = [
'/etc/httpd/conf',
r'C:\Program Files\Apache Group\Apache2\conf',
r'C:\Program Files\Apache Group\Apache\conf',
'/etc',
'/']
APACHE_EXE_LOCATIONS = [
r'C:\Program Files\Apache Group\Apache2\bin',
r'C:\Program Files\Apache Group\Apache2',
r'C:\Program Files\Apache Group\Apache\bin',
r'C:\Program Files\Apache Group\Apache',
]
SYS_LOCATIONS = [
r'C:\winnt\system32',
]
def endsWith(s, suffix):
suffixLen = len(suffix)
return s[-suffixLen:] == suffix
def listDirFilter(dir, extension):
files = os.listdir(dir)
files = filter(lambda file: endsWith(file, extension), files)
return files
def compilePythonDir(dir):
print '** Compiling Python files in: %s' % dir
for file in listDirFilter(dir, '.py'):
print 'Compiling: %s' % file
try:
p = os.path.join(dir, file)
f = None
try:
f = open(p, 'r')
imp.load_source(os.path.split(file)[1][:-3], p, f)
finally:
if f: f.close()
except: pass
def compileSpyceDir(dir):
import spyceCmd
print '** Processing Spyce files in: %s' % dir
for file in listDirFilter(dir, '.spy'):
print 'Processing: %s' % file
sys.argv = ['', '-o', os.path.join(dir, file[:-4]+'.html'), os.path.join(dir, file)]
spyceCmd.spyceMain()
def findLine(array, line):
line = string.strip(line)
for i in range(len(array)):
if re.search(line, string.strip(array[i])):
return i
return None
def unconfig(s):
lines = string.split(s, '\n')
begin = findLine(lines, CONF_BEGIN_MARK)
end = findLine(lines, CONF_END_MARK)
if begin!=None and end!=None and end>begin:
del lines[begin:end+1]
s = string.join(lines, '\n')
return s
def config(s, root):
append = readFile('spyceApache.conf')
root = re.sub(r'\\', '/', root)
append = string.replace(append, 'XXX', root)
append = string.split(append, '\n')
if os.name=='nt':
row = findLine(append, 'ScriptInterpreterSource')
append[row] = string.strip(re.sub('#', '', append[row]))
lines = [s] + [CONF_BEGIN_MARK] + append + [CONF_END_MARK]
s = string.join(lines, '\n')
return s
def readFile(filename):
f = None
try:
f = open(filename, 'r')
return f.read()
finally:
if f: f.close()
def writeFileBackup(filename, new):
old = readFile(filename)
backupname = filename + '.save'
f = None
try:
f = open(backupname, 'w')
f.write(old)
finally:
if f: f.close()
f = None
try:
f = open(filename, 'w')
f.write(new)
finally:
if f: f.close()
def locateFile(file, locations):
def visit(arg, dirname, names, file=file):
path = os.path.join(dirname, file)
if os.path.exists(path):
arg.append(path)
if arg:
del names[:]
found = []
for path in locations:
os.path.walk(path, visit, found)
if found:
return found[0]
def configHTTPD(spyceroot):
print '** Searching for httpd.conf...'
file = locateFile('httpd.conf', HTTPD_LOCATIONS)
if file:
print '** Modifying httpd.conf'
s = readFile(file)
s = unconfig(s)
s = config(s, spyceroot)
writeFileBackup(file, s)
def unconfigHTTPD():
print '** Searching for httpd.conf...'
file = locateFile('httpd.conf', HTTPD_LOCATIONS)
if file:
print '** Modifying httpd.conf'
s = readFile(file)
s = unconfig(s)
writeFileBackup(file, s)
def restartApache():
print '** Searching for apache.exe...'
file = locateFile('apache.exe', APACHE_EXE_LOCATIONS)
cmd = locateFile('cmd.exe', SYS_LOCATIONS)
if file and cmd:
print '** Restarting Apache'
os.spawnl(os.P_WAIT, cmd, '/c "%s" -k restart'%file)
return
print 'Could not find apache.exe'
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], '',
['py=', 'spy=', 'apache=', 'apacheUN',
'apacheRestart']);
except getopt.error:
print "Syntax error"
return -1
for o, a in opts:
if o == "--py":
compilePythonDir(a); return 0
if o == "--spy":
compileSpyceDir(a); return 0
if o == "--apache":
configHTTPD(a); return 0
if o == "--apacheUN":
unconfigHTTPD(); return 0
if o == "--apacheRestart":
restartApache(); return 0
print "Syntax error"
return -1
if __name__=='__main__':
sys.exit(main())
|