Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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")])