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
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 = ""
del augment[key]
else:
val = pars[key]
+ if val is None:
+ continue
if buf != "": buf += "&"
buf += urlq(key) + "=" + urlq(str(val))
- for key in augment:
+ for key, val in augment.items():
+ if val is None:
+ continue
if buf != "": buf += "&"
- buf += urlq(key) + "=" + urlq(str(augment[key]))
+ buf += urlq(key) + "=" + urlq(str(val))
return buf
def parurl(url, pars={}, **augment):
qs = parstring(pars, **augment)
if qs != "":
- return url + "?" + qs
+ return url + ("&" if "?" in url else "?") + qs
else:
return url