Ejemplo n.º 1
0
def search(request):
    """Search the database for annotations matching with the given query."""
    schema = SearchParamsSchema()
    params = validate_query_params(schema, request.params)

    separate_replies = params.pop("_separate_replies", False)

    stats = getattr(request, "stats", None)

    search = search_lib.Search(request,
                               separate_replies=separate_replies,
                               stats=stats)
    result = search.run(params)

    svc = request.find_service(name="annotation_json_presentation")

    out = {
        "total": result.total,
        "rows": svc.present_all(result.annotation_ids)
    }

    if separate_replies:
        out["replies"] = svc.present_all(result.reply_ids)

    return out
Ejemplo n.º 2
0
def search(request):
    """Search the database for annotations matching with the given query."""
    schema = SearchParamsSchema()
    params = validate_query_params(schema, request.params)

    _record_search_api_usage_metrics(params)

    separate_replies = params.pop('_separate_replies', False)

    stats = getattr(request, 'stats', None)

    search = search_lib.Search(request,
                               separate_replies=separate_replies,
                               stats=stats)
    search.append_modifier(
        UriCombinedWildcardFilter(request, separate_keys=True))
    result = search.run(params)

    svc = request.find_service(name='annotation_json_presentation')

    out = {
        'total': result.total,
        'rows': svc.present_all(result.annotation_ids)
    }

    if separate_replies:
        out['replies'] = svc.present_all(result.reply_ids)

    return out
Ejemplo n.º 3
0
    def test_passes_validation_if_valid_search_after(self, schema, search_after, sort):
        input_params = NestedMultiDict(
            MultiDict({"search_after": search_after, "sort": sort})
        )

        params = validate_query_params(schema, input_params)

        assert params["search_after"] == search_after
Ejemplo n.º 4
0
    def test_a_list_field_can_have_a_single_value(self):
        schema = QueryParamSchema()
        params = MultiDict()
        params.add("list_field", "first")

        parsed = validate_query_params(schema, params)

        assert parsed.getall("list_field") == ["first"]
Ejemplo n.º 5
0
    def test_passes_validation_if_valid_search_after(self, schema, search_after, sort):
        input_params = NestedMultiDict(
            MultiDict({"search_after": search_after, "sort": sort})
        )

        params = validate_query_params(schema, input_params)

        assert params["search_after"] == search_after
Ejemplo n.º 6
0
    def test_a_list_field_can_have_a_single_value(self):
        schema = QueryParamSchema()
        params = MultiDict()
        params.add("list_field", "first")

        parsed = validate_query_params(schema, params)

        assert parsed.getall("list_field") == ["first"]
Ejemplo n.º 7
0
    def test_sets_offset_to_0_if_search_after(self, schema):
        input_params = NestedMultiDict(
            MultiDict({"search_after": "2009-02-16", "offset": 5})
        )

        params = validate_query_params(schema, input_params)

        assert not params["offset"]
        assert params["search_after"] == "2009-02-16"
Ejemplo n.º 8
0
    def test_it_keeps_all_values_for_sequence_fields(self):
        schema = QueryParamSchema()
        params = MultiDict()
        params.add("list_field", "first")
        params.add("list_field", "second")

        parsed = validate_query_params(schema, params)

        assert parsed.getall("list_field") == ["first", "second"]
Ejemplo n.º 9
0
    def test_sets_offset_to_0_if_search_after(self, schema):
        input_params = NestedMultiDict(
            MultiDict({"search_after": "2009-02-16", "offset": 5})
        )

        params = validate_query_params(schema, input_params)

        assert params["offset"] == 0
        assert params["search_after"] == "2009-02-16"
Ejemplo n.º 10
0
    def test_it_keeps_only_last_value_for_non_sequence_fields(self):
        schema = QueryParamSchema()
        params = MultiDict()
        params.add("string_field", "first")
        params.add("string_field", "second")

        parsed = validate_query_params(schema, params)

        assert parsed.getall("string_field") == ["second"]
Ejemplo n.º 11
0
    def test_it_does_not_include_unknown_fields(self):
        schema = QueryParamSchema()
        params = MultiDict()
        params.add("string_field", "include_me")
        params.add("unknown_field", "ignore_me")

        parsed = validate_query_params(schema, params)

        assert "unknown_field" not in parsed
Ejemplo n.º 12
0
    def test_it_keeps_all_values_for_sequence_fields(self):
        schema = QueryParamSchema()
        params = MultiDict()
        params.add("list_field", "first")
        params.add("list_field", "second")

        parsed = validate_query_params(schema, params)

        assert parsed.getall("list_field") == ["first", "second"]
Ejemplo n.º 13
0
    def test_it_keeps_only_last_value_for_non_sequence_fields(self):
        schema = QueryParamSchema()
        params = MultiDict()
        params.add("string_field", "first")
        params.add("string_field", "second")

        parsed = validate_query_params(schema, params)

        assert parsed.getall("string_field") == ["second"]
Ejemplo n.º 14
0
    def test_it_does_not_include_unknown_fields(self):
        schema = QueryParamSchema()
        params = MultiDict()
        params.add("string_field", "include_me")
        params.add("unknown_field", "ignore_me")

        parsed = validate_query_params(schema, params)

        assert "unknown_field" not in parsed
Ejemplo n.º 15
0
    def test_it_handles_duplicate_keys(self, schema):
        expected_params = MultiDict([("url", "http://foobar"),
                                     ("url", "http://foobat")])
        input_params = deepcopy(expected_params)
        input_params.add("unknownparam", "foo")
        input_params.add("unknownparam", "bar")

        params = validate_query_params(schema, NestedMultiDict(input_params))

        assert params.getall("url") == ["http://foobar", "http://foobat"]
        assert "unknownparam" not in params
Ejemplo n.º 16
0
    def test_it_returns_only_known_params(self, schema):
        expected_params = MultiDict(
            {
                "_separate_replies": True,
                "group": "group1",
                "quote": "quote me",
                "references": "3456TA12",
                "tag": "tagme",
                "tags": "tagme2",
                "text": "text me",
                "uri": "foobar.com",
                "uri.parts": "bbc",
                "wildcard_uri": "http://foo.com/*",
                "url": "https://foobar.com",
                "any": "foo",
                "user": "******",
                "sort": "created",
                "limit": 10,
                "order": "asc",
                "offset": 0,
                "search_after": "2018-01-01",
            }
        )
        input_params = NestedMultiDict(
            MultiDict(
                {
                    "_separate_replies": "1",
                    "group": "group1",
                    "quote": "quote me",
                    "references": "3456TA12",
                    "tag": "tagme",
                    "tags": "tagme2",
                    "text": "text me",
                    "uri": "foobar.com",
                    "uri.parts": "bbc",
                    "wildcard_uri": "http://foo.com/*",
                    "url": "https://foobar.com",
                    "any": "foo",
                    "user": "******",
                    "sort": "created",
                    "limit": "10",
                    "order": "asc",
                    "offset": "0",
                    "unknown": "no_exist",
                    "no_exist": "unknown",
                    "search_after": "2018-01-01",
                }
            )
        )

        params = validate_query_params(schema, input_params)

        assert params == expected_params
Ejemplo n.º 17
0
    def test_it_returns_only_known_params(self, schema):
        expected_params = MultiDict(
            {
                "_separate_replies": True,
                "group": "group1",
                "quote": "quote me",
                "references": "3456TA12",
                "tag": "tagme",
                "tags": "tagme2",
                "text": "text me",
                "uri": "foobar.com",
                "uri.parts": "bbc",
                "wildcard_uri": "http://foo.com/*",
                "url": "https://foobar.com",
                "any": "foo",
                "user": "******",
                "sort": "created",
                "limit": 10,
                "order": "asc",
                "offset": 0,
                "search_after": "2018-01-01",
            }
        )
        input_params = NestedMultiDict(
            MultiDict(
                {
                    "_separate_replies": "1",
                    "group": "group1",
                    "quote": "quote me",
                    "references": "3456TA12",
                    "tag": "tagme",
                    "tags": "tagme2",
                    "text": "text me",
                    "uri": "foobar.com",
                    "uri.parts": "bbc",
                    "wildcard_uri": "http://foo.com/*",
                    "url": "https://foobar.com",
                    "any": "foo",
                    "user": "******",
                    "sort": "created",
                    "limit": "10",
                    "order": "asc",
                    "offset": "0",
                    "unknown": "no_exist",
                    "no_exist": "unknown",
                    "search_after": "2018-01-01",
                }
            )
        )

        params = validate_query_params(schema, input_params)

        assert params == expected_params
Ejemplo n.º 18
0
    def test_it_handles_duplicate_keys(self, schema):
        expected_params = MultiDict(
            [("url", "http://foobar"), ("url", "http://foobat")]
        )
        input_params = deepcopy(expected_params)
        input_params.add("unknownparam", "foo")
        input_params.add("unknownparam", "bar")

        params = validate_query_params(schema, NestedMultiDict(input_params))

        assert params.getall("url") == ["http://foobar", "http://foobat"]
        assert "unknownparam" not in params
Ejemplo n.º 19
0
    def test_it_deserializes_params(self):
        schema = QueryParamSchema()
        params = MultiDict()
        params.add("string_field", "test")

        parsed = validate_query_params(schema, params)

        assert parsed == {
            "int_field": 0,
            "string_field": "test",
            "list_field": None,
            "enum_field": "up",
        }
Ejemplo n.º 20
0
    def test_it_deserializes_params(self):
        schema = QueryParamSchema()
        params = MultiDict()
        params.add("string_field", "test")

        parsed = validate_query_params(schema, params)

        assert parsed == {
            "int_field": 0,
            "string_field": "test",
            "list_field": None,
            "enum_field": "up",
        }
Ejemplo n.º 21
0
    def test_it_returns_only_known_params(self, schema):
        expected_params = MultiDict({
            '_separate_replies': True,
            'group': "group1",
            'quote': "quote me",
            'references': "3456TA12",
            'tag': "tagme",
            'tags': "tagme2",
            'text': "text me",
            'uri': "foobar.com",
            'uri.parts': "bbc",
            'wildcard_uri': "http://foo.com/*",
            'url': "https://foobar.com",
            'any': "foo",
            'user': "******",
            'sort': "created",
            'limit': 10,
            'order': "asc",
            'offset': 0,
            'search_after': "2018-01-01",
        })
        input_params = NestedMultiDict(
            MultiDict({
                '_separate_replies': '1',
                'group': "group1",
                'quote': "quote me",
                'references': "3456TA12",
                'tag': "tagme",
                'tags': "tagme2",
                'text': "text me",
                'uri': "foobar.com",
                'uri.parts': "bbc",
                'wildcard_uri': "http://foo.com/*",
                'url': "https://foobar.com",
                'any': "foo",
                'user': "******",
                'sort': "created",
                'limit': "10",
                'order': "asc",
                'offset': "0",
                'unknown': "no_exist",
                'no_exist': "unknown",
                'search_after': "2018-01-01",
            }))

        params = validate_query_params(schema, input_params)

        assert params == expected_params
Ejemplo n.º 22
0
def search(request):
    """Search the database for annotations matching with the given query."""
    schema = SearchParamsSchema()
    params = validate_query_params(schema, request.params)

    separate_replies = params.pop("_separate_replies", False)

    stats = getattr(request, "stats", None)

    search = search_lib.Search(request, separate_replies=separate_replies, stats=stats)
    result = search.run(params)

    svc = request.find_service(name="annotation_json_presentation")

    out = {"total": result.total, "rows": svc.present_all(result.annotation_ids)}

    if separate_replies:
        out["replies"] = svc.present_all(result.reply_ids)

    return out
Ejemplo n.º 23
0
    def test_it_defaults_offset(self, schema):

        params = validate_query_params(schema, NestedMultiDict())

        assert params["offset"] == 0
Ejemplo n.º 24
0
    def test_raises_if_invalid_search_after_date(self, schema):
        input_params = NestedMultiDict(
            MultiDict({"search_after": "invalid_date"}))

        with pytest.raises(ValidationError):
            validate_query_params(schema, input_params)
Ejemplo n.º 25
0
    def test_raises_if_invalid_limit(self, schema, limit):
        input_params = NestedMultiDict(MultiDict({"limit": limit}))

        with pytest.raises(ValidationError):
            validate_query_params(schema, input_params)
Ejemplo n.º 26
0
    def test_it_defaults_order(self, schema):

        params = validate_query_params(schema, NestedMultiDict())

        assert params["order"] == "desc"
Ejemplo n.º 27
0
    def test_it_defaults_offset(self, schema):

        params = validate_query_params(schema, NestedMultiDict())

        assert params["offset"] == 0
Ejemplo n.º 28
0
    def test_raises_if_invalid_offset(self, schema, offset):
        input_params = NestedMultiDict(MultiDict({"offset": offset}))

        with pytest.raises(ValidationError):
            validate_query_params(schema, input_params)
Ejemplo n.º 29
0
    def test_raises_if_invalid_search_after_date(self, schema):
        input_params = NestedMultiDict(MultiDict({"search_after": "invalid_date"}))

        with pytest.raises(ValidationError):
            validate_query_params(schema, input_params)
Ejemplo n.º 30
0
    def test_raises_if_wildcards_are_in_domain(self, schema, wildcard_uri):
        input_params = NestedMultiDict(MultiDict({"wildcard_uri": wildcard_uri}))

        with pytest.raises(ValidationError):
            validate_query_params(schema, input_params)
Ejemplo n.º 31
0
    def test_it_raises_if_params_invalid(self):
        schema = QueryParamSchema()
        params = MultiDict({"int_field": "not-an-int"})

        with pytest.raises(ValidationError):
            validate_query_params(schema, params)
Ejemplo n.º 32
0
    def test_it_defaults_limit(self, schema):

        params = validate_query_params(schema, NestedMultiDict())

        assert params["limit"] == LIMIT_DEFAULT
Ejemplo n.º 33
0
    def test_it_defaults_limit(self, schema):

        params = validate_query_params(schema, NestedMultiDict())

        assert params["limit"] == LIMIT_DEFAULT
Ejemplo n.º 34
0
    def test_it_raises_if_params_invalid(self):
        schema = QueryParamSchema()
        params = MultiDict({"int_field": "not-an-int"})

        with pytest.raises(ValidationError):
            validate_query_params(schema, params)
Ejemplo n.º 35
0
    def test_it_defaults_sort(self, schema):

        params = validate_query_params(schema, NestedMultiDict())

        assert params["sort"] == "updated"
Ejemplo n.º 36
0
    def test_raises_if_invalid_limit(self, schema, limit):
        input_params = NestedMultiDict(MultiDict({"limit": limit}))

        with pytest.raises(ValidationError):
            validate_query_params(schema, input_params)
Ejemplo n.º 37
0
    def test_raises_if_invalid_sort(self, schema):
        input_params = NestedMultiDict(MultiDict({"sort": "notrecognized"}))

        with pytest.raises(ValidationError):
            validate_query_params(schema, input_params)
Ejemplo n.º 38
0
    def test_raises_if_invalid_sort(self, schema):
        input_params = NestedMultiDict(MultiDict({"sort": "notrecognized"}))

        with pytest.raises(ValidationError):
            validate_query_params(schema, input_params)
Ejemplo n.º 39
0
    def test_raises_if_invalid_offset(self, schema, offset):
        input_params = NestedMultiDict(MultiDict({"offset": offset}))

        with pytest.raises(ValidationError):
            validate_query_params(schema, input_params)
Ejemplo n.º 40
0
    def test_it_defaults_order(self, schema):

        params = validate_query_params(schema, NestedMultiDict())

        assert params["order"] == "desc"
Ejemplo n.º 41
0
    def test_raises_if_wildcards_are_in_domain(self, schema, wildcard_uri):
        input_params = NestedMultiDict(
            MultiDict({"wildcard_uri": wildcard_uri}))

        with pytest.raises(ValidationError):
            validate_query_params(schema, input_params)
Ejemplo n.º 42
0
    def test_it_defaults_sort(self, schema):

        params = validate_query_params(schema, NestedMultiDict())

        assert params["sort"] == "updated"