# -*- coding: utf-8 -*- # Copyright (c) 2003-2006 Detlev Offenbach # # This is a script to patch Mod_python for eric3. """ Script to patch mod_python for usage with the eric3 IDE. """ import sys import os import shutil import py_compile import distutils.sysconfig # Define the globals. progName = None modDir = None def usage(rcode = 2): """ Display a usage message and exit. rcode is the return code passed back to the calling process. """ global progName, modDir print "Usage:" print " %s [-h] [-d dir]" % (progName) print "where:" print " -h display this help message" print " -d dir where Mod_python files are installed [default %s]" % (modDir) print print "This script patches the file apache.py of the Mod_python distribution" print "so that it will work with the eric3 debugger instead of pdb." print "Please see mod_python.html for more details." print sys.exit(rcode) def initGlobals(): """ Sets the values of globals that need more than a simple assignment. """ global modDir modDir = os.path.join(distutils.sysconfig.get_python_lib(), "mod_python") def main(argv): """The main function of the script. argv is the list of command line arguments. """ import getopt # Parse the command line. global progName, modDir progName = os.path.basename(argv[0]) initGlobals() try: optlist, args = getopt.getopt(argv[1:],"hd:") except getopt.GetoptError: usage() for opt, arg in optlist: if opt == "-h": usage(0) elif opt == "-d": global modDir modDir = arg try: f = open(os.path.join(modDir, "apache.py"), "r") except: print "The file %s does not exist. Aborting." sys.exit(1) lines = f.readlines() f.close() pdbFound = 0 ericFound = 0 sn = "apache.py" s = open(sn, "w") for line in lines: if not pdbFound and line.startswith("import pdb"): s.write("import eric3.DebugClients.Python.eric3dbgstub as pdb\n") pdbFound = 1 else: s.write(line) if line.startswith("import eric3"): ericFound = 1 if not ericFound: s.write("\n") s.write('def initDebugger(name):\n') s.write(' """\n') s.write(' Initialize the debugger and set the script name to be reported \n') s.write(' by the debugger. This is a patch for eric3.\n') s.write(' """\n') s.write(' if not pdb.initDebugger("noqt"):\n') s.write(' raise ImportError("Could not initialize debugger")\n') s.write(' pdb.setScriptname(name)\n') s.write("\n") s.close() if ericFound: print "Mod_python is already patched for eric3." os.remove(sn) else: try: py_compile.compile(sn) except py_compile.PyCompileError, e: print "Error compiling %s. Aborting" % sn print e os.remove(sn) sys.exit(1) shutil.copy(os.path.join(modDir, "apache.py"), os.path.join(modDir, "apache.py.orig")) shutil.copy(sn, modDir) os.remove(sn) if os.path.exists("%sc" % sn): shutil.copy("%sc" % sn, modDir) os.remove("%sc" % sn) if os.path.exists("%so" % sn): shutil.copy("%so" % sn, modDir) os.remove("%so" % sn) print "Mod_python patched successfully." print "Unpatched file copied to %s." % os.path.join(modDir, "apache.py.orig") if __name__ == "__main__": try: main(sys.argv) except SystemExit: raise except: print \ """An internal error occured. Please report all the output of the program, including the following traceback, to eric-bugs@die-offenbachs.de. """ raise