Merge branch 'master' into python3
authorFredrik Tolf <fredrik@dolda2000.com>
Tue, 23 Apr 2013 03:56:52 +0000 (05:56 +0200)
committerFredrik Tolf <fredrik@dolda2000.com>
Tue, 23 Apr 2013 03:56:52 +0000 (05:56 +0200)
Conflicts:
wrw/__init__.py

wrw/__init__.py
wrw/util.py

index acf7f64..eb4a0a0 100644 (file)
@@ -1,7 +1,7 @@
 __all__ = ["wsgiwrap", "restart", "cookie", "formdata"]
 
 from . import proto
-from .util import wsgiwrap, stringwrap, formparams, persession, sessiondata, autodirty, manudirty, specdirty
+from .util import wsgiwrap, stringwrap, formparams, funplex, persession, sessiondata, autodirty, manudirty, specdirty
 from .dispatch import restart
 from . import cookie
 from .form import formdata
index eaa6a62..eb27683 100644 (file)
@@ -31,6 +31,27 @@ def formparams(callable):
         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):