summaryrefslogtreecommitdiff
path: root/src/pyssg/rss.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/pyssg/rss.py')
-rw-r--r--src/pyssg/rss.py60
1 files changed, 19 insertions, 41 deletions
diff --git a/src/pyssg/rss.py b/src/pyssg/rss.py
index 742b6b2..7de29ae 100644
--- a/src/pyssg/rss.py
+++ b/src/pyssg/rss.py
@@ -1,60 +1,38 @@
import os
-import importlib.metadata
+from jinja2 import Environment, Template
+from importlib.metadata import version
from datetime import datetime, timezone
from .page import Page
from .configuration import Configuration
-VERSION = importlib.metadata.version('pyssg')
-# This is static right here since an rss feed
-# requires very specific date format
+VERSION = version('pyssg')
+# specific format for rss
DFORMAT = '%a, %d %b %Y %H:%M:%S GMT'
+RUN_DATE = datetime.now(tz=timezone.utc).strftime(DFORMAT)
class RSSBuilder:
def __init__(self, config: Configuration,
- template: str,
- pages: list[Page]):
+ env: Environment,
+ pages: list[Page],
+ tags: list[tuple[str]]):
self.config: Configuration = config
- self.rss: str = template
+ self.env: Environment = env
self.pages: list[Page] = pages
+ self.tags: list[tuple[str]] = tags
def build(self):
- # initial base replacements
- self.rss = self.rss.replace('$$TITLE', self.config.title)
- self.rss = self.rss.replace('$$LINK', self.config.base_url)
- self.rss = self.rss.replace('$$PYSSGVERSION', f'pyssg v{VERSION}')
- items_formatted: str = self.__get_items_formatted()
- self.rss = self.rss.replace('$$ITEMS', items_formatted)
-
- current_date: str = datetime.now(tz=timezone.utc).strftime(DFORMAT)
- self.rss = self.rss.replace('$$CURRENTDATE', current_date)
+ template: Template = self.env.get_template("rss.xml")
+ content: str = template.render(site_title=self.config.title,
+ site_base_url=self.config.base_url,
+ site_base_static_url=self.config.base_static_url,
+ pyssg_version=VERSION,
+ run_date=RUN_DATE,
+ all_pages=self.pages,
+ all_tags=self.tags)
with open(os.path.join(self.config.dst, 'rss.xml'), 'w') as f:
- f.write(self.rss)
-
-
- def __get_items_formatted(self) -> str:
- # i_f=items formatted for short
- i_f: str = ''
- for p in self.pages:
- url: str = f'{self.config.base_url}/{p.name.replace(".md", ".html")}'
- date: str = p.c_datetime.strftime(DFORMAT)
-
- i_f = f'{i_f} <item>\n'
- i_f = f'{i_f} <title>{p.title}</title>\n'
- i_f = f'{i_f} <link>{url}</link>\n'
- i_f = f'{i_f} <guid isPermaLink="true">{url}</guid>\n'
- i_f = f'{i_f} <pubDate>{date}</pubDate>\n'
- # TODO: maybe make this optional?
- # add the tags as categories
- if p.tags is not None:
- for t in p.tags:
- i_f = f'{i_f} <category>{t.capitalize()}</category>\n'
- i_f = f'{i_f} <description>{p.summary}</description>\n'
- i_f = f'{i_f} <content:encoded><![CDATA[{p.html}]]></content:encoded>\n'
- i_f = f'{i_f} </item>\n'
-
- return i_f
+ f.write(content)