on master help sign in
Refactor

Use only one engine for the four search from Qwant

commitf05087b93ac1ebef3bdacd353524bac0d8041832 authorCqoicebordel <Cqoicebordel@users.noreply.github.com> dateTue 2 Jun 2015, 20:36 (11 years ago) parent884eeb8
10 files changed+217−644
searx/engines/qwant.py+30−8 searx/engines/qwant_images.py−70 searx/engines/qwant_news.py−69 searx/engines/qwant_social.py−69 searx/settings.yml+11−3 searx/tests/engines/test_qwant.py+176 searx/tests/engines/test_qwant_images.py−145 searx/tests/engines/test_qwant_news.py−137 searx/tests/engines/test_qwant_social.py−140 searx/tests/test_engines.py−3
searx/engines/qwant.py+30−8
@@ -1,5 +1,5 @@
11"""
2− Qwant (Web)
2+ Qwant (Web, Images, News, Social)
33
44 @website https://qwant.com/
55 @provide-api not officially (https://api.qwant.com/api/search/)
@@ -12,21 +12,25 @@
1212
1313from urllib import urlencode
1414from json import loads
15+from datetime import datetime
1516
1617# engine dependent config
17−categories = ['general']
18+categories = None
1819paging = True
1920language_support = True
2021
22+search_url_keyword = None
23+
2124# search-url
22−url = 'https://api.qwant.com/api/search/web?count=10&offset={offset}&f=&{query}'
25+url = 'https://api.qwant.com/api/search/{keyword}?count=10&offset={offset}&f=&{query}'
2326
2427
2528# do search-request
2629def request(query, params):
2730 offset = (params['pageno'] - 1) * 10
2831
29− params['url'] = url.format(query=urlencode({'q': query}),
32+ params['url'] = url.format(keyword=search_url_keyword,
33+ query=urlencode({'q': query}),
3034 offset=offset)
3135
3236 # add language tag if specified
@@ -57,10 +61,28 @@ def response(resp):
5761 res_url = result['url']
5862 content = result['desc']
5963
60− # append result
61− results.append({'title': title,
62− 'content': content,
63− 'url': res_url})
64+ if search_url_keyword == 'web':
65+ results.append({'title': title,
66+ 'content': content,
67+ 'url': res_url})
68+
69+ elif search_url_keyword == 'images':
70+ thumbnail_src = result['thumbnail']
71+ img_src = result['media']
72+ results.append({'template': 'images.html',
73+ 'url': res_url,
74+ 'title': title,
75+ 'content': '',
76+ 'thumbnail_src': thumbnail_src,
77+ 'img_src': img_src})
78+
79+ elif search_url_keyword == 'news' or search_url_keyword == 'social':
80+ published_date = datetime.fromtimestamp(result['date'], None)
81+
82+ results.append({'url': res_url,
83+ 'title': title,
84+ 'publishedDate': published_date,
85+ 'content': content})
6486
6587 # return results
6688 return results
searx/engines/qwant_images.pydeleted−70
@@ -1,70 +0,0 @@
1−"""
2− Qwant (Images)
3−
4− @website https://qwant.com/
5− @provide-api not officially (https://api.qwant.com/api/search/)
6−
7− @using-api yes
8− @results JSON
9− @stable yes
10− @parse url, title, content
11−"""
12−
13−from urllib import urlencode
14−from json import loads
15−
16−# engine dependent config
17−categories = ['images']
18−paging = True
19−language_support = True
20−
21−# search-url
22−url = 'https://api.qwant.com/api/search/images?count=10&offset={offset}&f=&{query}'
23−
24−
25−# do search-request
26−def request(query, params):
27− offset = (params['pageno'] - 1) * 10
28−
29− params['url'] = url.format(query=urlencode({'q': query}),
30− offset=offset)
31−
32− # add language tag if specified
33− if params['language'] != 'all':
34− params['url'] += '&locale=' + params['language'].lower()
35−
36− return params
37−
38−
39−# get response from search-request
40−def response(resp):
41− results = []
42−
43− search_results = loads(resp.text)
44−
45− # return empty array if there are no results
46− if 'data' not in search_results:
47− return []
48−
49− data = search_results.get('data', {})
50−
51− res = data.get('result', {})
52−
53− # parse results
54− for result in res.get('items', {}):
55−
56− title = result['title']
57− res_url = result['url']
58− thumbnail_src = result['thumbnail']
59− img_src = result['media']
60−
61− # append result
62− results.append({'template': 'images.html',
63− 'url': res_url,
64− 'title': title,
65− 'content': '',
66− 'thumbnail_src': thumbnail_src,
67− 'img_src': img_src})
68−
69− # return results
70− return results
searx/engines/qwant_news.pydeleted−69
@@ -1,69 +0,0 @@
1−"""
2− Qwant (News)
3−
4− @website https://qwant.com/
5− @provide-api not officially (https://api.qwant.com/api/search/)
6−
7− @using-api yes
8− @results JSON
9− @stable yes
10− @parse url, title, content
11−"""
12−
13−from urllib import urlencode
14−from json import loads
15−from datetime import datetime
16−
17−# engine dependent config
18−categories = ['news']
19−paging = True
20−language_support = True
21−
22−# search-url
23−url = 'https://api.qwant.com/api/search/news?count=10&offset={offset}&f=&{query}'
24−
25−
26−# do search-request
27−def request(query, params):
28− offset = (params['pageno'] - 1) * 10
29−
30− params['url'] = url.format(query=urlencode({'q': query}),
31− offset=offset)
32−
33− # add language tag if specified
34− if params['language'] != 'all':
35− params['url'] += '&locale=' + params['language'].lower()
36−
37− return params
38−
39−
40−# get response from search-request
41−def response(resp):
42− results = []
43−
44− search_results = loads(resp.text)
45−
46− # return empty array if there are no results
47− if 'data' not in search_results:
48− return []
49−
50− data = search_results.get('data', {})
51−
52− res = data.get('result', {})
53−
54− # parse results
55− for result in res.get('items', {}):
56−
57− title = result['title']
58− res_url = result['url']
59− content = result['desc']
60− published_date = datetime.fromtimestamp(result['date'], None)
61−
62− # append result
63− results.append({'url': res_url,
64− 'title': title,
65− 'publishedDate': published_date,
66− 'content': content})
67−
68− # return results
69− return results
searx/engines/qwant_social.pydeleted−69
@@ -1,69 +0,0 @@
1−"""
2− Qwant (social media)
3−
4− @website https://qwant.com/
5− @provide-api not officially (https://api.qwant.com/api/search/)
6−
7− @using-api yes
8− @results JSON
9− @stable yes
10− @parse url, title, content
11−"""
12−
13−from urllib import urlencode
14−from json import loads
15−from datetime import datetime
16−
17−# engine dependent config
18−categories = ['social media']
19−paging = True
20−language_support = True
21−
22−# search-url
23−url = 'https://api.qwant.com/api/search/social?count=10&offset={offset}&f=&{query}'
24−
25−
26−# do search-request
27−def request(query, params):
28− offset = (params['pageno'] - 1) * 10
29−
30− params['url'] = url.format(query=urlencode({'q': query}),
31− offset=offset)
32−
33− # add language tag if specified
34− if params['language'] != 'all':
35− params['url'] += '&locale=' + params['language'].lower()
36−
37− return params
38−
39−
40−# get response from search-request
41−def response(resp):
42− results = []
43−
44− search_results = loads(resp.text)
45−
46− # return empty array if there are no results
47− if 'data' not in search_results:
48− return []
49−
50− data = search_results.get('data', {})
51−
52− res = data.get('result', {})
53−
54− # parse results
55− for result in res.get('items', {}):
56−
57− title = result['title']
58− res_url = result['url']
59− content = result['desc']
60− published_date = datetime.fromtimestamp(result['date'], None)
61−
62− # append result
63− results.append({'url': res_url,
64− 'title': title,
65− 'content': content,
66− 'publishedDate': published_date})
67−
68− # return results
69− return results
searx/settings.yml+11−3
@@ -171,18 +171,26 @@ engines:
171171 - name : qwant
172172 engine : qwant
173173 shortcut : qw
174+ search_url_keyword : web
175+ categories : general
174176
175177 - name : qwant images
176− engine : qwant_images
178+ engine : qwant
177179 shortcut : qwi
180+ search_url_keyword : images
181+ categories : images
178182
179183 - name : qwant news
180− engine : qwant_news
184+ engine : qwant
181185 shortcut : qwn
186+ search_url_keyword : news
187+ categories : news
182188
183189 - name : qwant social
184− engine : qwant_social
190+ engine : qwant
185191 shortcut : qws
192+ search_url_keyword : social
193+ categories : social media
186194
187195 - name : kickass
188196 engine : kickass
searx/tests/engines/test_qwant.py+176
@@ -68,6 +68,7 @@ class TestQwantEngine(SearxTestCase):
6868 }
6969 """
7070 response = mock.Mock(text=json)
71+ qwant.search_url_keyword = 'web'
7172 results = qwant.response(response)
7273 self.assertEqual(type(results), list)
7374 self.assertEqual(len(results), 1)
@@ -75,6 +76,181 @@ class TestQwantEngine(SearxTestCase):
7576 self.assertEqual(results[0]['url'], 'http://www.url.xyz')
7677 self.assertEqual(results[0]['content'], 'Description')
7778
79+ json = """
80+ {
81+ "status": "success",
82+ "data": {
83+ "query": {
84+ "locale": "en_us",
85+ "query": "Test",
86+ "offset": 10
87+ },
88+ "result": {
89+ "items": [
90+ {
91+ "title": "Title",
92+ "score": 9999,
93+ "url": "http://www.url.xyz",
94+ "source": "...",
95+ "media": "http://image.jpg",
96+ "desc": "",
97+ "thumbnail": "http://thumbnail.jpg",
98+ "date": "",
99+ "_id": "db0aadd62c2a8565567ffc382f5c61fa",
100+ "favicon": "https://s.qwant.com/fav.ico"
101+ }
102+ ],
103+ "filters": []
104+ },
105+ "cache": {
106+ "key": "e66aa864c00147a0e3a16ff7a5efafde",
107+ "created": 1433092754,
108+ "expiration": 259200,
109+ "status": "miss",
110+ "age": 0
111+ }
112+ }
113+ }
114+ """
115+ response = mock.Mock(text=json)
116+ qwant.search_url_keyword = 'images'
117+ results = qwant.response(response)
118+ self.assertEqual(type(results), list)
119+ self.assertEqual(len(results), 1)
120+ self.assertEqual(results[0]['title'], 'Title')
121+ self.assertEqual(results[0]['url'], 'http://www.url.xyz')
122+ self.assertEqual(results[0]['content'], '')
123+ self.assertEqual(results[0]['thumbnail_src'], 'http://thumbnail.jpg')
124+ self.assertEqual(results[0]['img_src'], 'http://image.jpg')
125+
126+ json = """
127+ {
128+ "status": "success",
129+ "data": {
130+ "query": {
131+ "locale": "en_us",
132+ "query": "Test",
133+ "offset": 10
134+ },
135+ "result": {
136+ "items": [
137+ {
138+ "title": "Title",
139+ "score": 9999,
140+ "url": "http://www.url.xyz",
141+ "source": "...",
142+ "desc": "Description",
143+ "date": 1433260920,
144+ "_id": "db0aadd62c2a8565567ffc382f5c61fa",
145+ "favicon": "https://s.qwant.com/fav.ico"
146+ }
147+ ],
148+ "filters": []
149+ },
150+ "cache": {
151+ "key": "e66aa864c00147a0e3a16ff7a5efafde",
152+ "created": 1433092754,
153+ "expiration": 259200,
154+ "status": "miss",
155+ "age": 0
156+ }
157+ }
158+ }
159+ """
160+ response = mock.Mock(text=json)
161+ qwant.search_url_keyword = 'news'
162+ results = qwant.response(response)
163+ self.assertEqual(type(results), list)
164+ self.assertEqual(len(results), 1)
165+ self.assertEqual(results[0]['title'], 'Title')
166+ self.assertEqual(results[0]['url'], 'http://www.url.xyz')
167+ self.assertEqual(results[0]['content'], 'Description')
168+ self.assertIn('publishedDate', results[0])
169+
170+ json = """
171+ {
172+ "status": "success",
173+ "data": {
174+ "query": {
175+ "locale": "en_us",
176+ "query": "Test",
177+ "offset": 10
178+ },
179+ "result": {
180+ "items": [
181+ {
182+ "title": "Title",
183+ "score": 9999,
184+ "url": "http://www.url.xyz",
185+ "source": "...",
186+ "desc": "Description",
187+ "date": 1433260920,
188+ "_id": "db0aadd62c2a8565567ffc382f5c61fa",
189+ "favicon": "https://s.qwant.com/fav.ico"
190+ }
191+ ],
192+ "filters": []
193+ },
194+ "cache": {
195+ "key": "e66aa864c00147a0e3a16ff7a5efafde",
196+ "created": 1433092754,
197+ "expiration": 259200,
198+ "status": "miss",
199+ "age": 0
200+ }
201+ }
202+ }
203+ """
204+ response = mock.Mock(text=json)
205+ qwant.search_url_keyword = 'social'
206+ results = qwant.response(response)
207+ self.assertEqual(type(results), list)
208+ self.assertEqual(len(results), 1)
209+ self.assertEqual(results[0]['title'], 'Title')
210+ self.assertEqual(results[0]['url'], 'http://www.url.xyz')
211+ self.assertEqual(results[0]['content'], 'Description')
212+ self.assertIn('publishedDate', results[0])
213+
214+ json = """
215+ {
216+ "status": "success",
217+ "data": {
218+ "query": {
219+ "locale": "en_us",
220+ "query": "Test",
221+ "offset": 10
222+ },
223+ "result": {
224+ "items": [
225+ {
226+ "title": "Title",
227+ "score": 9999,
228+ "url": "http://www.url.xyz",
229+ "source": "...",
230+ "desc": "Description",
231+ "date": 1433260920,
232+ "_id": "db0aadd62c2a8565567ffc382f5c61fa",
233+ "favicon": "https://s.qwant.com/fav.ico"
234+ }
235+ ],
236+ "filters": []
237+ },
238+ "cache": {
239+ "key": "e66aa864c00147a0e3a16ff7a5efafde",
240+ "created": 1433092754,
241+ "expiration": 259200,
242+ "status": "miss",
243+ "age": 0
244+ }
245+ }
246+ }
247+ """
248+ response = mock.Mock(text=json)
249+ qwant.search_url_keyword = ''
250+ results = qwant.response(response)
251+ self.assertEqual(type(results), list)
252+ self.assertEqual(len(results), 0)
253+
78254 json = """
79255 {
80256 "status": "success",
searx/tests/engines/test_qwant_images.pydeleted−145
@@ -1,145 +0,0 @@
1−from collections import defaultdict
2−import mock
3−from searx.engines import qwant_images
4−from searx.testing import SearxTestCase
5−
6−
7−class TestQwantImagesEngine(SearxTestCase):
8−
9− def test_request(self):
10− query = 'test_query'
11− dicto = defaultdict(dict)
12− dicto['pageno'] = 0
13− dicto['language'] = 'fr_FR'
14− params = qwant_images.request(query, dicto)
15− self.assertIn('url', params)
16− self.assertIn(query, params['url'])
17− self.assertIn('qwant.com', params['url'])
18− self.assertIn('fr_fr', params['url'])
19−
20− dicto['language'] = 'all'
21− params = qwant_images.request(query, dicto)
22− self.assertFalse('fr' in params['url'])
23−
24− def test_response(self):
25− self.assertRaises(AttributeError, qwant_images.response, None)
26− self.assertRaises(AttributeError, qwant_images.response, [])
27− self.assertRaises(AttributeError, qwant_images.response, '')
28− self.assertRaises(AttributeError, qwant_images.response, '[]')
29−
30− response = mock.Mock(text='{}')
31− self.assertEqual(qwant_images.response(response), [])
32−
33− response = mock.Mock(text='{"data": {}}')
34− self.assertEqual(qwant_images.response(response), [])
35−
36− json = """
37− {
38− "status": "success",
39− "data": {
40− "query": {
41− "locale": "en_us",
42− "query": "Test",
43− "offset": 10
44− },
45− "result": {
46− "items": [
47− {
48− "title": "Title",
49− "type": "image",
50− "media": "http://www.url.xyz/fullimage.jpg",
51− "desc": "",
52− "thumbnail": "http://www.url.xyz/thumbnail.jpg",
53− "thumb_width": 365,
54− "thumb_height": 230,
55− "width": "365",
56− "height": "230",
57− "size": "187.7KB",
58− "url": "http://www.url.xyz",
59− "_id": "0ffd93fb26f3e192a6020af8fc16fbb1",
60− "media_fullsize": "http://www.proxy/fullimage.jpg",
61− "count": 0
62− }
63− ],
64− "filters": []
65− },
66− "cache": {
67− "key": "e66aa864c00147a0e3a16ff7a5efafde",
68− "created": 1433092754,
69− "expiration": 259200,
70− "status": "miss",
71− "age": 0
72− }
73− }
74− }
75− """
76− response = mock.Mock(text=json)
77− results = qwant_images.response(response)
78− self.assertEqual(type(results), list)
79− self.assertEqual(len(results), 1)
80− self.assertEqual(results[0]['title'], 'Title')
81− self.assertEqual(results[0]['url'], 'http://www.url.xyz')
82− self.assertEqual(results[0]['content'], '')
83− self.assertEqual(results[0]['thumbnail_src'], 'http://www.url.xyz/thumbnail.jpg')
84− self.assertEqual(results[0]['img_src'], 'http://www.url.xyz/fullimage.jpg')
85−
86− json = """
87− {
88− "status": "success",
89− "data": {
90− "query": {
91− "locale": "en_us",
92− "query": "Test",
93− "offset": 10
94− },
95− "result": {
96− "filters": []
97− },
98− "cache": {
99− "key": "e66aa864c00147a0e3a16ff7a5efafde",
100− "created": 1433092754,
101− "expiration": 259200,
102− "status": "miss",
103− "age": 0
104− }
105− }
106− }
107− """
108− response = mock.Mock(text=json)
109− results = qwant_images.response(response)
110− self.assertEqual(type(results), list)
111− self.assertEqual(len(results), 0)
112−
113− json = """
114− {
115− "status": "success",
116− "data": {
117− "query": {
118− "locale": "en_us",
119− "query": "Test",
120− "offset": 10
121− },
122− "cache": {
123− "key": "e66aa864c00147a0e3a16ff7a5efafde",
124− "created": 1433092754,
125− "expiration": 259200,
126− "status": "miss",
127− "age": 0
128− }
129− }
130− }
131− """
132− response = mock.Mock(text=json)
133− results = qwant_images.response(response)
134− self.assertEqual(type(results), list)
135− self.assertEqual(len(results), 0)
136−
137− json = """
138− {
139− "status": "success"
140− }
141− """
142− response = mock.Mock(text=json)
143− results = qwant_images.response(response)
144− self.assertEqual(type(results), list)
145− self.assertEqual(len(results), 0)
searx/tests/engines/test_qwant_news.pydeleted−137
@@ -1,137 +0,0 @@
1−from collections import defaultdict
2−import mock
3−from searx.engines import qwant_news
4−from searx.testing import SearxTestCase
5−
6−
7−class TestQwantNewsEngine(SearxTestCase):
8−
9− def test_request(self):
10− query = 'test_query'
11− dicto = defaultdict(dict)
12− dicto['pageno'] = 0
13− dicto['language'] = 'fr_FR'
14− params = qwant_news.request(query, dicto)
15− self.assertIn('url', params)
16− self.assertIn(query, params['url'])
17− self.assertIn('qwant.com', params['url'])
18− self.assertIn('fr_fr', params['url'])
19−
20− dicto['language'] = 'all'
21− params = qwant_news.request(query, dicto)
22− self.assertFalse('fr' in params['url'])
23−
24− def test_response(self):
25− self.assertRaises(AttributeError, qwant_news.response, None)
26− self.assertRaises(AttributeError, qwant_news.response, [])
27− self.assertRaises(AttributeError, qwant_news.response, '')
28− self.assertRaises(AttributeError, qwant_news.response, '[]')
29−
30− response = mock.Mock(text='{}')
31− self.assertEqual(qwant_news.response(response), [])
32−
33− response = mock.Mock(text='{"data": {}}')
34− self.assertEqual(qwant_news.response(response), [])
35−
36− json = """
37− {
38− "status": "success",
39− "data": {
40− "query": {
41− "locale": "en_us",
42− "query": "Test",
43− "offset": 10
44− },
45− "result": {
46− "items": [
47− {
48− "title": "Title",
49− "score": 9999,
50− "url": "http://www.url.xyz",
51− "source": "...",
52− "desc": "Description",
53− "date": 1433065411,
54− "_id": "db0aadd62c2a8565567ffc382f5c61fa",
55− "favicon": "https://s.qwant.com/fav.ico"
56− }
57− ],
58− "filters": []
59− },
60− "cache": {
61− "key": "e66aa864c00147a0e3a16ff7a5efafde",
62− "created": 1433092754,
63− "expiration": 259200,
64− "status": "miss",
65− "age": 0
66− }
67− }
68− }
69− """
70− response = mock.Mock(text=json)
71− results = qwant_news.response(response)
72− self.assertEqual(type(results), list)
73− self.assertEqual(len(results), 1)
74− self.assertEqual(results[0]['title'], 'Title')
75− self.assertEqual(results[0]['url'], 'http://www.url.xyz')
76− self.assertEqual(results[0]['content'], 'Description')
77−
78− json = """
79− {
80− "status": "success",
81− "data": {
82− "query": {
83− "locale": "en_us",
84− "query": "Test",
85− "offset": 10
86− },
87− "result": {
88− "filters": []
89− },
90− "cache": {
91− "key": "e66aa864c00147a0e3a16ff7a5efafde",
92− "created": 1433092754,
93− "expiration": 259200,
94− "status": "miss",
95− "age": 0
96− }
97− }
98− }
99− """
100− response = mock.Mock(text=json)
101− results = qwant_news.response(response)
102− self.assertEqual(type(results), list)
103− self.assertEqual(len(results), 0)
104−
105− json = """
106− {
107− "status": "success",
108− "data": {
109− "query": {
110− "locale": "en_us",
111− "query": "Test",
112− "offset": 10
113− },
114− "cache": {
115− "key": "e66aa864c00147a0e3a16ff7a5efafde",
116− "created": 1433092754,
117− "expiration": 259200,
118− "status": "miss",
119− "age": 0
120− }
121− }
122− }
123− """
124− response = mock.Mock(text=json)
125− results = qwant_news.response(response)
126− self.assertEqual(type(results), list)
127− self.assertEqual(len(results), 0)
128−
129− json = """
130− {
131− "status": "success"
132− }
133− """
134− response = mock.Mock(text=json)
135− results = qwant_news.response(response)
136− self.assertEqual(type(results), list)
137− self.assertEqual(len(results), 0)
searx/tests/engines/test_qwant_social.pydeleted−140
@@ -1,140 +0,0 @@
1−from collections import defaultdict
2−import mock
3−from searx.engines import qwant_social
4−from searx.testing import SearxTestCase
5−
6−
7−class TestQwantSocialEngine(SearxTestCase):
8−
9− def test_request(self):
10− query = 'test_query'
11− dicto = defaultdict(dict)
12− dicto['pageno'] = 0
13− dicto['language'] = 'fr_FR'
14− params = qwant_social.request(query, dicto)
15− self.assertIn('url', params)
16− self.assertIn(query, params['url'])
17− self.assertIn('qwant.com', params['url'])
18− self.assertIn('fr_fr', params['url'])
19−
20− dicto['language'] = 'all'
21− params = qwant_social.request(query, dicto)
22− self.assertFalse('fr' in params['url'])
23−
24− def test_response(self):
25− self.assertRaises(AttributeError, qwant_social.response, None)
26− self.assertRaises(AttributeError, qwant_social.response, [])
27− self.assertRaises(AttributeError, qwant_social.response, '')
28− self.assertRaises(AttributeError, qwant_social.response, '[]')
29−
30− response = mock.Mock(text='{}')
31− self.assertEqual(qwant_social.response(response), [])
32−
33− response = mock.Mock(text='{"data": {}}')
34− self.assertEqual(qwant_social.response(response), [])
35−
36− json = """
37− {
38− "status": "success",
39− "data": {
40− "query": {
41− "locale": "en_us",
42− "query": "Test",
43− "offset": 10
44− },
45− "result": {
46− "items": [
47− {
48− "_id": "dc0b3f24c93684c7d7f1b0a4c2d9f1b0",
49− "__index": 32,
50− "title": "Title",
51− "img": "img",
52− "desc": "Description",
53− "date": 1432643480,
54− "type": "twitter",
55− "card": "XXX",
56− "post": "603176590856556545",
57− "url": "http://www.url.xyz",
58− "userUrl": "https://twitter.com/XXX"
59− }
60− ],
61− "filters": []
62− },
63− "cache": {
64− "key": "e66aa864c00147a0e3a16ff7a5efafde",
65− "created": 1433092754,
66− "expiration": 259200,
67− "status": "miss",
68− "age": 0
69− }
70− }
71− }
72− """
73− response = mock.Mock(text=json)
74− results = qwant_social.response(response)
75− self.assertEqual(type(results), list)
76− self.assertEqual(len(results), 1)
77− self.assertEqual(results[0]['title'], 'Title')
78− self.assertEqual(results[0]['url'], 'http://www.url.xyz')
79− self.assertEqual(results[0]['content'], 'Description')
80−
81− json = """
82− {
83− "status": "success",
84− "data": {
85− "query": {
86− "locale": "en_us",
87− "query": "Test",
88− "offset": 10
89− },
90− "result": {
91− "filters": []
92− },
93− "cache": {
94− "key": "e66aa864c00147a0e3a16ff7a5efafde",
95− "created": 1433092754,
96− "expiration": 259200,
97− "status": "miss",
98− "age": 0
99− }
100− }
101− }
102− """
103− response = mock.Mock(text=json)
104− results = qwant_social.response(response)
105− self.assertEqual(type(results), list)
106− self.assertEqual(len(results), 0)
107−
108− json = """
109− {
110− "status": "success",
111− "data": {
112− "query": {
113− "locale": "en_us",
114− "query": "Test",
115− "offset": 10
116− },
117− "cache": {
118− "key": "e66aa864c00147a0e3a16ff7a5efafde",
119− "created": 1433092754,
120− "expiration": 259200,
121− "status": "miss",
122− "age": 0
123− }
124− }
125− }
126− """
127− response = mock.Mock(text=json)
128− results = qwant_social.response(response)
129− self.assertEqual(type(results), list)
130− self.assertEqual(len(results), 0)
131−
132− json = """
133− {
134− "status": "success"
135− }
136− """
137− response = mock.Mock(text=json)
138− results = qwant_social.response(response)
139− self.assertEqual(type(results), list)
140− self.assertEqual(len(results), 0)
searx/tests/test_engines.py−3
@@ -26,9 +26,6 @@ from searx.tests.engines.test_openstreetmap import * # noqa
2626from searx.tests.engines.test_photon import * # noqa
2727from searx.tests.engines.test_piratebay import * # noqa
2828from searx.tests.engines.test_qwant import * # noqa
29−from searx.tests.engines.test_qwant_images import * # noqa
30−from searx.tests.engines.test_qwant_news import * # noqa
31−from searx.tests.engines.test_qwant_social import * # noqa
3229from searx.tests.engines.test_searchcode_code import * # noqa
3330from searx.tests.engines.test_searchcode_doc import * # noqa
3431from searx.tests.engines.test_soundcloud import * # noqa