示例#1
0
    def test_parses_correct_quoted_query(self):
        [(field, value)] = parameters.parse_search('title eq "Moby Dick"')
        self.assertEqual(field, 'title')
        self.assertEqual(value, 'Moby Dick')

        [(field, value)] = parameters.parse_search("title eq 'Moby Dick'")
        self.assertEqual(field, 'title')
        self.assertEqual(value, 'Moby Dick')
示例#2
0
 def test_parses_correct_conjunctive_query(self):
     query = 'title eq Moby Dick and author eq Melville, Herman'
     [(field1, value1), (field2, value2)] = parameters.parse_search(query)
     self.assertEqual(field1, 'title')
     self.assertEqual(value1, 'Moby Dick')
     self.assertEqual(field2, 'author')
     self.assertEqual(value2, 'Melville, Herman')
示例#3
0
def search(query: str, include: Optional[str] = None) -> List[dict]:
    fields = parse_include(include) if include else []
    conjunction = parse_search(query)

    parts = iter(get_etexts(field, value) for field, value in conjunction)
    results = set(next(parts))
    [results.intersection_update(part) for part in parts]  # type: ignore

    return [
        dict([('text_id', text_id)] + [(field, get_metadata(field, text_id))
                                       for field in fields])
        for text_id in results
    ]
示例#4
0
 def test_parses_correct_url_encoded_query(self):
     [(field, value)] = parameters.parse_search('title%20eq%20Moby%20Dick')
     self.assertEqual(field, 'title')
     self.assertEqual(value, 'Moby Dick')
示例#5
0
 def test_no_value_is_invalid(self):
     with self.assertRaises(InvalidUsage):
         parameters.parse_search('title eq')
示例#6
0
 def test_bad_field_is_invalid(self):
     with self.assertRaises(InvalidUsage):
         parameters.parse_search('foobar eq value')
示例#7
0
 def test_bad_operator_is_invalid(self):
     with self.assertRaises(InvalidUsage):
         parameters.parse_search('field foobar value')
示例#8
0
 def test_empty_is_invalid(self):
     with self.assertRaises(InvalidUsage):
         parameters.parse_search('')