Added a mod_python-style form-data application decorator.
authorFredrik Tolf <fredrik@dolda2000.com>
Fri, 30 Dec 2011 01:33:09 +0000 (02:33 +0100)
committerFredrik Tolf <fredrik@dolda2000.com>
Fri, 30 Dec 2011 01:33:09 +0000 (02:33 +0100)
wrw/__init__.py
wrw/util.py

index 30936b6..c0b8273 100644 (file)
@@ -1,6 +1,6 @@
 __all__ = ["wsgiwrap", "restart", "cookie", "formdata"]
 
 __all__ = ["wsgiwrap", "restart", "cookie", "formdata"]
 
-from util import wsgiwrap, persession, sessiondata
+from util import wsgiwrap, formparams, persession, sessiondata, autodirty, manudirty
 from dispatch import restart
 import cookie
 from form import formdata
 from dispatch import restart
 import cookie
 from form import formdata
index 86a7eab..7a29ea8 100644 (file)
@@ -1,10 +1,24 @@
-import req, dispatch, session
+import inspect
+import req, dispatch, session, form
 
 def wsgiwrap(callable):
     def wrapper(env, startreq):
         return dispatch.handle(req.origrequest(env), startreq, callable)
     return wrapper
 
 
 def wsgiwrap(callable):
     def wrapper(env, startreq):
         return dispatch.handle(req.origrequest(env), startreq, callable)
     return wrapper
 
+def formparams(callable):
+    def wrapper(req):
+        data = form.formdata(req)
+        spec = inspect.getargspec(callable)
+        args = dict(data.items())
+        args["req"] = req
+        if not spec.keywords:
+            for arg in list(args):
+                if arg not in spec.args:
+                    del args[arg]
+        return callable(**args)
+    return wrapper
+
 def persession(data = None):
     def dec(callable):
         def wrapper(req):
 def persession(data = None):
     def dec(callable):
         def wrapper(req):