Exemplo n.º 1
0
    def test_external_bang_not_found(self):
        query_text = '!!notfoundbang the query'
        query = RawTextQuery(query_text, [])

        self.assertEqual(query.getFullQuery(), query_text)
        self.assertEqual(query.external_bang, None)
        self.assertFalse(query.specific)
Exemplo n.º 2
0
    def test_external_bang(self):
        query_text = '!!ddg the query'
        query = RawTextQuery(query_text, [])

        self.assertEqual(query.getFullQuery(), query_text)
        self.assertEqual(len(query.query_parts), 1)
        self.assertFalse(query.specific)
Exemplo n.º 3
0
    def test_timeout_above1000(self):
        query_text = '<3500 the query'
        query = RawTextQuery(query_text, [])

        self.assertEqual(query.getFullQuery(), query_text)
        self.assertEqual(len(query.query_parts), 3)
        self.assertEqual(query.timeout_limit, 3.5)
        self.assertFalse(query.specific)
Exemplo n.º 4
0
    def test_empty_colon_in_query(self):
        query_text = 'the : query'
        query = RawTextQuery(query_text, [])

        self.assertEqual(query.getFullQuery(), query_text)
        self.assertEqual(len(query.query_parts), 0)
        self.assertEqual(len(query.languages), 0)
        self.assertFalse(query.specific)
Exemplo n.º 5
0
    def test_simple_query(self):
        query_text = 'the query'
        query = RawTextQuery(query_text, [])

        self.assertEqual(query.getFullQuery(), query_text)
        self.assertEqual(len(query.query_parts), 1)
        self.assertEqual(len(query.languages), 0)
        self.assertFalse(query.specific)
Exemplo n.º 6
0
    def test_multiple_spaces_query(self):
        query_text = '\tthe   query'
        query = RawTextQuery(query_text, [])

        self.assertEqual(query.getFullQuery(), 'the query')
        self.assertEqual(len(query.query_parts), 0)
        self.assertEqual(len(query.user_query_parts), 2)
        self.assertEqual(len(query.languages), 0)
        self.assertFalse(query.specific)
Exemplo n.º 7
0
    def test_simple_query(self):
        query_text = 'the query'
        query = RawTextQuery(query_text, [])
        query.parse_query()

        self.assertEquals(query.getFullQuery(), query_text)
        self.assertEquals(len(query.query_parts), 1)
        self.assertEquals(len(query.languages), 0)
        self.assertFalse(query.specific)
Exemplo n.º 8
0
    def test_timeout_below100(self):
        query_text = '<3 the query'
        query = RawTextQuery(query_text, [])
        query.parse_query()

        self.assertEquals(query.getFullQuery(), query_text)
        self.assertEquals(len(query.query_parts), 3)
        self.assertEquals(query.timeout_limit, 3)
        self.assertFalse(query.specific)
Exemplo n.º 9
0
    def test_language_name(self):
        language = 'english'
        query_text = 'the query'
        full_query = ':' + language + ' ' + query_text
        query = RawTextQuery(full_query, [])

        self.assertEqual(query.getFullQuery(), full_query)
        self.assertEqual(len(query.query_parts), 1)
        self.assertIn('en', query.languages)
        self.assertFalse(query.specific)
Exemplo n.º 10
0
    def test_timeout_invalid(self):
        # invalid number: it is not bang but it is part of the query
        query_text = '<xxx the query'
        query = RawTextQuery(query_text, [])

        self.assertEqual(query.getFullQuery(), query_text)
        self.assertEqual(len(query.query_parts), 1)
        self.assertEqual(query.query_parts[0], query_text)
        self.assertEqual(query.timeout_limit, None)
        self.assertFalse(query.specific)
Exemplo n.º 11
0
    def test_unlisted_language_code(self):
        language = 'all'
        query_text = 'the query'
        full_query = ':' + language + ' ' + query_text
        query = RawTextQuery(full_query, [])

        self.assertEqual(query.getFullQuery(), full_query)
        self.assertEqual(len(query.query_parts), 3)
        self.assertIn('all', query.languages)
        self.assertFalse(query.specific)
Exemplo n.º 12
0
    def test_invalid_language_code(self):
        language = 'not_a_language'
        query_text = 'the query'
        full_query = ':' + language + ' ' + query_text
        query = RawTextQuery(full_query, [])

        self.assertEqual(query.getFullQuery(), full_query)
        self.assertEqual(len(query.query_parts), 1)
        self.assertEqual(len(query.languages), 0)
        self.assertFalse(query.specific)
Exemplo n.º 13
0
def autocompleter():
    """Return autocompleter results"""

    # set blocked engines
    disabled_engines = request.preferences.engines.get_disabled()

    # parse query
    if PY3:
        raw_text_query = RawTextQuery(request.form.get('q', b''),
                                      disabled_engines)
    else:
        raw_text_query = RawTextQuery(
            request.form.get('q', u'').encode('utf-8'), disabled_engines)
    raw_text_query.parse_query()

    # check if search query is set
    if not raw_text_query.getSearchQuery():
        return '', 400

    # run autocompleter
    completer = autocomplete_backends.get(
        request.preferences.get_value('autocomplete'))

    # parse searx specific autocompleter results like !bang
    raw_results = searx_bang(raw_text_query)

    # normal autocompletion results only appear if no inner results returned
    # and there is a query part besides the engine and language bangs
    if len(raw_results) == 0 and completer and (
            len(raw_text_query.query_parts) > 1 or
        (len(raw_text_query.languages) == 0 and not raw_text_query.specific)):
        # get language from cookie
        language = request.preferences.get_value('language')
        if not language or language == 'all':
            language = 'en'
        else:
            language = language.split('-')[0]
        # run autocompletion
        raw_results.extend(completer(raw_text_query.getSearchQuery(),
                                     language))

    # parse results (write :language and !engine back to result string)
    results = []
    for result in raw_results:
        raw_text_query.changeSearchQuery(result)

        # add parsed result
        results.append(raw_text_query.getFullQuery())

    # return autocompleter results
    if request.form.get('format') == 'x-suggestions':
        return Response(json.dumps([raw_text_query.query, results]),
                        mimetype='application/json')

    return Response(json.dumps(results), mimetype='application/json')
Exemplo n.º 14
0
    def test_invalid_language_code(self):
        language = 'not_a_language'
        query_text = 'the query'
        full_query = ':' + language + ' ' + query_text
        query = RawTextQuery(full_query, [])
        query.parse_query()

        self.assertEquals(query.getFullQuery(), full_query)
        self.assertEquals(len(query.query_parts), 1)
        self.assertEquals(len(query.languages), 0)
        self.assertFalse(query.specific)
Exemplo n.º 15
0
    def test_timeout_autocomplete(self):
        # invalid number: it is not bang but it is part of the query
        query_text = 'the query <'
        query = RawTextQuery(query_text, [])

        self.assertEqual(query.getFullQuery(), query_text)
        self.assertEqual(len(query.query_parts), 0)
        self.assertEqual(query.getQuery(), query_text)
        self.assertEqual(query.timeout_limit, None)
        self.assertFalse(query.specific)
        self.assertEqual(query.autocomplete_list, ['<3', '<850'])
Exemplo n.º 16
0
    def test_unlisted_language_code(self):
        language = 'all'
        query_text = 'the query'
        full_query = ':' + language + ' ' + query_text
        query = RawTextQuery(full_query, [])
        query.parse_query()

        self.assertEquals(query.getFullQuery(), full_query)
        self.assertEquals(len(query.query_parts), 3)
        self.assertIn('all', query.languages)
        self.assertFalse(query.specific)
Exemplo n.º 17
0
    def test_external_bang_autocomplete_empty(self):
        query_text = 'the query !!'
        query = RawTextQuery(query_text, [])

        self.assertEqual(query.getFullQuery(), 'the query !!')
        self.assertEqual(len(query.query_parts), 0)
        self.assertFalse(query.specific)
        self.assertGreater(len(query.autocomplete_list), 2)

        a = query.autocomplete_list[0]
        self.assertEqual(query.get_autocomplete_full_query(a),
                         'the query ' + a)
Exemplo n.º 18
0
    def test_language_code(self):
        language = 'es-ES'
        query_text = 'the query'
        full_query = ':' + language + ' ' + query_text
        query = RawTextQuery(full_query, [])
        query.parse_query()

        self.assertEquals(query.getFullQuery(), full_query)
        self.assertEquals(len(query.query_parts), 3)
        self.assertEquals(len(query.languages), 1)
        self.assertIn(language, query.languages)
        self.assertFalse(query.specific)
Exemplo n.º 19
0
    def test_bang(self):
        initialize(TEST_ENGINES)

        for bang in TestBang.SPECIFIC_BANGS + TestBang.NOT_SPECIFIC_BANGS:
            with self.subTest(msg="Check bang", bang=bang):
                query_text = TestBang.THE_QUERY + ' ' + bang
                query = RawTextQuery(query_text, [])

                self.assertEqual(query.getFullQuery(),
                                 bang + ' ' + TestBang.THE_QUERY)
                self.assertEqual(query.query_parts, [bang])
                self.assertEqual(query.user_query_parts,
                                 TestBang.THE_QUERY.split(' '))
Exemplo n.º 20
0
def autocompleter():
    """Return autocompleter results"""

    # set blocked engines
    disabled_engines = request.preferences.engines.get_disabled()

    # parse query
    raw_text_query = RawTextQuery(request.form.get("q", ""), disabled_engines)

    # check if search query is set
    if not raw_text_query.getQuery():
        return "", 400

    # run autocompleter
    completer = autocomplete_backends.get(
        request.preferences.get_value("autocomplete"))

    # parse searx specific autocompleter results like !bang
    raw_results = searx_bang(raw_text_query)

    # normal autocompletion results only appear if no inner results returned
    # and there is a query part besides the engine and language bangs
    if (len(raw_results) == 0 and completer
            and (len(raw_text_query.query_parts) > 1 or
                 (len(raw_text_query.languages) == 0
                  and not raw_text_query.specific))):
        # get language from cookie
        language = request.preferences.get_value("language")
        if not language or language == "all":
            language = "en"
        else:
            language = language.split("-")[0]
        # run autocompletion
        raw_results.extend(completer(raw_text_query.getQuery(), language))

    # parse results (write :language and !engine back to result string)
    results = []
    for result in raw_results:
        raw_text_query.changeQuery(result)

        # add parsed result
        results.append(raw_text_query.getFullQuery())

    # return autocompleter results
    if request.headers.get("X-Requested-With") == "XMLHttpRequest":
        return Response(json.dumps(results), mimetype="application/json")

    return Response(
        json.dumps([raw_text_query.query, results]),
        mimetype="application/x-suggestions+json",
    )
Exemplo n.º 21
0
def autocompleter():
    """Return autocompleter results"""

    # set blocked engines
    disabled_engines = request.preferences.engines.get_disabled()

    # parse query
    if PY3:
        raw_text_query = RawTextQuery(request.form.get('q', b''), disabled_engines)
    else:
        raw_text_query = RawTextQuery(request.form.get('q', u'').encode('utf-8'), disabled_engines)
    raw_text_query.parse_query()

    # check if search query is set
    if not raw_text_query.getSearchQuery():
        return '', 400

    # run autocompleter
    completer = autocomplete_backends.get(request.preferences.get_value('autocomplete'))

    # parse searx specific autocompleter results like !bang
    raw_results = searx_bang(raw_text_query)

    # normal autocompletion results only appear if max 3 inner results returned
    if len(raw_results) <= 3 and completer:
        # get language from cookie
        language = request.preferences.get_value('language')
        if not language or language == 'all':
            language = 'en'
        else:
            language = language.split('-')[0]
        # run autocompletion
        raw_results.extend(completer(raw_text_query.getSearchQuery(), language))

    # parse results (write :language and !engine back to result string)
    results = []
    for result in raw_results:
        raw_text_query.changeSearchQuery(result)

        # add parsed result
        results.append(raw_text_query.getFullQuery())

    # return autocompleter results
    if request.form.get('format') == 'x-suggestions':
        return Response(json.dumps([raw_text_query.query, results]),
                        mimetype='application/json')

    return Response(json.dumps(results),
                    mimetype='application/json')
Exemplo n.º 22
0
Arquivo: webapp.py Projeto: kvch/searx
def autocompleter():
    """Return autocompleter results"""

    # set blocked engines
    disabled_engines = request.preferences.engines.get_disabled()

    # parse query
    raw_text_query = RawTextQuery(request.form.get("q", "").encode("utf-8"), disabled_engines)
    raw_text_query.parse_query()

    # check if search query is set
    if not raw_text_query.getSearchQuery():
        return "", 400

    # run autocompleter
    completer = autocomplete_backends.get(request.preferences.get_value("autocomplete"))

    # parse searx specific autocompleter results like !bang
    raw_results = searx_bang(raw_text_query)

    # normal autocompletion results only appear if max 3 inner results returned
    if len(raw_results) <= 3 and completer:
        # get language from cookie
        language = request.preferences.get_value("language")
        if not language or language == "all":
            language = "en"
        else:
            language = language.split("_")[0]
        # run autocompletion
        raw_results.extend(completer(raw_text_query.getSearchQuery(), language))

    # parse results (write :language and !engine back to result string)
    results = []
    for result in raw_results:
        raw_text_query.changeSearchQuery(result)

        # add parsed result
        results.append(raw_text_query.getFullQuery())

    # return autocompleter results
    if request.form.get("format") == "x-suggestions":
        return Response(json.dumps([raw_text_query.query, results]), mimetype="application/json")

    return Response(json.dumps(results), mimetype="application/json")
Exemplo n.º 23
0
 def test_bang_not_found(self):
     load_engines(TEST_ENGINES)
     query = RawTextQuery('the query !bang_not_found', [])
     self.assertEqual(query.getFullQuery(), 'the query !bang_not_found')
Exemplo n.º 24
0
 def test_bang_not_found(self):
     initialize(TEST_ENGINES)
     query = RawTextQuery('the query !bang_not_found', [])
     self.assertEqual(query.getFullQuery(), 'the query !bang_not_found')
Exemplo n.º 25
0
 def test_change_query(self):
     query_text = '<8 the query'
     query = RawTextQuery(query_text, [])
     another_query = query.changeQuery('another text')
     self.assertEqual(query, another_query)
     self.assertEqual(query.getFullQuery(), '<8 another text')