From 0be2fcbbe50bcefce3161621b0caf28d148a0d50 Mon Sep 17 00:00:00 2001 From: bvn13 Date: Wed, 16 Oct 2024 01:49:49 +0300 Subject: [PATCH] added last modified date into web page --- src/fetcher.py | 3 +++ src/server.py | 7 ++++--- src/stats.py | 11 +++++++++++ src/templates/index.html | 1 + 4 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 src/stats.py diff --git a/src/fetcher.py b/src/fetcher.py index 8d7e743..3414685 100644 --- a/src/fetcher.py +++ b/src/fetcher.py @@ -1,3 +1,4 @@ +from datetime import datetime from argparse import Namespace import requests.exceptions @@ -5,6 +6,7 @@ from requests import Session from requests.adapters import HTTPAdapter from urllib3.util import Retry from src.logger import logger as l +import stats def fetch(settings: list, args: Namespace) -> None: @@ -31,3 +33,4 @@ 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 diff --git a/src/server.py b/src/server.py index 1518e09..eddf341 100644 --- a/src/server.py +++ b/src/server.py @@ -1,8 +1,9 @@ import asyncio -import os, fnmatch +import os from argparse import Namespace import tornado from src.logger import logger as l +import stats def start_server(settings: list, args: Namespace) -> None: @@ -10,7 +11,7 @@ def start_server(settings: list, args: Namespace) -> None: 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 [{ 'rss': f, 'file': f"/feeds/{f}" } for f in fnmatch.filter(os.listdir(args.directory), '*.xml')] + class MainHandler(tornado.web.RequestHandler): def set_default_headers(self): @@ -19,7 +20,7 @@ def start_server(settings: list, args: Namespace) -> None: self.set_header('Access-Control-Allow-Methods', 'GET, OPTIONS') def get(self): - self.render("index.html", feeds=_get_all_feeds()) + self.render("index.html", feeds=_get_all_feeds(), last_modified_at=stats.get_last_modified_at()) async def start_web_server(): diff --git a/src/stats.py b/src/stats.py new file mode 100644 index 0000000..7c97e74 --- /dev/null +++ b/src/stats.py @@ -0,0 +1,11 @@ +from datetime import datetime +from typing import Optional + +_last_modified_at: Optional[datetime] = None + +def set_last_modified_at(dt: datetime) -> None: + global _last_modified_at + _last_modified_at = dt + +def get_last_modified_at() -> Optional[datetime]: + return _last_modified_at \ No newline at end of file diff --git a/src/templates/index.html b/src/templates/index.html index 5e03d0e..3271a3d 100644 --- a/src/templates/index.html +++ b/src/templates/index.html @@ -7,6 +7,7 @@

Feeds available:

+

Last modified at: {{ last_modified_at }}

    {% for feed in feeds %} {% module Template("feed.html", feed=feed) %}