summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoémi Ványi <sitbackandwait@gmail.com>2020-04-17 16:31:02 +0200
committerNoémi Ványi <sitbackandwait@gmail.com>2020-04-17 23:39:48 +0200
commitbce3830b8dd9322e4e93d0003aa86e03c03e2dca (patch)
tree1bf6c3124684bc38fd00e90749b23ac4719e4e80
parentba7c8d7b960c3a3f288db162a51b76a2a935a605 (diff)
downloadsearxng-bce3830b8dd9322e4e93d0003aa86e03c03e2dca.tar.gz
searxng-bce3830b8dd9322e4e93d0003aa86e03c03e2dca.zip
[fix] translate engine errors to Occitan when configured
-rw-r--r--searx/results.py4
-rw-r--r--searx/search.py17
-rwxr-xr-xsearx/webapp.py14
3 files changed, 19 insertions, 16 deletions
diff --git a/searx/results.py b/searx/results.py
index 3b1e4bd62..02ab9efb1 100644
--- a/searx/results.py
+++ b/searx/results.py
@@ -345,8 +345,8 @@ class ResultContainer(object):
return 0
return resultnum_sum / len(self._number_of_results)
- def add_unresponsive_engine(self, engine_error):
- self.unresponsive_engines.add(engine_error)
+ def add_unresponsive_engine(self, engine_name, error_type, error_message=None):
+ self.unresponsive_engines.add((engine_name, error_type, error_message))
def add_timing(self, engine_name, engine_time, page_load_time):
self.timings.append({
diff --git a/searx/search.py b/searx/search.py
index 2dcc4c8f7..661add7ca 100644
--- a/searx/search.py
+++ b/searx/search.py
@@ -127,11 +127,7 @@ def search_one_offline_request_safe(engine_name, query, request_params, result_c
logger.exception('engine {0} : invalid input : {1}'.format(engine_name, e))
except Exception as e:
record_offline_engine_stats_on_error(engine, result_container, start_time)
-
- result_container.add_unresponsive_engine((
- engine_name,
- u'{0}: {1}'.format(gettext('unexpected crash'), e),
- ))
+ result_container.add_unresponsive_engine(engine_name, 'unexpected crash', str(e))
logger.exception('engine {0} : exception : {1}'.format(engine_name, e))
@@ -186,24 +182,21 @@ def search_one_http_request_safe(engine_name, query, request_params, result_cont
engine.stats['errors'] += 1
if (issubclass(e.__class__, requests.exceptions.Timeout)):
- result_container.add_unresponsive_engine((engine_name, gettext('timeout')))
+ result_container.add_unresponsive_engine(engine_name, 'timeout')
# requests timeout (connect or read)
logger.error("engine {0} : HTTP requests timeout"
"(search duration : {1} s, timeout: {2} s) : {3}"
.format(engine_name, engine_time, timeout_limit, e.__class__.__name__))
requests_exception = True
elif (issubclass(e.__class__, requests.exceptions.RequestException)):
- result_container.add_unresponsive_engine((engine_name, gettext('request exception')))
+ result_container.add_unresponsive_engine(engine_name, 'request exception')
# other requests exception
logger.exception("engine {0} : requests exception"
"(search duration : {1} s, timeout: {2} s) : {3}"
.format(engine_name, engine_time, timeout_limit, e))
requests_exception = True
else:
- result_container.add_unresponsive_engine((
- engine_name,
- u'{0}: {1}'.format(gettext('unexpected crash'), e),
- ))
+ result_container.add_unresponsive_engine(engine_name, 'unexpected crash', str(e))
# others errors
logger.exception('engine {0} : exception : {1}'.format(engine_name, e))
@@ -238,7 +231,7 @@ def search_multiple_requests(requests, result_container, start_time, timeout_lim
remaining_time = max(0.0, timeout_limit - (time() - start_time))
th.join(remaining_time)
if th.isAlive():
- result_container.add_unresponsive_engine((th._engine_name, gettext('timeout')))
+ result_container.add_unresponsive_engine(th._engine_name, 'timeout')
logger.warning('engine timeout: {0}'.format(th._engine_name))
diff --git a/searx/webapp.py b/searx/webapp.py
index 9d76d8441..8c3531069 100755
--- a/searx/webapp.py
+++ b/searx/webapp.py
@@ -626,7 +626,7 @@ def index():
'corrections': list(result_container.corrections),
'infoboxes': result_container.infoboxes,
'suggestions': list(result_container.suggestions),
- 'unresponsive_engines': list(result_container.unresponsive_engines)},
+ 'unresponsive_engines': __get_translated_errors(result_container.unresponsive_engines)}, # noqa
default=lambda item: list(item) if isinstance(item, set) else item),
mimetype='application/json')
elif output_format == 'csv':
@@ -694,7 +694,7 @@ def index():
corrections=correction_urls,
infoboxes=result_container.infoboxes,
paging=result_container.paging,
- unresponsive_engines=result_container.unresponsive_engines,
+ unresponsive_engines=__get_translated_errors(result_container.unresponsive_engines),
current_language=match_language(search_query.lang,
LANGUAGE_CODES,
fallback=request.preferences.get_value("language")),
@@ -705,6 +705,16 @@ def index():
)
+def __get_translated_errors(unresponsive_engines):
+ translated_errors = []
+ for unresponsive_engine in unresponsive_engines:
+ error_msg = gettext(unresponsive_engine[1])
+ if unresponsive_engine[2]:
+ error_msg = "{} {}".format(error_msg, unresponsive_engine[2])
+ translated_errors.append((unresponsive_engine[0], error_msg))
+ return translated_errors
+
+
@app.route('/about', methods=['GET'])
def about():
"""Render about page"""
0; if(!atoi(colon+1)) { /* bad port */ log_fn(LOG_DEBUG,"relay begin cell has invalid port. Dropping."); return 0; } log_fn(LOG_DEBUG,"Creating new exit connection."); n_stream = connection_new(CONN_TYPE_EXIT); if(!n_stream) { log_fn(LOG_DEBUG,"connection_new failed. Dropping."); return 0; } memcpy(n_stream->stream_id, cell->payload + RELAY_HEADER_SIZE, STREAM_ID_SIZE); n_stream->address = strdup(cell->payload + RELAY_HEADER_SIZE + STREAM_ID_SIZE); n_stream->port = atoi(colon+1); n_stream->state = EXIT_CONN_STATE_RESOLVING; n_stream->receiver_bucket = -1; /* edge connections don't do receiver buckets */ n_stream->bandwidth = -1; n_stream->s = -1; /* not yet valid */ n_stream->package_window = STREAMWINDOW_START; n_stream->deliver_window = STREAMWINDOW_START; if(connection_add(n_stream) < 0) { /* no space, forget it */ log_fn(LOG_DEBUG,"connection_add failed. Dropping."); connection_free(n_stream); return 0; } /* add it into the linked list of streams on this circuit */ n_stream->next_stream = circ->n_streams; circ->n_streams = n_stream; /* send it off to the gethostbyname farm */ switch(dns_resolve(n_stream)) { case 1: /* resolve worked */ if(connection_exit_connect(n_stream) >= 0) return 0; /* else fall through */ case -1: /* resolve failed */ log_fn(LOG_DEBUG,"Couldn't queue resolve request."); connection_remove(n_stream); connection_free(n_stream); case 0: /* resolve added to pending list */ ; } return 0; } int connection_exit_connect(connection_t *conn) { int s; /* for the new socket */ struct sockaddr_in dest_addr; if(router_compare_to_exit_policy(conn) < 0) { log_fn(LOG_INFO,"%s:%d failed exit policy. Closing.", conn->address, conn->port); return -1; } /* all the necessary info is here. Start the connect() */ s=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP); if (s < 0) { log_fn(LOG_ERR,"Error creating network socket."); return -1; } set_socket_nonblocking(s); memset((void *)&dest_addr,0,sizeof(dest_addr)); dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(conn->port); dest_addr.sin_addr.s_addr = htonl(conn->addr); log_fn(LOG_DEBUG,"Connecting to %s:%u.",conn->address,conn->port); if(connect(s,(struct sockaddr *)&dest_addr,sizeof(dest_addr)) < 0) { if(!ERRNO_CONN_EINPROGRESS(errno)) { /* yuck. kill it. */ perror("connect"); log_fn(LOG_DEBUG,"Connect failed."); return -1; } else { /* it's in progress. set state appropriately and return. */ conn->s = s; connection_set_poll_socket(conn); conn->state = EXIT_CONN_STATE_CONNECTING; log_fn(LOG_DEBUG,"connect in progress, socket %d.",s); connection_watch_events(conn, POLLOUT | POLLIN | POLLERR); /* writable indicates finish, readable indicates broken link, error indicates broken link in windowsland. */ return 0; } } /* it succeeded. we're connected. */ log_fn(LOG_DEBUG,"Connection to %s:%u established.",conn->address,conn->port); conn->s = s; connection_set_poll_socket(conn); conn->state = EXIT_CONN_STATE_OPEN; if(connection_wants_to_flush(conn)) { /* in case there are any queued data cells */ log_fn(LOG_ERR,"tell roger: newly connected conn had data waiting!"); // connection_start_writing(conn); } // connection_process_inbuf(conn); connection_watch_events(conn, POLLIN); /* also, deliver a 'connected' cell back through the circuit. */ return connection_edge_send_command(conn, circuit_get_by_conn(conn), RELAY_COMMAND_CONNECTED); } /* Local Variables: mode:c indent-tabs-mode:nil c-basic-offset:2 End: */