Added option to strip querystring from requrl.
[wrw.git] / wrw / proto.py
index 58bd626..80e2419 100644 (file)
@@ -106,7 +106,7 @@ def urlq(url):
     if isinstance(url, str):
         url = url.encode("utf-8")
     ret = ""
-    invalid = b"&=#?/\"'"
+    invalid = b"%;&=#?/\"'"
     for c in url:
         if c in invalid or (c <= 32) or (c >= 128):
             ret += "%%%02X" % c
@@ -168,11 +168,16 @@ def scripturl(req):
         raise Exception("Malformed local part when reconstructing URL")
     return siteurl(req) + req.uriname[1:]
 
-def requrl(req):
+def requrl(req, qs=True):
     s = siteurl(req)
     if req.uri[0] != '/':
         raise Exception("Malformed local part when reconstructing URL")
-    return siteurl(req) + req.uri[1:]
+    pf = req.uri[1:]
+    if not qs:
+        p = pf.find('?')
+        if not p < 0:
+            pf = pf[:p]
+    return siteurl(req) + pf
 
 def parstring(pars={}, **augment):
     buf = ""
@@ -192,7 +197,7 @@ def parstring(pars={}, **augment):
 def parurl(url, pars={}, **augment):
     qs = parstring(pars, **augment)
     if qs != "":
-        return url + "?" + qs
+        return url + ("&" if "?" in url else "?") + qs
     else:
         return url