Procházet zdrojové kódy

Extend duration display to similar articles

jherve před 1 rokem
rodič
revize
cf34257719

+ 1 - 0
pyproject.toml

@@ -29,6 +29,7 @@ dependencies = [
     "annoy>=1.17.3",
     "numpy>=1.26.4",
     "babel>=2.15.0",
+    "humanize>=4.9.0",
 ]
 readme = "README.md"
 requires-python = ">= 3.11"

+ 2 - 0
requirements-dev.lock

@@ -99,6 +99,8 @@ httptools==0.6.1
     # via uvicorn
 httpx==0.27.0
     # via fastapi
+humanize==4.9.0
+    # via de-quoi-parle-le-monde
 hypercorn==0.16.0
     # via de-quoi-parle-le-monde
 hyperframe==6.0.1

+ 2 - 0
requirements.lock

@@ -99,6 +99,8 @@ httptools==0.6.1
     # via uvicorn
 httpx==0.27.0
     # via fastapi
+humanize==4.9.0
+    # via de-quoi-parle-le-monde
 hypercorn==0.16.0
     # via de-quoi-parle-le-monde
 hyperframe==6.0.1

+ 9 - 5
src/de_quoi_parle_le_monde/web.py

@@ -5,6 +5,7 @@ from fastapi.staticfiles import StaticFiles
 from fastapi.templating import Jinja2Templates
 from babel.dates import format_datetime, format_timedelta
 from babel import Locale
+import humanize
 
 from de_quoi_parle_le_monde.medias import media_collection
 from de_quoi_parle_le_monde.storage import Storage
@@ -16,16 +17,19 @@ def add_date_processing(_any):
         return format_datetime(dt, format="EEEE d MMMM @ HH:mm", locale=Locale("fr", "FR"))
 
     def duration(reference, target):
+        humanize.activate("fr_FR")
         delta = target - reference
-        kwargs = dict(granularity='hour', locale=Locale("fr", "FR"))
-        if delta > timedelta(0):
-            return f"{format_timedelta(delta, **kwargs)} après"
+        delta_str = humanize.naturaldelta(delta)
+        if abs(delta.total_seconds()) < 10 * 60:
+            return "en même temps"
+        elif delta > timedelta(0):
+            return f"{delta_str} après"
         else:
-            return f"{format_timedelta(delta, **kwargs)} avant"
+            return f"{delta_str} avant"
 
     return {
         "absolute_datetime": absolute_datetime,
-        "duration": duration
+        "duration": duration,
     }
 
 

+ 3 - 1
templates/site_main_article_detail.html

@@ -29,7 +29,9 @@
                 <ul>
                     {% for s, distance in similar %}
                         {% if s["is_main"] %}
-                        <li>{{ article(s) }} [{{ distance | round(3) }}]</li>
+                        <li>{{ article(s) }}
+                            <time class="relative">{{ duration(focused["timestamp_virtual"], s["timestamp_virtual"]) }}</time>
+                            [{{ distance | round(3) }}]</li>
                         {% endif %}
                     {% endfor %}
                 </ul>