Merge branch 'master' into python3
authorFredrik Tolf <fredrik@dolda2000.com>
Mon, 2 Sep 2013 01:26:39 +0000 (03:26 +0200)
committerFredrik Tolf <fredrik@dolda2000.com>
Mon, 2 Sep 2013 01:26:39 +0000 (03:26 +0200)
Conflicts:
wrw/resp.py
wrw/util.py

wrw/cookie.py
wrw/env.py
wrw/form.py
wrw/proto.py
wrw/req.py
wrw/resp.py
wrw/session.py
wrw/sp/cons.py
wrw/util.py

index b66e293..c6e848f 100644 (file)
@@ -23,7 +23,7 @@ class cookiedict(object):
     def __contains__(self, name):
         return name in self.bk
 
-    def get(self, name, default = None):
+    def get(self, name, default=None):
         if name not in self.bk:
             return default
         return self.bk[name].value
@@ -39,7 +39,7 @@ class cookiedict(object):
 def cookies(req):
     return req.item(cookiedict)
 
-def get(req, name, default = None):
+def get(req, name, default=None):
     return cookies(req).get(name, default)
 
 def add(req, name, value, **kw):
index 56d040d..ed313a3 100644 (file)
@@ -10,7 +10,7 @@ class stack(object):
 
 class environment(object):
     __slots__ = ["parent", "map"]
-    def __init__(self, parent = None):
+    def __init__(self, parent=None):
         self.parent = parent
         self.map = weakref.WeakKeyDictionary()
 
@@ -74,7 +74,7 @@ class binding(object):
 
 class var(object):
     __slots__ = ["__weakref__"]
-    def __init__(self, default = None):
+    def __init__(self, default=None):
         if default is not None:
             root.map[self] = default
 
index 98d2ed9..c97b0f9 100644 (file)
@@ -13,7 +13,7 @@ class formwrap(object):
     def __getitem__(self, key):
         return self.cf[key][0]
 
-    def get(self, key, default = ""):
+    def get(self, key, default=""):
         if key in self:
             return self.cf[key][0]
         return default
@@ -78,7 +78,7 @@ class formpart(object):
                     raise badmultipart("Missing last multipart boundary")
                 self.form.buf += ret
 
-    def read(self, limit = -1):
+    def read(self, limit=-1):
         self.fillbuf(limit)
         if limit >= 0:
             ret = self.buf[:limit]
@@ -88,7 +88,7 @@ class formpart(object):
             self.buf = ""
         return ret
 
-    def readline(self, limit = -1):
+    def readline(self, limit=-1):
         last = 0
         while True:
             p = self.buf.find(b'\n', last)
index 0a6a430..96a8878 100644 (file)
@@ -104,8 +104,9 @@ def simpleerror(env, startreq, code, title, msg):
 
 def urlq(url):
     ret = ""
+    invalid = "&=#?/\"'"
     for c in url:
-        if c == "&" or c == "=" or c == "#" or c == "?" or c == "/" or (ord(c) <= 32):
+        if c in invalid or (ord(c) <= 32):
             ret += "%%%02X" % ord(c)
         else:
             ret += c
index 11f856c..016d2d8 100644 (file)
@@ -21,7 +21,7 @@ class headdict(object):
     def __iter__(self):
         return iter((list[0] for list in self.dict.values()))
     
-    def get(self, key, default = ""):
+    def get(self, key, default=""):
         if key.lower() in self.dict:
             return self.dict[key.lower()][1]
         return default
index ebd98ec..965df6c 100644 (file)
@@ -42,10 +42,10 @@ class message(dispatch.restart):
         self.detail = detail
 
     def handle(self, req):
-        return skelfor(req).error(req, self.message, *self.detail)
+        return skelfor(req).message(req, self.message, *self.detail)
 
 class httperror(usererror):
-    def __init__(self, status, message = None, detail = None):
+    def __init__(self, status, message=None, detail=None):
         if message is None:
             message = proto.statusinfo[status][0]
         if detail is None:
@@ -62,14 +62,20 @@ class notfound(httperror):
         return super().__init__(404)
 
 class redirect(dispatch.restart):
-    def __init__(self, url, status = 303):
+    bases = {"url": proto.requrl,
+             "script": proto.scripturl,
+             "site": proto.siteurl}
+
+    def __init__(self, url, status=303, base="url"):
         super().__init__()
         self.url = url
         self.status = status
+        self.bases[base]
+        self.base = base
 
     def handle(self, req):
         req.status(self.status, "Redirect")
-        req.ohead["Location"] = proto.appendurl(proto.requrl(req), self.url)
+        req.ohead["Location"] = proto.appendurl(self.bases[self.base](req), self.url)
         req.ohead["Content-Length"] = 0
         return []
 
index 0a17c6d..e7d8581 100644 (file)
@@ -16,7 +16,7 @@ def gennonce(length):
     return nonce
 
 class session(object):
-    def __init__(self, lock, expire = 86400 * 7):
+    def __init__(self, lock, expire=86400 * 7):
         self.id = hexencode(gennonce(16))
         self.dict = {}
         self.lock = lock
@@ -39,7 +39,7 @@ class session(object):
     def __getitem__(self, key):
         return self.dict[key]
 
-    def get(self, key, default = None):
+    def get(self, key, default=None):
         return self.dict.get(key, default)
 
     def __setitem__(self, key, value):
@@ -74,7 +74,7 @@ class session(object):
         return "<session %s>" % self.id
 
 class db(object):
-    def __init__(self, backdb = None, cookiename = "wrwsess", path = "/"):
+    def __init__(self, backdb=None, cookiename="wrwsess", path="/"):
         self.live = {}
         self.cookiename = cookiename
         self.path = path
@@ -235,7 +235,7 @@ class dirback(object):
         with open(os.path.join(self.path, key), "w") as out:
             out.write(value)
 
-default = env.var(db(backdb = dirback(os.path.join("/tmp", "wrwsess-" + str(os.getuid())))))
+default = env.var(db(backdb=dirback(os.path.join("/tmp", "wrwsess-" + str(os.getuid())))))
 
 def get(req):
     return default.val.get(req)
index 74a6ea6..c4d9999 100644 (file)
@@ -62,7 +62,7 @@ class context(object):
         node.attrs[str(k)] = str(v)
 
 class constructor(object):
-    def __init__(self, ns, elcls = element, ctx=None):
+    def __init__(self, ns, elcls=element, ctx=None):
         self._ns = ns
         self._elcls = elcls
         if ctx is None: ctx = context()
index ed32cc6..79a8240 100644 (file)
@@ -17,16 +17,16 @@ def stringwrap(charset):
     return dec
 
 def formparams(callable):
+    spec = inspect.getargspec(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]
-        for i in range(len(spec.args) - len(spec.defaults)):
+        for i in range(len(spec.args) - (len(spec.defaults) if spec.defaults else 0)):
             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)
@@ -71,7 +71,7 @@ class funplex(object):
             return fun
         return dec
 
-def persession(data = None):
+def persession(data=None):
     def dec(callable):
         def wrapper(req):
             sess = session.get(req)
@@ -121,7 +121,7 @@ def pregen(callable):
 
 class sessiondata(object):
     @classmethod
-    def get(cls, req, create = True):
+    def get(cls, req, create=True):
         sess = cls.sessdb().get(req)
         with sess.lock:
             try: