Browse Source

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.
Alexandre FLAMENT 2 years ago
parent
commit
a96f503d7b
2 changed files with 21 additions and 15 deletions
  1. 2 15
      searx/webapp.py
  2. 19 0
      searx/webutils.py

+ 2 - 15
searx/webapp.py

@@ -12,7 +12,6 @@ import os
 import sys
 import sys
 import base64
 import base64
 
 
-from datetime import datetime, timedelta
 from timeit import default_timer
 from timeit import default_timer
 from html import escape
 from html import escape
 from io import StringIO
 from io import StringIO
@@ -45,7 +44,6 @@ from flask.json import jsonify
 from flask_babel import (
 from flask_babel import (
     Babel,
     Babel,
     gettext,
     gettext,
-    format_date,
     format_decimal,
     format_decimal,
 )
 )
 
 
@@ -79,6 +77,7 @@ from searx.webutils import (
     is_hmac_of,
     is_hmac_of,
     is_flask_run_cmdline,
     is_flask_run_cmdline,
     group_engines_in_tab,
     group_engines_in_tab,
+    searxng_format_date,
 )
 )
 from searx.webadapter import (
 from searx.webadapter import (
     get_search_query_from_webapp,
     get_search_query_from_webapp,
@@ -718,25 +717,13 @@ def search():
         if 'url' in result:
         if 'url' in result:
             result['pretty_url'] = prettify_url(result['url'])
             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
         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)
             try:  # test if publishedDate >= 1900 (datetime module bug)
                 result['pubdate'] = result['publishedDate'].strftime('%Y-%m-%d %H:%M:%S%z')
                 result['pubdate'] = result['publishedDate'].strftime('%Y-%m-%d %H:%M:%S%z')
             except ValueError:
             except ValueError:
                 result['publishedDate'] = None
                 result['publishedDate'] = None
             else:
             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['open_group'] = True when the template changes from the previous result
         # set result['close_group'] = True when the template changes on the next result
         # set result['close_group'] = True when the template changes on the next result

+ 19 - 0
searx/webutils.py

@@ -7,11 +7,14 @@ import hmac
 import re
 import re
 import inspect
 import inspect
 import itertools
 import itertools
+from datetime import datetime, timedelta
 from typing import Iterable, List, Tuple, Dict
 from typing import Iterable, List, Tuple, Dict
 
 
 from io import StringIO
 from io import StringIO
 from codecs import getincrementalencoder
 from codecs import getincrementalencoder
 
 
+from flask_babel import gettext, format_date
+
 from searx import logger, settings
 from searx import logger, settings
 from searx.engines import Engine, OTHER_CATEGORY
 from searx.engines import Engine, OTHER_CATEGORY
 
 
@@ -138,6 +141,22 @@ def highlight_content(content, query):
     return content
     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():
 def is_flask_run_cmdline():
     """Check if the application was started using "flask run" command line
     """Check if the application was started using "flask run" command line