Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a96f503d authored by Alexandre FLAMENT's avatar Alexandre FLAMENT Committed by Alexandre Flament
Browse files

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.
parent bef3984d
Loading
Loading
Loading
Loading
+2 −15
Original line number Diff line number Diff line
@@ -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
+19 −0
Original line number Diff line number Diff line
@@ -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