From f9cb34c67372dfd59af15008afcc8b330de453fc Mon Sep 17 00:00:00 2001 From: "vy.boyko" Date: Thu, 17 Oct 2024 19:01:50 +0300 Subject: [PATCH] added updating time at every feed --- src/fetcher.py | 4 +++- src/server.py | 21 ++++++++++++++++++--- src/templates/feed.html | 4 +++- src/templates/index.html | 31 ++++++++++++++++++++++++++----- 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/src/fetcher.py b/src/fetcher.py index 9d15535..25b906f 100644 --- a/src/fetcher.py +++ b/src/fetcher.py @@ -11,6 +11,7 @@ import src.stats as stats def fetch(settings: list, args: Namespace) -> None: logger = l.getChild(__name__) + logger.info("Starting refreshing feeds") for sets in settings: logger.info(f"Working set: {sets}") assert type(sets) == dict @@ -33,4 +34,5 @@ def fetch(settings: list, args: Namespace) -> None: rss.write(chunk) except requests.exceptions.ConnectionError as e: logger.warning(f"Unable to fetch {sets['src']}", e) - stats.set_last_modified_at(datetime.now()) \ No newline at end of file + stats.set_last_modified_at(datetime.now()) + logger.info("Feeds refreshed") \ No newline at end of file diff --git a/src/server.py b/src/server.py index b0bd9a7..6e5b82c 100644 --- a/src/server.py +++ b/src/server.py @@ -1,5 +1,6 @@ import asyncio import os +import time from argparse import Namespace import tornado from src.logger import logger as l @@ -14,13 +15,27 @@ def start_server(settings: list, args: Namespace) -> None: local_format = "%Y-%m-%d %H:%M:%S" local_tz = ZoneInfo('Europe/Moscow') + def _modification_date(filename): + t = os.path.getmtime(filename) + return datetime.fromtimestamp(t) + def _get_all_feeds(): - return [{ 'rss': sets['name'], 'file': f"/feeds/{sets['rss']}" } for sets in settings if os.path.isfile(f"{args.directory}/{sets['rss']}")] + return [{ + 'pos': idx+1, + 'rss': sets['name'], + 'file': f"/feeds/{sets['rss']}", + 'updated_at': _to_local_tz(_modification_date(f"{args.directory}/{sets['rss']}")).strftime(local_format) + } for idx, sets in enumerate(settings) if os.path.isfile(f"{args.directory}/{sets['rss']}")] + + def _to_local_tz(dt: datetime) -> datetime: + local_dt = dt.astimezone(local_tz) + return local_dt def _local_now() -> datetime: dt = stats.get_last_modified_at() - local_dt = dt.astimezone(local_tz) - return local_dt + if dt is None: + dt = datetime.now() + return _to_local_tz(dt) class MainHandler(tornado.web.RequestHandler): def set_default_headers(self): diff --git a/src/templates/feed.html b/src/templates/feed.html index 34b24b1..7e9fa4c 100644 --- a/src/templates/feed.html +++ b/src/templates/feed.html @@ -1 +1,3 @@ -
  • {{ feed['rss'] }}
  • \ No newline at end of file +{{ feed['pos'] }} +{{ feed['rss'] }} +{{ feed['updated_at'] }} \ No newline at end of file diff --git a/src/templates/index.html b/src/templates/index.html index d29d2aa..ef7330c 100644 --- a/src/templates/index.html +++ b/src/templates/index.html @@ -4,16 +4,37 @@ RSS feedler +

    Feeds available:

    Last modified at: {{ last_modified_at }}, {{ tz }}

    -
      - {% for feed in feeds %} - {% module Template("feed.html", feed=feed) %} - {% end %} -
    + + + + + + + + + + {% for feed in feeds %} + + {% module Template("feed.html", feed=feed) %} + + {% end %} + +
    ##FeeedLast updated at