-import inspect
-import req, dispatch, session, form
+import inspect, math
+import req, dispatch, session, form, resp, proto
def wsgiwrap(callable):
def wrapper(env, startreq):
return dispatch.handleenv(env, startreq, callable)
+ wrapper.__wrapped__ = callable
return wrapper
def formparams(callable):
for arg in list(args):
if arg not in spec.args:
del args[arg]
+ for i in xrange(len(spec.args) - len(spec.defaults)):
+ if spec.args[i] not in args:
+ raise resp.httperror(400, "Missing parameter", ("The query parameter `", resp.h.code(spec.args[i]), "' is required but not supplied."))
return callable(**args)
+ wrapper.__wrapped__ = callable
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):
sess[data] = data()
sess[callable] = callable(data)
return sess[callable].handle(req)
+ wrapper.__wrapped__ = callable
return wrapper
return dec
def pregen(callable):
def wrapper(*args, **kwargs):
return preiter(callable(*args, **kwargs))
+ wrapper.__wrapped__ = callable
return wrapper
class sessiondata(object):
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)