functions, you may want to use the getmod() function in this module.
"""
-import os, threading, types, importlib
+import os, threading, types, importlib, getopt
from . import wsgiutil
__all__ = ["application", "wmain", "getmod", "cachedmod", "chain"]
if path in modcache:
entry = modcache[path]
else:
- entry = cachedmod()
+ entry = [threading.Lock(), None]
modcache[path] = entry
- with entry.lock:
- if entry.mod is None or sb.st_mtime > entry.mtime:
+ with entry[0]:
+ if entry[1] is None or sb.st_mtime > entry[1].mtime:
with open(path, "rb") as f:
text = f.read()
code = compile(text, path, "exec")
mod = types.ModuleType(mangle(path))
mod.__file__ = path
exec(code, mod.__dict__)
- entry.mod = mod
- entry.mtime = sb.st_mtime
- return entry
+ entry[1] = cachedmod(mod, sb.st_mtime)
+ return entry[1]
class handler(object):
def __init__(self):
Returns the `application' function. If any arguments are given,
they are parsed according to the module documentation.
"""
- ret = handler()
- for arg in argv:
+ hnd = handler()
+ ret = hnd.handle
+
+ opts, args = getopt.getopt(argv, "-V")
+ for o, a in opts:
+ if o == "-V":
+ import wsgiref.validate
+ ret = wsgiref.validate.validator(ret)
+
+ for arg in args:
if arg[0] == '.':
p = arg.index('=')
- ret.addext(arg[1:p], arg[p + 1:])
- return ret.handle
+ hnd.addext(arg[1:p], arg[p + 1:])
+ return ret
def chain(env, startreq):
"""Chain-loading WSGI handler