#!/usr/bin/env python
##################################################
# SPYCE - Python-based HTML Scripting
# Copyright (c) 2002 Rimon Barr.
#
# Refer to spyce.py
##################################################
import os, sys
import spyceCmd, spyce, spyceUtil
import fcgi
__doc__ = '''(F)CGI-based Spyce entry point.'''
def findScriptFile(path):
origpath = path
while path and not path=='/':
if os.path.isfile(path):
return path
path = os.path.dirname(path)
return origpath
def doSpyce( (stdin, stdout, stderr, environ) ):
if spyce.getServer().config.cgi_allow_only_redirect:
sys.argv = [ sys.argv[0] ]
if environ.get('REDIRECT_STATUS', '') != '200':
stdout.write("Content-type: text/plain\n\nForbidden")
return -1
path = None
if len(sys.argv)<=1 or not os.path.isfile(sys.argv[1]):
try: path = findScriptFile(environ['PATH_TRANSLATED'])
except: pass
result = spyceCmd.spyceMain(cgimode=1, cgiscript=path,
stdout=stdout, stdin=stdin, stderr=stderr, environ=environ)
return result
def main():
cgi = fcgi.FCGI()
if cgi.socket: os.environ[spyce.SPYCE_ENTRY] = 'fcgi'
else: os.environ[spyce.SPYCE_ENTRY] = 'cgi'
while True:
more = cgi.accept()
if spyce.getServer().config.check_modules_and_restart:
L = spyceUtil.scan_modules()
if L:
os._exit(3)
if not more:
break
doSpyce(more)
cgi.finish()
if __name__=='__main__':
if sys.platform == "win32":
import os, msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
main()
|