#!/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()