def test_get_bang_url(self): global TEST_DB url = get_bang_url(SearchQuery('test', engineref_list=[], external_bang='example'), external_bangs_db=TEST_DB) self.assertEqual(url, 'https://example.com/test')
def search_external_bang(self): """ Check if there is a external bang. If yes, update self.result_container and return True """ if self.search_query.external_bang: self.result_container.redirect_url = get_bang_url(self.search_query) # This means there was a valid bang and the # rest of the search does not need to be continued if isinstance(self.result_container.redirect_url, str): return True return False
def search(self): global number_of_searches # Check if there is a external bang. After that we can stop because the search will terminate. if self.search_query.external_bang: self.result_container.redirect_url = get_bang_url( self.search_query) # This means there was a valid bang and the # rest of the search does not need to be continued if isinstance(self.result_container.redirect_url, str): return self.result_container # start time start_time = time() # answeres ? answerers_results = ask(self.search_query) if answerers_results: for results in answerers_results: self.result_container.extend('answer', results) return self.result_container # init vars requests = [] # increase number of searches number_of_searches += 1 # set default useragent # user_agent = request.headers.get('User-Agent', '') user_agent = gen_useragent() search_query = self.search_query # max of all selected engine timeout default_timeout = 0 # start search-reqest for all selected engines for selected_engine in search_query.engines: if selected_engine['name'] not in engines: continue engine = engines[selected_engine['name']] if not search_query.preferences.validate_token(engine): continue # skip suspended engines if engine.suspend_end_time >= time(): logger.debug('Engine currently suspended: %s', selected_engine['name']) continue # if paging is not supported, skip if search_query.pageno > 1 and not engine.paging: continue # if time_range is not supported, skip if search_query.time_range and not engine.time_range_support: continue # set default request parameters request_params = {} if not engine.offline: request_params = default_request_params() request_params['headers']['User-Agent'] = user_agent if hasattr(engine, 'language') and engine.language: request_params['language'] = engine.language else: request_params['language'] = search_query.lang request_params['safesearch'] = search_query.safesearch request_params['time_range'] = search_query.time_range request_params['category'] = selected_engine['category'] request_params['pageno'] = search_query.pageno # append request to list requests.append( (selected_engine['name'], search_query.query, request_params)) # update default_timeout default_timeout = max(default_timeout, engine.timeout) # adjust timeout self.actual_timeout = default_timeout query_timeout = self.search_query.timeout_limit if max_request_timeout is None and query_timeout is None: # No max, no user query: default_timeout pass elif max_request_timeout is None and query_timeout is not None: # No max, but user query: From user query except if above default self.actual_timeout = min(default_timeout, query_timeout) elif max_request_timeout is not None and query_timeout is None: # Max, no user query: Default except if above max self.actual_timeout = min(default_timeout, max_request_timeout) elif max_request_timeout is not None and query_timeout is not None: # Max & user query: From user query except if above max self.actual_timeout = min(query_timeout, max_request_timeout) logger.debug( "actual_timeout={0} (default_timeout={1}, ?timeout_limit={2}, max_request_timeout={3})" .format(self.actual_timeout, default_timeout, query_timeout, max_request_timeout)) # send all search-request if requests: search_multiple_requests(requests, self.result_container, start_time, self.actual_timeout) start_new_thread(gc.collect, tuple()) # return results, suggestions, answers and infoboxes return self.result_container
def test_actual_data(self): google_url = get_bang_url( SearchQuery('test', engineref_list=[], external_bang='g')) self.assertEqual(google_url, 'https://www.google.com/search?q=test')
def test_no_external_bang_query(self): result = get_bang_url( SearchQuery('test', engineref_list=[EngineRef('wikipedia', 'general')])) self.assertEqual(result, None)