コード例 #1
0
ファイル: test_search_helper.py プロジェクト: WardLT/toolbox
def test_ex_search():
    # Error on no query
    q = SearchHelper(INDEX, search_client=SEARCH_CLIENT)
    with pytest.raises(ValueError):
        q._ex_search()

    # Return info if requested
    res2 = SearchHelper(INDEX, search_client=SEARCH_CLIENT,
                        q="Al")._ex_search(info=False)
    assert isinstance(res2, list)
    assert isinstance(res2[0], dict)
    res3 = SearchHelper(INDEX, search_client=SEARCH_CLIENT,
                        q="Al")._ex_search(info=True)
    assert isinstance(res3, tuple)
    assert isinstance(res3[0], list)
    assert isinstance(res3[0][0], dict)
    assert isinstance(res3[1], dict)

    # Check limit
    res4 = SearchHelper(INDEX, search_client=SEARCH_CLIENT,
                        q="Al")._ex_search(info=False, limit=3)
    assert len(res4) == 3

    # Check default limits
    res5 = SearchHelper(INDEX, search_client=SEARCH_CLIENT,
                        q="Al")._ex_search()
    assert len(res5) == 10
    res6 = SearchHelper(INDEX,
                        search_client=SEARCH_CLIENT,
                        q="mdf.source_name:nist_xps_db",
                        advanced=True)._ex_search()
    assert len(res6) == 10000

    # Check limit correction (should throw a warning)
    with pytest.warns(RuntimeWarning):
        res7 = SearchHelper(
            INDEX,
            search_client=SEARCH_CLIENT,
            advanced=True,
            q="mdf.source_name:nist_xps_db")._ex_search(limit=20000)
    assert len(res7) == 10000

    # Test index translation
    # mdf = 1a57bbe5-5272-477f-9d31-343b8258b7a5
    res8 = SearchHelper(INDEX, search_client=SEARCH_CLIENT,
                        q="data")._ex_search(info=True, limit=1)
    assert len(res8[0]) == 1
    assert res8[1]["index_uuid"] == "1a57bbe5-5272-477f-9d31-343b8258b7a5"
    with pytest.raises(SearchAPIError):
        SearchHelper("notexists", search_client=SEARCH_CLIENT,
                     q="data")._ex_search(info=True, limit=1)
コード例 #2
0
ファイル: test_search_helper.py プロジェクト: WardLT/toolbox
def test_add_sort_internal():
    # Sort ascending by atomic number
    q = SearchHelper(INDEX,
                     search_client=SEARCH_CLIENT,
                     q="mdf.source_name:oqmd",
                     advanced=True)
    q._add_sort('crystal_structure.number_of_atoms', True)
    res = q._ex_search(limit=1)
    assert res[0]['crystal_structure']['number_of_atoms'] == 1

    # Sort descending by composition
    q._add_sort('material.composition', False)
    res = q._ex_search(limit=1)
    assert res[0]['crystal_structure']['number_of_atoms'] == 1
    assert res[0]['material']['composition'].startswith('Zr')
コード例 #3
0
ファイル: test_search_helper.py プロジェクト: WardLT/toolbox
def test_chaining():
    # Internal
    q = SearchHelper(INDEX, search_client=SEARCH_CLIENT)
    q._field("source_name", "cip")
    q._and_join()
    q._field("elements", "Al")
    res1 = q._ex_search(limit=10000)
    res2 = (SearchHelper(INDEX, search_client=SEARCH_CLIENT)._field(
        "source_name", "cip")._and_join()._field("elements",
                                                 "Al")._ex_search(limit=10000))
    assert all([r in res2 for r in res1]) and all([r in res1 for r in res2])

    # External
    f = SearchHelper(INDEX, search_client=SEARCH_CLIENT)
    f.match_field("source_name", "cip")
    f.match_field("material.elements", "Al")
    res1 = f.search()
    res2 = f.match_field("source_name",
                         "cip").match_field("material.elements",
                                            "Al").search()
    assert all([r in res2 for r in res1]) and all([r in res1 for r in res2])