From a96f503d7b4866e6eb352afd759433b3aad0a3f5 Mon Sep 17 00:00:00 2001 From: Alexandre FLAMENT Date: Fri, 26 Aug 2022 16:04:50 +0000 Subject: [PATCH] Add searx.webutils.searxng_format_date * Move the datetime to str code from searx.webapp.search to searx.webutils.searxng_format_date * When the month, day, hour, day and second are zero, the function returns only the year. --- searx/webapp.py | 17 ++--------------- searx/webutils.py | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/searx/webapp.py b/searx/webapp.py index bd76cc534..e6bda42be 100755 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -12,7 +12,6 @@ import os import sys import base64 -from datetime import datetime, timedelta from timeit import default_timer from html import escape from io import StringIO @@ -45,7 +44,6 @@ from flask.json import jsonify from flask_babel import ( Babel, gettext, - format_date, format_decimal, ) @@ -79,6 +77,7 @@ from searx.webutils import ( is_hmac_of, is_flask_run_cmdline, group_engines_in_tab, + searxng_format_date, ) from searx.webadapter import ( get_search_query_from_webapp, @@ -718,25 +717,13 @@ def search(): if 'url' in result: result['pretty_url'] = prettify_url(result['url']) - # TODO, check if timezone is calculated right # pylint: disable=fixme if result.get('publishedDate'): # do not try to get a date from an empty string or a None type try: # test if publishedDate >= 1900 (datetime module bug) result['pubdate'] = result['publishedDate'].strftime('%Y-%m-%d %H:%M:%S%z') except ValueError: result['publishedDate'] = None else: - if result['publishedDate'].replace(tzinfo=None) >= datetime.now() - timedelta(days=1): - timedifference = datetime.now() - result['publishedDate'].replace(tzinfo=None) - minutes = int((timedifference.seconds / 60) % 60) - hours = int(timedifference.seconds / 60 / 60) - if hours == 0: - result['publishedDate'] = gettext('{minutes} minute(s) ago').format(minutes=minutes) - else: - result['publishedDate'] = gettext('{hours} hour(s), {minutes} minute(s) ago').format( - hours=hours, minutes=minutes - ) - else: - result['publishedDate'] = format_date(result['publishedDate']) + result['publishedDate'] = searxng_format_date(result['publishedDate']) # set result['open_group'] = True when the template changes from the previous result # set result['close_group'] = True when the template changes on the next result diff --git a/searx/webutils.py b/searx/webutils.py index b18fd5c6a..f084fe9d3 100644 --- a/searx/webutils.py +++ b/searx/webutils.py @@ -7,11 +7,14 @@ import hmac import re import inspect import itertools +from datetime import datetime, timedelta from typing import Iterable, List, Tuple, Dict from io import StringIO from codecs import getincrementalencoder +from flask_babel import gettext, format_date + from searx import logger, settings from searx.engines import Engine, OTHER_CATEGORY @@ -138,6 +141,22 @@ def highlight_content(content, query): return content +def searxng_format_date(dt: datetime): # pylint: disable=invalid-name + # TODO, check if timezone is calculated right # pylint: disable=fixme + d = dt.date() + t = dt.time() + if d.month == 1 and d.day == 1 and t.hour == 0 and t.minute == 0 and t.second == 0: + return str(d.year) + if dt.replace(tzinfo=None) >= datetime.now() - timedelta(days=1): + timedifference = datetime.now() - dt.replace(tzinfo=None) + minutes = int((timedifference.seconds / 60) % 60) + hours = int(timedifference.seconds / 60 / 60) + if hours == 0: + return gettext('{minutes} minute(s) ago').format(minutes=minutes) + return gettext('{hours} hour(s), {minutes} minute(s) ago').format(hours=hours, minutes=minutes) + return format_date(dt) + + def is_flask_run_cmdline(): """Check if the application was started using "flask run" command line