-import inspect
-import req, dispatch, session, form, resp
+import inspect, math
+import req, dispatch, session, form, resp, proto
def wsgiwrap(callable):
def wrapper(env, startreq):
return callable(**args)
return wrapper
+def funplex(*funs, **nfuns):
+ dir = {}
+ dir.update(((fun.__name__, fun) for fun in funs))
+ dir.update(nfuns)
+ def handler(req):
+ if req.pathinfo == "":
+ raise resp.redirect(req.uriname + "/")
+ if req.pathinfo[:1] != "/":
+ raise resp.notfound()
+ p = req.pathinfo[1:]
+ if p == "":
+ p = "__index__"
+ bi = 1
+ else:
+ p = p.partition("/")[0]
+ bi = len(p) + 1
+ if p in dir:
+ return dir[p](req.shift(bi))
+ raise resp.notfound()
+ return handler
+
def persession(data = None):
def dec(callable):
def wrapper(req):
ss[i] = specslot.unbound
else:
ss[i] = val
+
+def datecheck(req, mtime):
+ if "If-Modified-Since" in req.ihead:
+ rtime = proto.phttpdate(req.ihead["If-Modified-Since"])
+ if rtime >= math.floor(mtime):
+ raise resp.unmodified()
+ req.ohead["Last-Modified"] = proto.httpdate(mtime)