| 950 | |
| 951 | @public |
| 952 | def changequery(query=None, _path=None, **kw): |
| 953 | if query is None: |
| 954 | query = web.input(_method="get", _unicode=False) |
| 955 | for k, v in kw.items(): |
| 956 | if v is None: |
| 957 | query.pop(k, None) |
| 958 | else: |
| 959 | query[k] = v |
| 960 | |
| 961 | query = {k: [web.safestr(s) for s in v] if isinstance(v, list) else web.safestr(v) for k, v in query.items()} |
| 962 | out = _path or web.ctx.get("readable_path", web.ctx.path) |
| 963 | if query: |
| 964 | out += "?" + urllib.parse.urlencode(query, doseq=True) |
| 965 | return out |
| 966 | |
| 967 | |
| 968 | # Hack to limit recent changes offset. |