mirror of https://github.com/searxng/searxng
Feature/standalone searx update (#1591)
* chg: dev: update standalone_searx parent d8a5df721b33dd8a7cc9e21dba4060f21d629f69 author rachmadaniHaryono <foreturiga@gmail.com> 1603896594 +0800 committer rachmadaniHaryono <foreturiga@gmail.com> 1603896619 +0800 chg: dev: debug engine_shortcuts chg: dev: only initilize if engine is given chg: dev: split main chg: dev: standalone_searx chg: dev: update standalone_searx chg: doc: remove unnecessary log chg: test: differentiate travis chg: test: disable shortcut chg: test: use default engine settings fix: dev: category choices fix: dev: duplicate engine shortcut fix: dev: travis python3 fix: test: use empty string as shortcut fix: test: apkm fix: test: engine shortcut fix: test: mypy fix: test: parameter fix: test: pep8 fix: test: py2 compatibilities fix: test: searx settings fix: test: travis engines new: dev: deduplicate engine new: dev: main receive engines parameter new: dev: parse_argument accept engines parameter new: dev: split search query from get_result func new: test: basic result case Suggestions: use RawTextQuery to make the suggestions URLs. Update all themes accordingly. * new: doc: searx import and init * chg: dev: parse_argument - doc - run on __main__ - simple parse_args * chg: doc: module * chg: dev: import section - remove unused python path modification - new required package * chg: dev: script run - parse_argument func return directly parsed results - main func return dict instead json text - dump directly on sys.stdout.write * chg: dev: get_search_query and get_search_query func * chg: dev: main func - move inner function outside - return dict instead of json text * new: dev: add utils to doc sys path * new: doc: standalone_searx * fix: doc: run script * chg: dev: mypy type hint * chg: dev: SearchQuery don't have attr engines * chg: dev: reset engines __init__ * chg: test: unit test update * chg: dev: pylint and flake8 * new: test: standalone_searx * chg: dev: main func and doc * chg: dev: import and type hint * new: dev: main func - remove get_result func - single func which just translate dict * chg: test: put mypy on dev requirement * chg: doc: update * new: doc: add standalone_searx module member * chg: doc: shell command line * chg: dev: remove mypy * chg: doc: module docstringpull/1/head
parent
1b42d42695
commit
c03e4c86bc
@ -0,0 +1,11 @@
|
||||
|
||||
.. _standalone_searx.py:
|
||||
|
||||
=============================
|
||||
``utils/standalone_searx.py``
|
||||
=============================
|
||||
|
||||
.. automodule:: standalone_searx
|
||||
:members:
|
||||
|
||||
|
@ -0,0 +1,118 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Test utils/standalone_searx.py"""
|
||||
import datetime
|
||||
import importlib.util
|
||||
import sys
|
||||
|
||||
from mock import Mock, patch
|
||||
from nose2.tools import params
|
||||
|
||||
from searx.testing import SearxTestCase
|
||||
|
||||
|
||||
def get_standalone_searx_module():
|
||||
"""Get standalone_searx module."""
|
||||
module_name = 'utils.standalone_searx'
|
||||
filename = 'utils/standalone_searx.py'
|
||||
spec = importlib.util.spec_from_file_location(module_name, filename)
|
||||
sas = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(sas)
|
||||
return sas
|
||||
|
||||
|
||||
class StandaloneSearx(SearxTestCase):
|
||||
"""Unit test for standalone_searx."""
|
||||
|
||||
def test_parse_argument_no_args(self):
|
||||
"""Test parse argument without args."""
|
||||
sas = get_standalone_searx_module()
|
||||
with patch.object(sys, 'argv', ['standalone_searx']), \
|
||||
self.assertRaises(SystemExit):
|
||||
sas.parse_argument()
|
||||
|
||||
def test_parse_argument_basic_args(self):
|
||||
"""Test parse argument with basic args."""
|
||||
sas = get_standalone_searx_module()
|
||||
query = 'red box'
|
||||
exp_dict = {
|
||||
'query': query, 'category': 'general', 'lang': 'all', 'pageno': 1,
|
||||
'safesearch': '0', 'timerange': None}
|
||||
args = ['standalone_searx', query]
|
||||
with patch.object(sys, 'argv', args):
|
||||
res = sas.parse_argument()
|
||||
self.assertEqual(exp_dict, vars(res))
|
||||
res2 = sas.parse_argument(args[1:])
|
||||
self.assertEqual(exp_dict, vars(res2))
|
||||
|
||||
def test_to_dict(self):
|
||||
"""test to_dict."""
|
||||
sas = get_standalone_searx_module()
|
||||
self.assertEqual(
|
||||
sas.to_dict(
|
||||
sas.get_search_query(sas.parse_argument(['red box']))),
|
||||
{
|
||||
'search': {
|
||||
'q': 'red box', 'pageno': 1, 'lang': 'all',
|
||||
'safesearch': 0, 'timerange': None
|
||||
},
|
||||
'results': [], 'infoboxes': [], 'suggestions': [],
|
||||
'answers': [], 'paging': False, 'results_number': 0
|
||||
}
|
||||
)
|
||||
|
||||
def test_to_dict_with_mock(self):
|
||||
"""test to dict."""
|
||||
sas = get_standalone_searx_module()
|
||||
with patch.object(sas.searx.search, 'Search') as mock_s:
|
||||
m_search = mock_s().search()
|
||||
m_sq = Mock()
|
||||
self.assertEqual(
|
||||
sas.to_dict(m_sq),
|
||||
{
|
||||
'answers': [],
|
||||
'infoboxes': m_search.infoboxes,
|
||||
'paging': m_search.paging,
|
||||
'results': m_search.get_ordered_results(),
|
||||
'results_number': m_search.results_number(),
|
||||
'search': {
|
||||
'lang': m_sq.lang,
|
||||
'pageno': m_sq.pageno,
|
||||
'q': m_sq.query,
|
||||
'safesearch': m_sq.safesearch,
|
||||
'timerange': m_sq.time_range,
|
||||
},
|
||||
'suggestions': []
|
||||
}
|
||||
)
|
||||
|
||||
def test_get_search_query(self):
|
||||
"""test get_search_query."""
|
||||
sas = get_standalone_searx_module()
|
||||
args = sas.parse_argument(['rain', ])
|
||||
search_q = sas.get_search_query(args)
|
||||
self.assertTrue(search_q)
|
||||
self.assertEqual(str(search_q), 'rain;[]')
|
||||
|
||||
def test_no_parsed_url(self):
|
||||
"""test no_parsed_url func"""
|
||||
sas = get_standalone_searx_module()
|
||||
self.assertEqual(
|
||||
sas.no_parsed_url([{'parsed_url': 'http://example.com'}]),
|
||||
[{}]
|
||||
)
|
||||
|
||||
@params(
|
||||
(datetime.datetime(2020, 1, 1), '2020-01-01T00:00:00'),
|
||||
('a'.encode('utf8'), 'a'),
|
||||
(set([1]), [1])
|
||||
)
|
||||
def test_json_serial(self, arg, exp_res):
|
||||
"""test json_serial func"""
|
||||
sas = get_standalone_searx_module()
|
||||
self.assertEqual(sas.json_serial(arg), exp_res)
|
||||
|
||||
def test_json_serial_error(self):
|
||||
"""test error on json_serial."""
|
||||
sas = get_standalone_searx_module()
|
||||
with self.assertRaises(TypeError):
|
||||
sas.json_serial('a')
|
Loading…
Reference in New Issue