Shawn Harrison
harrison at tbc.net
Fri Feb 4 09:45:56 EST 2005
Graham, Let's suppose I have the following four modules a.py, b.py, c.py, and util.py in a folder in sys.path, and in httpd.conf I have "PythonHandler a" for a given url space. If I make changes in a.py, b.py or c.py, these changes are immediately visible in the browser. # a.py def handler(req): import util b = util.import_('b', req) b.print_(req) return apache.OK # b.py def print_(req): import util c = util.import_('c', req) c.print_(req) # c.py def print_(req): req.write("Hello, folks.\nFine day, ain't it?\n") # util.py def import_(modname, req=None, pythonopt=None, reloadp=False): # shamelessly stolen from the Python documentation.... mod = __import__(modname) components = modname.split('.') for comp in components[1:]: mod = getattr(mod, comp) # decide whether to reload() if req: if pythonopt and req.get_options().has_key(pythonopt): opt = req.get_options()[pythonopt] if opt == 'On' or opt == 'True' or opt == '1': reloadp = True elif req.get_config().has_key('PythonDebug'): if req.get_config()['PythonDebug'] == '1': reloadp = True if reloadp == True: reload(mod) return mod If I haven't made changes, it reloads using the .pyc file that it generated on the first import. I don't see the flaws in this system, except the need to use a non-standard import syntax (but it's functional). -- ________________ harrison at tbc.net
|