async def search(req: Request): context = {"request": req} context["user"] = req.session.get("user") resp = api.list_resources(req.query_params) # If json-req if req.query_params.get("fmt", "") == "json": return JSONResponse(resp) # If SAM-req. It only wants json-encoded id-lists if "ids" in req.query_params.getlist("view"): return JSONResponse(resp) # If errors, show error-page if resp.get("errors"): context["errors"] = resp.get("errors") return render("error.html", context) # enables (and resets) traversal if resp.get("size") > 1 and resp.get("result"): ses = req.session params = MultiDict(req.query_params) params.pop("start", None) cur_search = QueryParams(params).__str__() if ses.get("traverse") and cur_search == ses["traverse"].get( "cur_search"): pass else: ses["traverse"] = {} ses["traverse"]["total"] = resp.get("total") ses["traverse"]["size"] = resp.get("size") ses["traverse"]["cur_search"] = cur_search ses["traverse"]["batches"] = {} start = str(resp.get("start", 0)) ses["traverse"]["start"] = int(start) if start not in ses["traverse"]["batches"]: ses["traverse"]["batches"][start] = [ int(d.get("id")) for d in resp.get("result") ] ses["traverse"]["cur_ids"] = ses["traverse"]["batches"].get(start) context.update(resp) return render("search.html", context)
def camelcase_parameters_dependency(request: Request) -> None: query_params = request.query_params new_params = MultiDict() for k, v in query_params.multi_items(): if "_" in k: camel = snake2camel(k, start_lower=True) new_params.append(camel, v) else: new_params.append(k, v) request._query_params = new_params
def test_multidict(): q = MultiDict([("a", "123"), ("a", "456"), ("b", "789")]) assert "a" in q assert "A" not in q assert "c" not in q assert q["a"] == "456" assert q.get("a") == "456" assert q.get("nope", default=None) is None assert q.getlist("a") == ["123", "456"] assert list(q.keys()) == ["a", "b"] assert list(q.values()) == ["456", "789"] assert list(q.items()) == [("a", "456"), ("b", "789")] assert len(q) == 2 assert list(q) == ["a", "b"] assert dict(q) == {"a": "456", "b": "789"} assert str(q) == "MultiDict([('a', '123'), ('a', '456'), ('b', '789')])" assert repr(q) == "MultiDict([('a', '123'), ('a', '456'), ('b', '789')])" assert MultiDict({ "a": "123", "b": "456" }) == MultiDict([("a", "123"), ("b", "456")]) assert MultiDict({ "a": "123", "b": "456" }) == MultiDict([("a", "123"), ("b", "456")]) assert MultiDict({ "a": "123", "b": "456" }) == MultiDict({ "b": "456", "a": "123" }) assert MultiDict() == MultiDict({}) assert MultiDict({"a": "123", "b": "456"}) != "invalid" q = MultiDict([("a", "123"), ("a", "456")]) assert MultiDict(q) == q q = MultiDict([("a", "123"), ("a", "456")]) q["a"] = "789" assert q["a"] == "789" assert q.getlist("a") == ["789"] q = MultiDict([("a", "123"), ("a", "456")]) del q["a"] assert q.get("a") is None assert repr(q) == "MultiDict([])" q = MultiDict([("a", "123"), ("a", "456"), ("b", "789")]) assert q.pop("a") == "456" assert q.get("a", None) is None assert repr(q) == "MultiDict([('b', '789')])" q = MultiDict([("a", "123"), ("a", "456"), ("b", "789")]) item = q.popitem() assert q.get(item[0]) is None q = MultiDict([("a", "123"), ("a", "456"), ("b", "789")]) assert q.poplist("a") == ["123", "456"] assert q.get("a") is None assert repr(q) == "MultiDict([('b', '789')])" q = MultiDict([("a", "123"), ("a", "456"), ("b", "789")]) q.clear() assert q.get("a") is None assert repr(q) == "MultiDict([])" q = MultiDict([("a", "123")]) q.setlist("a", ["456", "789"]) assert q.getlist("a") == ["456", "789"] q.setlist("b", []) assert "b" not in q q = MultiDict([("a", "123")]) assert q.setdefault("a", "456") == "123" assert q.getlist("a") == ["123"] assert q.setdefault("b", "456") == "456" assert q.getlist("b") == ["456"] assert repr(q) == "MultiDict([('a', '123'), ('b', '456')])" q = MultiDict([("a", "123")]) q.append("a", "456") assert q.getlist("a") == ["123", "456"] assert repr(q) == "MultiDict([('a', '123'), ('a', '456')])" q = MultiDict([("a", "123"), ("b", "456")]) q.update({"a": "789"}) assert q.getlist("a") == ["789"] q == MultiDict([("a", "789"), ("b", "456")]) q = MultiDict([("a", "123"), ("b", "456")]) q.update(q) assert repr(q) == "MultiDict([('a', '123'), ('b', '456')])" q = MultiDict([("a", "123"), ("b", "456")]) q.update(None) assert repr(q) == "MultiDict([('a', '123'), ('b', '456')])" q = MultiDict([("a", "123"), ("a", "456")]) q.update([("a", "123")]) assert q.getlist("a") == ["123"] q.update([("a", "456")], a="789", b="123") assert q == MultiDict([("a", "456"), ("a", "789"), ("b", "123")])